allex_dataservice
Version:
108 lines (104 loc) • 4.79 kB
JavaScript
function createDataSuite(execlib, datalib){
'use strict';
var lib = execlib.lib;
/*
var execSuite = execlib.execSuite,
dataSuite = {
storageRegistry: new execSuite.RegistryBase(),
recordSuite: require('./record')(execlib)
};
execlib.dataSuite = dataSuite;
dataSuite.ObjectHive = require('./objectcreator')(execlib);
require('./utils')(execlib);
dataSuite.filterFactory = datafilterslib;//require('./filters/factorycreator')(execlib);
dataSuite.QueryBase = require('./query/basecreator')(execlib);
dataSuite.QueryClone = require('./query/clonecreator')(execlib);
var DataCoder = require('./codercreator')(execlib),
DataDecoder = require('./decodercreator')(execlib),
streamSourceCreator = execSuite.streamSourceCreator;
dataSuite.DataSource = streamSourceCreator(DataCoder);
dataSuite.DataDecoder = DataDecoder;
dataSuite.StreamDistributor = require('./distributorcreator')(execlib);
dataSuite.DataManager = require('./managercreator')(execlib);
dataSuite.DistributedDataManager = require('./distributedmanagercreator')(execlib);
dataSuite.SpawningDataManager = require('./spawningmanagercreator')(execlib);
dataSuite.StorageBase = require('./storage/basecreator')(execlib);
dataSuite.NullStorage = require('./storage/nullcreator')(execlib);
dataSuite.CloneStorage = require('./storage/clonecreator')(execlib);
var MemoryStorageBase = require('./storage/memorybasecreator')(execlib);
dataSuite.MemoryStorageBase = MemoryStorageBase;
dataSuite.AsyncMemoryStorageBase = require('./storage/asyncmemorystoragebasecreator')(execlib);
dataSuite.MemoryStorage = require('./storage/memorycreator')(execlib, MemoryStorageBase);
dataSuite.MemoryListStorage = require('./storage/memorylistcreator')(execlib, MemoryStorageBase);
dataSuite.storageRegistry.register('memory', dataSuite.MemoryListStorage);
dataSuite.storageRegistry.register('memorylist', dataSuite.MemoryListStorage);
*/
function copierWOFields(dest,item,itemname){
if(itemname==='fields'){
return;
}
dest[itemname] = item;
}
function nameFinder(findobj,name,item){
if(item && item.name===name){
findobj.result = item;
return true;
}
}
function getNamedItem(arry,name){
var findobj={result:null};
arry.some(nameFinder.bind(null,findobj,name));
return findobj.result;
};
function namedSetter(setitem,item,itemindex,arry){
if(item && item.name===setitem.name){
arry[itemindex] = setitem;
return true;
}
}
function setNamedItem(arry,item){
if(!item){
return;
}
if(!arry.some(namedSetter.bind(null,item))){
arry.push(item);
};
};
function copyNamedItems(src,dest,fieldnamesarry){
if(!(lib.isArray(src) && lib.isArray(dest))){
return;
}
fieldnamesarry.forEach(function(fn){
var item = getNamedItem(src,fn);
if(item){
setNamedItem(dest,item);
}
});
}
function sinkInheritProcCreator(classname,originalUIP){//originalUIP <=> original User inheritance proc
//classname not used, but may be useful for error reporting...
return function(childCtor,methodDescriptors,visiblefieldsarray){
originalUIP.call(this,childCtor,methodDescriptors);
childCtor.prototype.visibleFields = datalib.recordSuite.copyAndAppendNewElements(this.prototype.visibleFields,visiblefieldsarray);
childCtor.inherit = this.inherit;
//console.log('after inherit',childCtor.prototype.visibleFields,'out of parent',this.prototype.visibleFields,'and',visiblefieldsarray);
};
}
var sinkPreInheritProc = sinkInheritProcCreator('DataSink',execlib.execSuite.registry.clientSides.get('.').get('user').inherit);
function sinkInheritProc(childCtor,methodDescriptors,visiblefieldsarray,classStorageDescriptor){
sinkPreInheritProc.call(this,childCtor,methodDescriptors,visiblefieldsarray);
var recordDescriptor = {};
lib.traverseShallow(this.prototype.recordDescriptor,copierWOFields.bind(null,recordDescriptor));
var fields = [];
if(this.prototype.recordDescriptor){
copyNamedItems(this.prototype.recordDescriptor.fields,fields,childCtor.prototype.visibleFields);
}
lib.traverseShallow(classStorageDescriptor.record, copierWOFields.bind(null,recordDescriptor));
copyNamedItems(classStorageDescriptor.record.fields,fields,childCtor.prototype.visibleFields);
recordDescriptor.fields = fields;
childCtor.prototype.recordDescriptor = recordDescriptor;
}
datalib.recordSuite.sinkInheritProc = sinkInheritProc;
execlib.dataSuite = datalib;
}
module.exports = createDataSuite;