/** * Project : AMDA-NG4 * Name : ExecutableNode.js * @class amdaModel.ExecutableNode * @extends amdaModel.InteractiveNode * @brief Generic Model of Executable Node * @author elena * @version $Id: ExecutableNode.js 1662 2013-07-02 15:10:22Z benjamin $ */ Ext.define('amdaModel.ExecutableNode', { extend: 'amdaModel.InteractiveNode', fields: [ 'jobNode', 'resultModel' ], statics: { jobTreeLoaded : false }, constructor : function(config) { this.callParent(arguments); this.set('ownerTreeId',amdaUI.ExplorerUI.OPE_TAB.TREE_ID); this.set('jobNode', 'amdaModel.BkgJobNode'); }, loadJobTree : function(opts) { var rootNode = Ext.getCmp(amdaUI.ExplorerUI.JOB_TAB.TREE_ID).getRootNode(); var me = this; amdaModel.InteractiveNode.preloadNodes(rootNode, function(){ amdaModel.ExecutableNode.jobTreeLoaded = true; me.realExecute(opts); }); }, execute : function(opts) { if (!amdaModel.ExecutableNode.jobTreeLoaded) this.loadJobTree(opts); else this.realExecute(opts); }, /** * Method to execute this node */ realExecute : function(opts) { var isInteractivePlot = (this.get('nodeType') == 'request') && (this.get('object').get('file-output') == 'INTERACTIVE') || (this.get('nodeType') == 'multiplot'); var jsonObject = this.get('object').getJsonValues(); if (opts && opts.sendToSamp) { jsonObject.sendToSamp = true; opts.clientId = opts.clientId ? opts.clientId : 'hub'; } if (!loadMask.isMasked()) loadMask.show(isInteractivePlot); AmdaAction.execute({nodeType : this.get('nodeType')}, jsonObject, function(res,e) { loadMask.hide(); //AKKA - Rework of the result treatment for the integration with the new kernel if (!e.status){ // myDesktopApp.errorMsg('Internal error during request'); return; } if (!res.success){ myDesktopApp.errorMsg(res.message); return; } if (res.killed) return; if (isInteractivePlot){ myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id, true, function (module) { module.updateInteractiveSession(res, true); }); } else if (!res.id && res.download) { //Download TT / Cat if (res.sendToSamp) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) { Ext.Array.each(res.download, function(download) { module.sendVOTable(download, opts.clientId); }); }); return; } else if (res.compression) { window.location.href = res.download; } else { window.open(res.download, '_blank'); } return; } else { if (res.sendToSamp) { // Send to SAMP from Download UI var files = res.result.split(","); myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) { Ext.each(files, function(file) { var href = 'data/'+sessionID+'/RES/'+ res.folder + '/' + file; module.sendVOTable(href, opts.clientId); }); }); return; } if (logExecTime && res.exectime && (res.exectime != 0)) { console.log("CMD EXEC TIME FOR "+res.id+" = "+res.exectime+"ms"); } var newobj = this.createJobObject(res); var newNode = Ext.create(this.get('jobNode'), { info : res.info, jobType : this.get('nodeType'), processId : res.id, id : res.id, text : res.name, status : res.status, start : res.start, stop : res.stop, tabId : res.tabId, leaf : true, object : newobj }); newNode.get('object').on('execute', function() { // Then call the node creation method this.execute(opts); }, newNode); switch (res.status) { case amdaModel.BkgJobNode.STATUS_LIST.DONE : newNode.createJobNode(true); newNode.editNode(true, false); break; case amdaModel.BkgJobNode.STATUS_LIST.IN_PROGRESS : newNode.createJobNode(false); break; default: newNode.createJobNode(true); } } }, this ); }, createJobObject: function(res) { var obj = this.get('object').getJsonValues(); //TODO text, name, outputName - if all is needed //new object to attach to new bkgJobNode //TODO Ext.clone() var newobj = Ext.copyTo({}, obj, this.get('object').propertiesToCopy); newobj.resultId = res.result; newobj.folderId = res.folder; newobj.processId= res.id; newobj.tabId = res.tabId; newobj.name = res.name; newobj = Ext.create(this.get('object').$className, newobj); return newobj; }, /** * override isExecutable to return true */ isExecutable: function() { return true; } });