146 lines
2.5 KiB
JavaScript
146 lines
2.5 KiB
JavaScript
|
|
var Object = require('./object');
|
|
var Value = require('./value');
|
|
|
|
/**
|
|
* A map container for many Sql.Object
|
|
*/
|
|
module.exports = new Class
|
|
({
|
|
Extends: Object
|
|
,Tag: 'sql-batch'
|
|
,Properties:
|
|
{
|
|
blocked:
|
|
{
|
|
type: Boolean
|
|
,set: function(x) {
|
|
this._blocked = x;
|
|
}
|
|
,get: function() {
|
|
return this._blocked;
|
|
}
|
|
}
|
|
}
|
|
|
|
,objects: {}
|
|
,_blocked: false
|
|
|
|
,loadXml: function(scope, node) {
|
|
this.parent(scope, node);
|
|
|
|
var childs = node.childNodes;
|
|
|
|
for (var i = 0; i < childs.length; i++)
|
|
if (childs[i].tagName && childs[i].tagName.toLowerCase() == 'item') {
|
|
var object;
|
|
var id = childs[i].getAttribute('name');
|
|
|
|
if (id) {
|
|
if (object = scope.getById(childs[i].getAttribute('param')))
|
|
this.addParam(id, object);
|
|
else if (object = scope.getById(childs[i].getAttribute('object')))
|
|
this.addObject(id, object);
|
|
}
|
|
}
|
|
}
|
|
|
|
,get: function(id) {
|
|
if (this.objects[id])
|
|
return this.objects[id];
|
|
|
|
return null;
|
|
}
|
|
|
|
,add: function(id) {
|
|
if (!this.objects[id])
|
|
this.objects[id] = null;
|
|
}
|
|
|
|
,_addObject: function(id, object) {
|
|
this.remove(id);
|
|
this.objects[id] = object;
|
|
object.on('changed', this.emitChanged, this);
|
|
this.emitChanged();
|
|
}
|
|
|
|
,addObject: function(id, object) {
|
|
this._addObject(id, object.ref());
|
|
}
|
|
|
|
,addValue: function(id, value) {
|
|
this._addObject(id,
|
|
new Value({value: value}));
|
|
}
|
|
|
|
,addValues: function(values) {
|
|
for (var id in values)
|
|
this.addValue(id, values[id]);
|
|
}
|
|
|
|
,addParam: function(id, param) {
|
|
this._addObject(id,
|
|
new Value({param: param}));
|
|
}
|
|
|
|
,getValue: function(id) {
|
|
var object = this.objects[id];
|
|
|
|
if (object instanceof Value)
|
|
return object.value;
|
|
|
|
return null;
|
|
}
|
|
|
|
,addParams: function(params) {
|
|
for (var id in params)
|
|
this.addParam(id, params[id]);
|
|
}
|
|
|
|
,remove: function(id) {
|
|
if (this.objects[id]) {
|
|
this._unrefObject(this.objects[id]);
|
|
delete this.objects[id];
|
|
}
|
|
}
|
|
|
|
,block: function() {
|
|
this._blocked = true;
|
|
}
|
|
|
|
,unblock: function() {
|
|
this._blocked = false;
|
|
}
|
|
|
|
,emitChanged: function() {
|
|
if (!this._blocked)
|
|
this.signalEmit('changed');
|
|
}
|
|
|
|
,changed: function() {
|
|
this.signalEmit('changed');
|
|
}
|
|
|
|
,isReady: function() {
|
|
for (var id in this.objects)
|
|
if (!(this.objects[id] && this.objects[id].isReady()))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
,_unrefObject: function(object) {
|
|
if (object) {
|
|
object.disconnect('changed', this.emitChanged, this);
|
|
object.unref();
|
|
}
|
|
}
|
|
|
|
,_destroy: function() {
|
|
for (var id in this.objects)
|
|
this._unrefObject(this.objects[id]);
|
|
|
|
this.parent();
|
|
}
|
|
});
|