diff src/implab/data/DataContext.js @ 0:fc2517695ee1

Initial commit, draft import of existing work
author cin
date Thu, 01 Jun 2017 13:20:03 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/implab/data/DataContext.js	Thu Jun 01 13:20:03 2017 +0300
@@ -0,0 +1,45 @@
+define([ "dojo/_base/declare", "../safe" ], function(declare, safe) {
+    return declare(
+        null,
+        {
+            _params : null,
+
+            _repositories : null,
+
+            constructor : function(opts) {
+                this._params = opts || {};
+                this._repositories = {};
+            },
+
+            getRepository : function(name) {
+                safe.argumentNotEmptyString(name, "name");
+                var repo = this._repositories[name];
+                if (!repo) {
+                    repo = this._params[name];
+                    if (!repo)
+                        throw new Error("The repository '" + name +
+                            "' isn't found");
+                    if (repo instanceof Function)
+                        repo = new repo(); // factory method or constructor
+                    if (repo.initialize) {
+                        repo.initialize({
+                            dataContext : this
+                        });
+                    } else if (repo.setDataContext) {
+                        repo.setDataContext(this);
+                    }
+                    this._repositories[name] = repo;
+                }
+
+                return repo;
+            },
+
+            dispose : function() {
+                for( var name in this._repositories) {
+                    var r = this._repositories[name];
+                    if (r.dispose)
+                        r.dispose();
+                }
+            }
+        });
+});
\ No newline at end of file