UNPKG

dl

Version:

DreamLab Libs

176 lines (162 loc) 6.74 kB
var Class = require('core').Class; var CdfContainer = require('./CdfContainer.js').CdfContainer; var CdfBlocks = require('./CdfBlocks.js').CdfBlocks; var Response = require('core').http.Response; var ErrorEvent = require('core').event.ErrorEvent; //var CdfApplicationContainer = require('./CdfApplicationContainer.js').CdfApplicationContainer; var CdfApplications = function () { this.Extends = CdfContainer; this.initialize = function (cdfpage) { this.parent(); this._applicationContainers = {}; this._cdfpage = cdfpage; this._appsByName = {}; }; this.isEmpty = function () { return !Object.keys(this._appsByName).length; }; /** * add CdfApplication to right CdfApplicationContainer * @method * @param {CdfApplication} application */ this.add = function (application) { var controller = application.controller, container; if (!this._applicationContainers.hasOwnProperty(controller)) { var CdfApplicationContainer = require('./CdfApplicationContainer.js').CdfApplicationContainer; this._applicationContainers[controller] = new CdfApplicationContainer(controller); } container = this._applicationContainers[controller]; container.add(application); this._appsByName[application.name] = application; }; /** * get CdfApplicationContainer with related CdfApplication * @param {String} name * @returns {CdfApplicationContainer} */ this.get = function (name) { if (this._applicationContainers.hasOwnProperty(name)) { return this._applicationContainers[name]; } else { return false; } }; /** * get CdfApplication by application name * @param {String} name * @returns {CdfApplication} */ this.getApplicationByName = function (name) { if (this._appsByName.hasOwnProperty(name)) { return this._appsByName[name]; } else { return null; } }; /** * return all known CdfApplicationContainers * @method */ this.getApplicationContainers = function () { var containers = []; for (var i in this._applicationContainers) { if (this._applicationContainers.hasOwnProperty(i)) { containers.push(this._applicationContainers[i]); } } return containers; }; this.fetchApplications = function (request, logger, callback) { var applications = 0, i, max; var models = []; var that = this; if (logger) { var apps_log = {}; var logStatus = 'info'; } if (Object.keys(this._applicationContainers).length == 0) { callback(); return; } if (logger) { var startTime = Date.now(); } for (var container in this._applicationContainers) { if (!this._applicationContainers.hasOwnProperty(container)) { continue; } applications++; this._applicationContainers[container].fetchApplication(request, logger, (function (c) { return function (err, data) { var apps, i, len, model = {}; applications--; if (logger) { apps_log[c] = { requestTime: (Date.now() - startTime) + 'ms' }; } if (err) { if (logger) { logStatus = 'error'; apps_log[c].status ='ERROR'; apps_log[c].error = err.message; } apps = that._applicationContainers[c].getApplications(); for (i=0, max=apps.length; i<max; i++) { var error = new ErrorEvent(err); model = {}; model[apps[i].name] = error; models.push(model); } } else if (data instanceof CdfBlocks) { if (logger) { apps_log[c].status ='BLOCKS'; apps_log[c].blocks = {}; for (i = 0, len = data._models.length; i < len; i++) { data._models[i].name; apps_log[c].blocks[data._models[i].name] = data._models[i]; } } for (i = 0, max = data._models.length; i < max; i++) { models.push(data._models[i]); } } else if (data instanceof Response) { if (logger) { apps_log[c].status ='Response'; apps_log[c].response = data.toJson(); } apps = that._applicationContainers[c].getApplications(); for (i=0, max=apps.length; i<max; i++) { model = {}; model[apps[i].name] = data; models.push(model); } } if (!applications) { if (logger) { if (logStatus == 'info') { logger.info(apps_log, 'CdfApplications'); } else { logger.error(apps_log, 'CdfApplications'); } } callback(models); } }; })(container)); } }; this.getNonrenderedApplications = function () { var apps = []; for (var name in this._appsByName) { if (this._appsByName.hasOwnProperty(name) && this._appsByName[name].getRenderedData() == null) { apps.push(this._appsByName[name]); } } return apps; } }; CdfApplications = new Class(new CdfApplications()); exports.CdfApplications = CdfApplications;