"use strict"; var counter = 0; var Subscribable = require("../utils/subscribable"); var Controller = require("./controller"); var LocalModel = Subscribable.inherit({ "className": "LocalModel", "constructor": function(properties, data) { Subscribable.fn.constructor.call(this); this.properties = []; this._controllers = []; this._foreignControllers = []; if (properties) { for (var key in properties) { if (properties.hasOwnProperty(key)) { var pair = {p: key, k: properties[key]}; this.properties.push(pair); } } } if (data !== undefined) { this.data = data; this.initialized = true; } }, "destructor": function() { for (i = 0; i < this._foreignControllers.length; ++i) { var pair = this._foreignControllers[i]; global.unsubscribeForeignController(pair.n, pair.c); global.unregisterForeignController(pair.n, pair.c); pair.c.destructor(); } for (var i = 0; i < this._controllers.length; ++i) { this._controllers[i].destructor(); } Subscribable.fn.destructor.call(this); }, "addController": function(ctrl) { this._controllers.push(ctrl); }, "addForeignController": function(nodeName, ctrl) { if (!(ctrl instanceof Controller)) { throw new Error("An attempt to add not a controller into " + this.className); } this._foreignControllers.push({n: nodeName, c: ctrl}); ctrl.on("serviceMessage", this._onControllerServiceMessage, this); global.registerForeignController(nodeName, ctrl); global.subscribeForeignController(nodeName, ctrl); }, "_onControllerServiceMessage": Controller.fn._onControllerServiceMessage, "removeForeignController": function(ctrl) { if (!(ctrl instanceof Controller)) { throw new Error("An attempt to remove not a controller from " + this.className); } for (var i = 0; i < this._foreignControllers.length; ++i) { if (this._foreignControllers[i].c === ctrl) { break; } } if (i === this._foreignControllers.length) { throw new Error("An attempt to remove not not existing controller from " + this.className); } else { var pair = this._foreignControllers[i]; global.unsubscribeForeignController(pair.n, pair.c); global.registerForeignController(pair.n, pair.c); pair.c.off("serviceMessage", this._onControllerServiceMessage, this); this._foreignControllers.splice(i, 1); } }, "setData": function(data) { this.data = data; this.initialized = true; this.trigger("data"); } }); module.exports = LocalModel;