diff --git a/js/app/controllers/DownloadModule.js b/js/app/controllers/DownloadModule.js index 17725bf..12f5cc4 100644 --- a/js/app/controllers/DownloadModule.js +++ b/js/app/controllers/DownloadModule.js @@ -22,7 +22,6 @@ Ext.define('amdaDesktop.DownloadModule', { * @cfg {String} data models * @required */ - objectDataModel : 'amdaModel.Download', nodeDataModel : 'amdaModel.DownloadNode', /** @@ -30,21 +29,11 @@ Ext.define('amdaDesktop.DownloadModule', { * @required */ width: 600, - height: 600, + height: 620, uiType : 'panelDownload', helpTitle : 'Help on Download Module', helpFile : 'downloadHelp', - /** - * @override - */ - createWindow : function() { - if (!this.linkedNode){ - this.setLinkedNode(amdaModel.DownloadNode); - } - this.callParent(arguments); - }, - saveState: function() { var uiContent = this.getUiContent(); var form = uiContent.down('form').getForm(); @@ -56,5 +45,20 @@ Ext.define('amdaDesktop.DownloadModule', { getState : function() { // return Ext.state.Manager.get(this.id + '_form'); return Ext.state.Manager.get('timeinterval'); + }, + + addParameter: function(paramNode) { + var me = this; + var desktop = this.app.getDesktop(); + var win = desktop.getWindow(this.id); + if (win) { + me.getUiContent().addParameter(paramNode, false); + win.show(); + } + else { + this.createWindow(function () { + me.getUiContent().addParameter(paramNode, true); + }); + } } -}); \ No newline at end of file +}); diff --git a/js/app/models/BkgJobNode.js b/js/app/models/BkgJobNode.js index 460785e..8e3e2c7 100644 --- a/js/app/models/BkgJobNode.js +++ b/js/app/models/BkgJobNode.js @@ -395,97 +395,5 @@ Ext.define('amdaModel.BkgJobNode', { this.set('rootNode',this.myGetOwnerTree().getRootNode().findChild( 'id', rootNodeId, true)); } return this.get('rootNode'); - }, - - /** - * @override amdaModel.ExecutableNode.execute PNG (interactive session only!!!) - */ - execute : function(arguments) - { - // Not needed to send the whole request - // var jsonObj = this.get('object').getJsonValues(true); - //TODO append jsonObj.action at server side => history!!! - var jsonObj = {}; - var isMulti = arguments[0]; - jsonObj.action = {name:arguments[1],arg1:arguments[2],arg2:arguments[3]}; - //AKKA replace resultID by folderId - jsonObj.folderId = this.get('object').get('folderId'); - //jsonObj.resultId = this.get('object').get('resultFolder'); - - this.action = jsonObj.action.name; - - // this.set('tabId', jsonObj.tabId); - - // Node exists already, interactive Session - var isInteractive = true; - var isNewTab = false; - - loadMask.show(this.get('object').get('tabId')); - AmdaAction.execute({nodeType : this.get('nodeType')}, jsonObj, 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; - } - // NO background jobs for PNG !!!!! Timeout KILL - if (res.status == amdaModel.BkgJobNode.STATUS_LIST.DONE) - { - this.updateNode(res); - this.updateObject(res); - this.editNode(isNewTab, isInteractive); - } - else - { - myDesktopApp.warningMsg(res.message); - // keep this for case of Background Job - /* var id = res.id; - var text = 'job_' + res.pid; - var status = amdaModel.BkgJobNode.STATUS_LIST.IN_PROGRESS; - var newobj = Ext.create('amdaModel.Plot', - { resultId : id, name : res.rawname, resultId: res.rawname}); - var newNode = Ext.create(this.$className, { id : id, pid : res.pid, text : text, jobType : 'request', - leaf : true, status : status, rawname : res.rawname, object : newobj}); - newNode.createJobNode(false); - */ - } - }, this); - }, - - updateNode : function(res) - { - var windowId = 'plot' + this.get('tabId')+'-win'; - var win = myDesktopApp.getDesktop().getWindow(windowId); - //TODO if it is possible to close window before getting result? - if (!win) - myDesktopApp.errorMsg('You have closed window!!!'); - else - { - var panelResult = win.items.items[0]; - panelResult.setObjectIntoNode(); - } - }, - - updateObject : function(res) - { - var object = this.get('object'); - object.set('outputName', res.name); - object.set('resultId', res.result); - object.set('startDate', res.startDate); - object.set('stopDate', res.stopDate); - - if (object.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.action != 'zoom') - { - object.set('intervalN', res.intervalN); - object.set('totalN', res.totalN); - object.set('ttName', res.tableName); - } - } + } }); diff --git a/js/app/models/DownloadNode.js b/js/app/models/DownloadNode.js index 82217c9..6231c5d 100644 --- a/js/app/models/DownloadNode.js +++ b/js/app/models/DownloadNode.js @@ -2,7 +2,7 @@ * Project : AMDA-NG4 * Name : DownloadNode.js * @class amdaModel.DownloadNode - * @extends Ext.data.Model + * @extends amdaModel.ExecutableNode * @brief Basic Model of Node corresponding to a download request * @author Myriam * @version $Id: DownloadNode.js 2949 2015-06-23 10:25:59Z elena $ @@ -10,70 +10,23 @@ Ext.define('amdaModel.DownloadNode', { - extend: 'Ext.data.Model', - singleton: true, + extend: 'amdaModel.ExecutableNode', + + statics: { + nodeType: 'download' + }, - fields:[{name : 'downloadType', type : 'string'}, - {name: 'object', type: 'object'}, - {name: 'realLinkedNode', type: 'amdaModel.AmdaNode'}, - {name: 'moduleId', type: 'string', defaultValue:'down-win'}, - {name: 'nodeType', type: 'string', defaultValue: 'download'}, - {name: 'objectDataModel', type: 'string', defaultValue:'amdaModel.Download'}, - {name: 'jobNode', type: 'string', defaultValue: 'amdaModel.BkgJobNode'} - ], - - isExecutable: function(){ - return true; - }, - - getObjectCallback : function(result,remoteEvent){ - var t = remoteEvent.getTransaction(); - if (result) { - var paramObj = Ext.create(this.get('objectDataModel'), result); - // set parameter into node - this.set('object', paramObj); - var downObject = amdaModel.DownloadNode.decodeObject(); - // Edition ; - amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject)); - amdaModel.DownloadNode.editInModule(); - } - else { - myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '" - +this.get('name')+"' found!"); - // EXCEPTION : parameter not found !? - } - }, - - editInModule : function () { - var me = this; - myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) { - // If the node to edit is not already linked to this module - if (module.getLinkedNode() != me) { - // set relative node into parameter Module - module.setLinkedNode(me); - } - else {// the node to edit is already edited - //TODO: TBD : message to user - //Sol1: msg alert: "warning this node is already edited! If you want to get the original, please press the 'reset' button"->'OK' - //Sol2: msg with user choice: "warning this node is already edited! Would you confirm this action and lost your modification?"->'Confirm','Cancel' - } - // Opening parameter window - module.createWindow(); - }); - }, + constructor : function(config) { + this.callParent(arguments); + this.set('moduleId',myDesktopApp.dynamicModules.download.id); + this.set('objectDataModel',amdaModel.Download.$className); + }, decodeObject: function(obj) { var myValues = new Object(); myValues.list=[]; - if (!obj) { - var fullObject = this.get('realLinkedNode').get('object'); - } - else { - var fullObject = obj; - } - - fullObject.panels().each(function (panel) { + obj.panels().each(function (panel) { panel.params().each(function (param) { var myParam = new Object(); myParam.paramid = param.get('paramid'); @@ -98,13 +51,13 @@ Ext.define('amdaModel.DownloadNode', { alert('Parameter '+ myParam.paramid + ' is PlotOnly'); }); }); - myValues.timesrc = fullObject.get('timesrc'); + myValues.timesrc = obj.get('timesrc'); // if there's at least one timeTable name into 'timeTables' collection if (myValues.timesrc == amdaModel.AmdaTimeObject.inputTimeSrc[0] - && fullObject.get('timeTables') - && fullObject.get('timeTables').length){ + && obj.get('timeTables') + && obj.get('timeTables').length){ // get complete timeTables collection - var timeTables = fullObject.get('timeTables'); + var timeTables = obj.get('timeTables'); // init an empty array for timeTables myValues.timeTables=[]; // for each interval record @@ -119,150 +72,15 @@ Ext.define('amdaModel.DownloadNode', { }); } else { - myValues.startDate = fullObject.get('startDate'); - myValues.stopDate = fullObject.get('stopDate'); - myValues.durationDay = fullObject.get('durationDay'); - myValues.durationHour = fullObject.get('durationHour'); - myValues.durationMin = fullObject.get('durationMin'); - myValues.durationSec = fullObject.get('durationSec'); + myValues.startDate = obj.get('startDate'); + myValues.stopDate = obj.get('stopDate'); + myValues.durationDay = obj.get('durationDay'); + myValues.durationHour = obj.get('durationHour'); + myValues.durationMin = obj.get('durationMin'); + myValues.durationSec = obj.get('durationSec'); } - myValues.name = fullObject.get('name'); + myValues.name = obj.get('name'); return myValues; - }, - - encodeObject: function() { - }, - - loadJobTree : function(sendToSamp, clientId) { - //TBD - BRE - fix code duplication with ExecutableNode if possible - var rootNode = Ext.getCmp(amdaUI.ExplorerUI.JOB_TAB.TREE_ID).getRootNode(); - var me = this; - amdaModel.InteractiveNode.preloadNodes(rootNode, - function() - { - amdaModel.InteractiveNode.jobTreeLoaded = true; - me.realExecute(sendToSamp, clientId); - }); - }, - - execute : function(sendToSamp, clientId) { - - if (!amdaModel.ExecutableNode.jobTreeLoaded) this.loadJobTree(sendToSamp, clientId); - else this.realExecute(sendToSamp, clientId); - }, - -/** -* Method to execute this node -*/ - realExecute : function(sendToSamp, clientId) { - var jsonObject = this.get('object').getJsonValues(); - if (!jsonObject.list && !jsonObject.images) { - myDesktopApp.warningMsg('Please select at least one Parameter (Get Data) or one Time Table (Get Time Table)'); - return; - } - - if (sendToSamp) { - jsonObject.sendToSamp = true; - } - - loadMask.show(); - 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 download request'); - return; - } - - if (!res.success) - { - myDesktopApp.errorMsg(res.message); - return; - } - //TBD if such condition is OK ? - if (!res.id && res.download) { - if (res.sendToSamp) { - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) { - Ext.Array.each(res.download, function(download) { - module.sendVOTable(download, clientId ? clientId : 'hub'); - }); - }); - return; - } else if (res.compression) { - window.location.href = res.download; - } - else { - window.open(res.download, '_blank'); - } - 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'), - { - id : res.id, - info : res.info, - jobType : this.get('nodeType'), - processId : res.id, - text : res.name, - status : res.status, - stop : res.stop, - leaf : true, - object : newobj - - }); - - // new Tab - switch (res.status) - { - case amdaModel.BkgJobNode.STATUS_LIST.DONE : - if (!res.sendToSamp) { - // New tab, non-interactive session - var isInteractive = false; - var isNewTab = true; - newNode.createJobNode(true); - newNode.editNode(isNewTab, isInteractive); - } - else { - var files = res.result.split(","); - Ext.each(files, function(file) { - var href = 'data/'+sessionID+'/RES/'+ res.folder + '/' + file; - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) { - module.sendVOTable(href, clientId ? clientId : 'hub'); - }); - }); - } - 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.id = res.id; - newobj.resultId = res.result; - newobj.folderId = res.folder; - newobj = Ext.create(this.get('object').$className, newobj); - - return newobj; - } + } }); diff --git a/js/app/models/ExecutableNode.js b/js/app/models/ExecutableNode.js index d00b5a2..e5335eb 100644 --- a/js/app/models/ExecutableNode.js +++ b/js/app/models/ExecutableNode.js @@ -22,35 +22,40 @@ Ext.define('amdaModel.ExecutableNode', { this.set('jobNode', 'amdaModel.BkgJobNode'); }, - loadJobTree : function() + 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(); + me.realExecute(opts); }); }, - execute : function(isDirty) + execute : function(opts) { if (!amdaModel.ExecutableNode.jobTreeLoaded) - this.loadJobTree(); + this.loadJobTree(opts); else - this.realExecute(); + this.realExecute(opts); }, /** * Method to execute this node */ - realExecute : function() + 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) { + opts.sendToSamp = true; + } if (!loadMask.isMasked()) loadMask.show(isInteractivePlot); - AmdaAction.execute({nodeType : this.get('nodeType')}, this.get('object').getJsonValues(true), + AmdaAction.execute({nodeType : this.get('nodeType')}, jsonObject, function(res,e) { loadMask.hide(); @@ -75,6 +80,15 @@ Ext.define('amdaModel.ExecutableNode', { }); } else { + /*if (res.sendToSamp) { + myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) { + Ext.Array.each(res.download, function(download) { + module.sendVOTable(download, clientId ? clientId : 'hub'); + }); + }); + return; + }*/ + if (logExecTime && res.exectime && (res.exectime != 0)) { console.log("CMD EXEC TIME FOR "+res.id+" = "+res.exectime+"ms"); } @@ -96,7 +110,7 @@ Ext.define('amdaModel.ExecutableNode', { newNode.get('object').on('execute', function() { // Then call the node creation method - this.execute(arguments); + this.execute(opts); }, newNode); switch (res.status) diff --git a/js/app/models/InteractiveNode.js b/js/app/models/InteractiveNode.js index 6e678f6..e0d0118 100644 --- a/js/app/models/InteractiveNode.js +++ b/js/app/models/InteractiveNode.js @@ -487,78 +487,7 @@ Ext.define('amdaModel.InteractiveNode', { createDownload: function(node) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id, true, function (module) { - if (!myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.download.id)) { - var request = Ext.create(amdaModel.Download.$className); - amdaModel.DownloadNode.set('object',request); - // singleton! - amdaModel.DownloadNode.editInModule(); - if ((node.get('globalStart') != null) && (node.get('globalStop') != null) && node.get('globalStart') != 'depending on mission' && node.get('isParameter')) { - module.getUiContent().setTimeFromData(node.getTimeFromNode(node)); - } - } - var paramName; - var components = null; - switch (node.$className) { - case 'amdaModel.AliasNode' : - paramName = "#"+node.get('text'); - break; - case 'amdaModel.DerivedParamComponentNode' : - - paramId = node.get('text'); - var parentId = paramId.substr(0, paramId.length - 3); - paramName= "ws_" + parentId; - var regExp = /\(([\d]+)\)/; - var component_index = regExp.exec(paramId); - if (component_index) - { - components = []; - components['index1'] = component_index[1]; - } - break; - case 'amdaModel.MyDataParamComponentNode' : - paramId = node.get('text'); - var parentId = paramId.substr(0, paramId.length - 3); - paramName= "wsd_" + parentId; - var regExp = /\(([\d]+)\)/; - var component_index = regExp.exec(paramId); - if (component_index) - { - components = []; - components['index1'] = component_index[1]; - } - break; - case 'amdaModel.DerivedParamNode' : - paramName = "ws_"+node.get('text'); - break; - case 'amdaModel.MyDataParamNode' : - paramName = 'wsd_'+node.get('text'); - break; - default : - if (node.get('alias')!= "" ) - paramName = "#"+node.get('alias'); - else - paramName = node.get('id'); - } - var component_info = node.get('component_info'); - var predefinedArgs = node.get('predefinedArgs'); - if (component_info && component_info.parentId) { - //It's a component - paramName = component_info.parentId; - components = []; - if (component_info.index1) - components['index1'] = component_info.index1; - if (component_info.index2) - components['index2'] = component_info.index2; - predefinedArgs = node.parentNode.get('predefinedArgs'); - } - if (predefinedArgs) { - module.parseTemplatedParam(paramName, function(param_info) { - module.addParam(param_info.paramid, true, node.get('needsArgs'), components, param_info.template_args); - }); - } - else { - module.addParam(paramName,true,node.get('needsArgs'),components); - } + module.addParameter(node); }); }, diff --git a/js/app/models/StatisticsNode.js b/js/app/models/StatisticsNode.js index 89a12c7..41d7e0b 100644 --- a/js/app/models/StatisticsNode.js +++ b/js/app/models/StatisticsNode.js @@ -14,9 +14,7 @@ Ext.define('amdaModel.StatisticsNode', { singleton: true, fields: [ - {name: 'downloadType', type : 'string'}, {name: 'object', type: 'object'}, - {name: 'realLinkedNode', type: 'amdaModel.AmdaNode'}, {name: 'moduleId', type: 'string', defaultValue:'statistics-win'}, {name: 'nodeType', type: 'string', defaultValue: 'statistics'}, {name: 'objectDataModel', type: 'string', defaultValue:'amdaModel.Stats'}, diff --git a/js/app/views/DownloadUI.js b/js/app/views/DownloadUI.js index e8ca84e..2ed0cc9 100644 --- a/js/app/views/DownloadUI.js +++ b/js/app/views/DownloadUI.js @@ -92,6 +92,12 @@ Ext.define('amdaUI.DownloadUI', { this.timeSelector.intervalSel.updateDuration(); }, + addParameter: function(paramNode, updateTime) + { + //this.paramGrid.dropTarget.notifyOver(paramNode,null,'append'); + //this.paramGrid.dropTarget.notifyDrop(paramNode,null,'append'); + }, + addParam: function (paramId, isLeaf, needArgs, components, predefined_args) { // adding the parameter to the paramGrid @@ -299,7 +305,7 @@ Ext.define('amdaUI.DownloadUI', { doDownload: function (sendToSamp, clientId) { var downloadModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id); if (downloadModule) - downloadModule.linkedNode.execute(sendToSamp, clientId); + downloadModule.linkedNode.execute({'sendToSamp': (sendToSamp == true), 'clientId': clientId}); }, actionItem: function (grid, cell, cellIndex, record, row, recordIndex, e) { @@ -355,6 +361,11 @@ Ext.define('amdaUI.DownloadUI', { } }, + doParamDrop: function(paramNode) + { + + }, + /** * Check if changes were made before closing window * @return false @@ -401,7 +412,7 @@ Ext.define('amdaUI.DownloadUI', { { var me = this; var el = me.body.dom; - var dropTarget = Ext.create('Ext.dd.DropTarget', el, { + me.dropTarget = Ext.create('Ext.dd.DropTarget', el, { ddGroup: 'explorerTree', notifyEnter: function (ddSource, e, data) { }, notifyOver: function (ddSource, e, data) -- libgit2 0.21.2