Commit fdf1413b728ea7fa54e005976cfba24d497d3767

Authored by Elena.Budnik
1 parent 501f5f6c

TT download

js/app/AmdaApp.js
@@ -501,8 +501,7 @@ Ext.define('amdaApp.AmdaApp', { @@ -501,8 +501,7 @@ Ext.define('amdaApp.AmdaApp', {
501 msg += ('<b>Groups :</b> '+result['group']+'<br/>'); 501 msg += ('<b>Groups :</b> '+result['group']+'<br/>');
502 msg += ('<b>Email :</b> '+result['email']+'<br/>'); 502 msg += ('<b>Email :</b> '+result['email']+'<br/>');
503 msg += ('<b>Registration date :</b> '+result['date']+'<br/>'); 503 msg += ('<b>Registration date :</b> '+result['date']+'<br/>');
504 - msg += ('<b>Receive Newsletter :</b> '+(result['news'] == "1"?"true":"false")+'<br/>');  
505 - 504 +
506 this.infoMsg(msg); 505 this.infoMsg(msg);
507 } 506 }
508 else 507 else
js/app/models/Download.js
@@ -3,120 +3,117 @@ @@ -3,120 +3,117 @@
3 * Name : Download.js 3 * Name : Download.js
4 * Description : Download Request Business Object Definition 4 * Description : Download Request Business Object Definition
5 * @class amdaModel.Download 5 * @class amdaModel.Download
6 - * @extends amdaModel.AmdaObject  
7 - * 6 + * @extends amdaModel.AmdaTimeObject
8 * @author myriam 7 * @author myriam
9 * @version $Id: Download.js 2068 2014-02-06 11:27:38Z elena $ 8 * @version $Id: Download.js 2068 2014-02-06 11:27:38Z elena $
10 - ******************************************************************************  
11 - * FT Id : Date : Name - Description  
12 - ******************************************************************************  
13 - * : :15/12/2011: myriam – creation  
14 */ 9 */
15 10
16 11
17 Ext.define('amdaModel.Download', { 12 Ext.define('amdaModel.Download', {
18 - extend: 'amdaModel.AmdaTimeObject', 13 + extend: 'amdaModel.AmdaTimeObject',
19 14
20 - fields : [  
21 - {name: 'type', type: 'string', defaultValue: 'Download'},  
22 - {name: 'downloadSrc', type: 'string'},  
23 - {name: 'list', defaultValue: null }, // array of parameters  
24 - {name: 'timeformat', type: 'string'},  
25 - {name: 'timeformatTT', type: 'string'},  
26 - {name: 'structure', type: 'string'},  
27 - {name: 'refparamSampling', type: 'boolean', defaultValue: false},  
28 - {name: 'sampling', type: 'int', defaultValue: '600'},  
29 - {name: 'fileprefix', type: 'string'},  
30 - {name: 'fileformat', type: 'string'},  
31 - {name: 'fileformatTT', type: 'string'},  
32 - {name: 'compression', type: 'string'},  
33 - {name: 'compressionTT', type: 'string'} 15 + fields : [
  16 + {name: 'type', type: 'string', defaultValue: 'Download'},
  17 + {name: 'downloadSrc', type: 'string'},
  18 + {name: 'list', defaultValue: null }, // array of parameters
  19 + {name: 'timeformat', type: 'string'},
  20 + {name: 'timeformatTT', type: 'string'},
  21 + {name: 'structure', type: 'string'},
  22 + {name: 'refparamSampling', type: 'boolean', defaultValue: false},
  23 + {name: 'sampling', type: 'int', defaultValue: '600'},
  24 + {name: 'fileprefix', type: 'string'},
  25 + {name: 'fileformat', type: 'string'},
  26 + {name: 'fileformatTT', type: 'string'},
  27 + {name: 'compression', type: 'string'},
  28 + {name: 'compressionTT', type: 'string'}
34 ], 29 ],
35 - 30 +
36 propertiesToCopy : 'id,name,downloadSrc,refparamSampling,sampling,list,timeformat,timeformatTT,structure,fileprefix,fileformat,fileformatTT,compression,compressionTT', 31 propertiesToCopy : 'id,name,downloadSrc,refparamSampling,sampling,list,timeformat,timeformatTT,structure,fileprefix,fileformat,fileformatTT,compression,compressionTT',
37 32
38 getJsonValues : function(){ 33 getJsonValues : function(){
39 34
40 - var myValues = new Object();  
41 - myValues.nodeType = 'download';//amdaModel.DownloadNode.nodeType;  
42 - myValues.type = this.get('type');  
43 - myValues.downloadSrc = this.get('downloadSrc');  
44 -//Data download  
45 - if (myValues.downloadSrc === '0') { // Data download  
46 - myValues.structure = this.get('structure');  
47 - myValues.refparamSampling = this.get('refparamSampling');  
48 - myValues.sampling = this.get('sampling');  
49 - myValues.fileprefix = this.get('fileprefix');  
50 -  
51 - myValues.timesrc = this.get('timesrc');  
52 - // if there's at least one timeTable in case of Download data  
53 - if (this.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.get('timeTables') && this.get('timeTables').length){  
54 - // get complete timeTables collection  
55 - var timeTables = this.get('timeTables');  
56 - // init an empty array for timeTables  
57 - myValues.timeTables=[];  
58 - // for each interval record  
59 - Ext.Array.each(timeTables, function(item, index, all){  
60 - // get Json simplified value  
61 - if (!item.$className) {  
62 - myValues.timeTables[index] = {timeTableName : item.timeTableName, id : item.id};  
63 - }  
64 - // get Json simplified value  
65 - else {  
66 - myValues.timeTables[index] = item.getJsonValues();  
67 - }  
68 - });  
69 - } else {  
70 - myValues.startDate = this.get('startDate');  
71 - myValues.stopDate = this.get('stopDate');  
72 - myValues.durationDay = this.get('durationDay');  
73 - myValues.durationHour = this.get('durationHour');  
74 - myValues.durationMin = this.get('durationMin');  
75 - myValues.durationSec = this.get('durationSec');  
76 - }  
77 -  
78 - // if there's at least one parameter  
79 - if (this.get('list') && this.get('list').length) {  
80 - var list = this.get('list');  
81 - myValues.list=[];  
82 -  
83 - Ext.each(list, function(item, index){  
84 - myValues.list[index] = item.getJsonValues();  
85 - });  
86 - }  
87 - myValues.fileformat = this.get('fileformat');  
88 - myValues.timeformat = this.get('timeformat');  
89 - myValues.compression = this.get('compression');  
90 - }  
91 - else if (myValues.downloadSrc === '1'){ // TT download  
92 - // if there's at least one timeTable  
93 - if (this.get('timeTables') && this.get('timeTables').length) {  
94 - var list = this.get('timeTables');  
95 - myValues.list=[];  
96 -  
97 - Ext.each(list, function(item, index){  
98 - myValues.list[index]=item.get('id');  
99 - });  
100 - }  
101 - myValues.fileformat = this.get('fileformatTT');  
102 - myValues.timeformat = this.get('timeformatTT');  
103 - myValues.compression = this.get('compressionTT');  
104 - }  
105 - else { // fits images download  
106 - myValues.list=[];  
107 - if (this.get('list') && this.get('list').length)  
108 - Ext.each(this.get('list'), function(item, index){  
109 - var image = new Object();  
110 - image.name = item['name'];  
111 - image.url = item['url'];  
112 - myValues.list[index] = image;  
113 - });  
114 - myValues.compression = this.get('compression');  
115 - }  
116 -  
117 - myValues.leaf = true;  
118 - // myValues.nodeType = amdaModel.PlotNode.nodeType;  
119 - return myValues;  
120 - }  
121 - 35 + var myValues = new Object();
  36 + myValues.nodeType = 'download';//amdaModel.DownloadNode.nodeType;
  37 + myValues.type = this.get('type');
  38 + myValues.downloadSrc = this.get('downloadSrc');
  39 + //Data download
  40 + if (myValues.downloadSrc === '0') { // Data download
  41 + myValues.structure = this.get('structure');
  42 + myValues.refparamSampling = this.get('refparamSampling');
  43 + myValues.sampling = this.get('sampling');
  44 + myValues.fileprefix = this.get('fileprefix');
  45 +
  46 + myValues.timesrc = this.get('timesrc');
  47 + // if there's at least one timeTable in case of Download data
  48 + if (this.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.get('timeTables') && this.get('timeTables').length){
  49 + // get complete timeTables collection
  50 + var timeTables = this.get('timeTables');
  51 + // init an empty array for timeTables
  52 + myValues.timeTables=[];
  53 + // for each interval record
  54 + Ext.Array.each(timeTables, function(item, index, all){
  55 + // get Json simplified value
  56 + if (!item.$className) {
  57 + myValues.timeTables[index] = {timeTableName : item.timeTableName, id : item.id};
  58 + }
  59 + // get Json simplified value
  60 + else {
  61 + myValues.timeTables[index] = item.getJsonValues();
  62 + }
  63 + });
  64 + } else {
  65 + myValues.startDate = this.get('startDate');
  66 + myValues.stopDate = this.get('stopDate');
  67 + myValues.durationDay = this.get('durationDay');
  68 + myValues.durationHour = this.get('durationHour');
  69 + myValues.durationMin = this.get('durationMin');
  70 + myValues.durationSec = this.get('durationSec');
  71 + }
  72 +
  73 + // if there's at least one parameter
  74 + if (this.get('list') && this.get('list').length) {
  75 + var list = this.get('list');
  76 + myValues.list=[];
  77 + Ext.each(list, function(item, index){
  78 + myValues.list[index] = item.getJsonValues();
  79 + });
  80 + }
  81 + myValues.fileformat = this.get('fileformat');
  82 + myValues.timeformat = this.get('timeformat');
  83 + myValues.compression = this.get('compression');
  84 + }
  85 + // TT download
  86 + else if (myValues.downloadSrc === '1') {
  87 + // if there's at least one timeTable
  88 + if (this.get('timeTables') && this.get('timeTables').length) {
  89 + var list = this.get('timeTables');
  90 + myValues.list=[];
  91 +
  92 + Ext.each(list, function(item, index){
  93 + var tt = new Object();
  94 + tt.name = item.get('name');
  95 + tt.id = item.get('id');
  96 + myValues.list[index] = tt;
  97 + });
  98 + }
  99 + myValues.fileformat = this.get('fileformatTT');
  100 + myValues.timeformat = this.get('timeformatTT');
  101 + myValues.compression = this.get('compressionTT');
  102 + }
  103 + // fits images download
  104 + else {
  105 + myValues.list=[];
  106 + if (this.get('list') && this.get('list').length)
  107 + Ext.each(this.get('list'), function(item, index){
  108 + var image = new Object();
  109 + image.name = item['name'];
  110 + image.url = item['url'];
  111 + myValues.list[index] = image;
  112 + });
  113 + myValues.compression = this.get('compression');
  114 + }
  115 + myValues.leaf = true;
  116 + // myValues.nodeType = amdaModel.PlotNode.nodeType;
  117 + return myValues;
  118 + }
122 }); 119 });
js/app/models/DownloadNode.js
@@ -2,17 +2,16 @@ @@ -2,17 +2,16 @@
2 * Project : AMDA-NG4 2 * Project : AMDA-NG4
3 * Name : DownloadNode.js 3 * Name : DownloadNode.js
4 * @class amdaModel.DownloadNode 4 * @class amdaModel.DownloadNode
5 - * @extends amdaModel.ExecutableNode 5 + * @extends Ext.data.Model
6 * @brief Basic Model of Node corresponding to a download request 6 * @brief Basic Model of Node corresponding to a download request
7 * @author Myriam 7 * @author Myriam
8 * @version $Id: DownloadNode.js 2949 2015-06-23 10:25:59Z elena $ 8 * @version $Id: DownloadNode.js 2949 2015-06-23 10:25:59Z elena $
9 */ 9 */
10 -//TODO amdaModel.SingletonNode class ??? 10 +
11 Ext.define('amdaModel.DownloadNode', { 11 Ext.define('amdaModel.DownloadNode', {
12 12
13 - extend: 'Ext.data.Model',  
14 -  
15 - singleton: true, 13 + extend: 'Ext.data.Model',
  14 + singleton: true,
16 15
17 fields:[{name : 'downloadType', type : 'string'}, 16 fields:[{name : 'downloadType', type : 'string'},
18 {name: 'object', type: 'object'}, 17 {name: 'object', type: 'object'},
@@ -23,257 +22,206 @@ Ext.define(&#39;amdaModel.DownloadNode&#39;, { @@ -23,257 +22,206 @@ Ext.define(&#39;amdaModel.DownloadNode&#39;, {
23 {name: 'jobNode', type: 'string', defaultValue: 'amdaModel.BkgJobNode'} 22 {name: 'jobNode', type: 'string', defaultValue: 'amdaModel.BkgJobNode'}
24 ], 23 ],
25 24
26 - isExecutable: function(){  
27 - return true;  
28 - },  
29 -  
30 -//TODO MIXINS 25 + isExecutable: function(){
  26 + return true;
  27 + },
31 28
32 - getObjectCallback : function(result,remoteEvent){  
33 - var t = remoteEvent.getTransaction();  
34 - if (result) {  
35 - var paramObj = Ext.create(this.get('objectDataModel'), result);  
36 - // set parameter into node  
37 - this.set('object', paramObj);  
38 - var downObject = amdaModel.DownloadNode.decodeObject();  
39 - // Edition ;  
40 - amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject));  
41 - amdaModel.DownloadNode.editInModule();  
42 - }  
43 - else {  
44 - // EXCEPTION : parameter not found !?  
45 - alert(t.action + "." + t.method + " : No parameter '"  
46 - +this.get('name')+"' found!");  
47 - //TODO: adding an error log  
48 - }  
49 - }, 29 + getObjectCallback : function(result,remoteEvent){
  30 + var t = remoteEvent.getTransaction();
  31 + if (result) {
  32 + var paramObj = Ext.create(this.get('objectDataModel'), result);
  33 + // set parameter into node
  34 + this.set('object', paramObj);
  35 + var downObject = amdaModel.DownloadNode.decodeObject();
  36 + // Edition ;
  37 + amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject));
  38 + amdaModel.DownloadNode.editInModule();
  39 + }
  40 + else {
  41 + myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"
  42 + +this.get('name')+"' found!");
  43 + // EXCEPTION : parameter not found !?
  44 + }
  45 + },
50 46
51 - editInModule : function () {  
52 - var me = this;  
53 - myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) {  
54 - // If the node to edit is not already linked to this module  
55 -  
56 - if (module.getLinkedNode() != me) {  
57 - // set relative node into parameter Module  
58 - module.setLinkedNode(me);  
59 - }  
60 - else {// the node to edit is already edited  
61 - //TODO: TBD : message to user  
62 - //Sol1: msg alert: "warning this node is already edited! If you want to get the original, please press the 'reset' button"->'OK'  
63 - //Sol2: msg with user choice: "warning this node is already edited! Would you confirm this action and lost your modification?"->'Confirm','Cancel'  
64 - }  
65 - // Opening parameter window  
66 - module.createWindow();  
67 - });  
68 - }, 47 + editInModule : function () {
  48 + var me = this;
  49 + myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) {
  50 + // If the node to edit is not already linked to this module
  51 + if (module.getLinkedNode() != me) {
  52 + // set relative node into parameter Module
  53 + module.setLinkedNode(me);
  54 + }
  55 + else {// the node to edit is already edited
  56 + //TODO: TBD : message to user
  57 + //Sol1: msg alert: "warning this node is already edited! If you want to get the original, please press the 'reset' button"->'OK'
  58 + //Sol2: msg with user choice: "warning this node is already edited! Would you confirm this action and lost your modification?"->'Confirm','Cancel'
  59 + }
  60 + // Opening parameter window
  61 + module.createWindow();
  62 + });
  63 + },
69 64
70 - decodeObject: function(obj) {  
71 - var myValues = new Object();  
72 - myValues.list=[];  
73 -  
74 - if (!obj) {  
75 - var fullObject = this.get('realLinkedNode').get('object');  
76 - }  
77 - else {  
78 - var fullObject = obj;  
79 - }  
80 -  
81 - var i = 0;  
82 - fullObject.tabs().each(function (tab) {  
83 - tab.panels().each(function (panel) {  
84 - panel.params().each(function (param) {  
85 - myValues.list[i] = param.get('paramid');  
86 - ++i;  
87 - });  
88 - });  
89 -  
90 - });  
91 -  
92 - myValues.name = fullObject.get('name');  
93 - myValues.timesrc = fullObject.get('timesrc');  
94 - // if there's at least one timeTable name into 'timeTables' collection  
95 - if (myValues.timesrc == amdaModel.AmdaTimeObject.inputTimeSrc[0]  
96 - && fullObject.get('timeTables')  
97 - && fullObject.get('timeTables').length ){  
98 - // get complete timeTables collection  
99 - var timeTables = fullObject.get('timeTables');  
100 - // init an empty array for timeTables  
101 - myValues.timeTables=[];  
102 - // for each interval record  
103 - Ext.Array.each(timeTables, function(item, index, all){  
104 - if (!item.$className) {  
105 - myValues.timeTables[index] = {timeTableName : item.timeTableName, id : item.id}; 65 + decodeObject: function(obj) {
  66 + var myValues = new Object();
  67 + myValues.list=[];
  68 +
  69 + if (!obj) {
  70 + var fullObject = this.get('realLinkedNode').get('object');
106 } 71 }
107 - // get Json simplified value  
108 else { 72 else {
109 - myValues.timeTables[index] = item.getJsonValues(); 73 + var fullObject = obj;
110 } 74 }
111 - });  
112 - } else {  
113 - myValues.startDate = fullObject.get('startDate');  
114 - myValues.stopDate = fullObject.get('stopDate');  
115 - myValues.durationDay = fullObject.get('durationDay');  
116 - myValues.durationHour = fullObject.get('durationHour');  
117 - myValues.durationMin = fullObject.get('durationMin');  
118 - myValues.durationSec = fullObject.get('durationSec');  
119 - }  
120 - return myValues;  
121 - },  
122 -  
123 - encodeObject: function() {  
124 - },  
125 -  
126 -/*  
127 - * Method to parse special parameters cases with arguments (spectra && MODELS)  
128 - * TODO to rewrite with amda new kernel  
129 - */  
130 - parseArgs: function(param) {  
131 - var name = param.name;  
132 - var args = param.downloadParamArgs;  
133 - if (args.energyMax){  
134 - var nameToSent = name + '_' + args.energyMin + '_' + args.energyMax;  
135 - return nameToSent;  
136 - }  
137 -  
138 - if (args.PA && args.Energy){  
139 - var nameToSent = name + '_' + args.PA + '_' + args.Energy;  
140 - return nameToSent;  
141 - }  
142 -  
143 - if (args.PA) {  
144 - var pa = args.PA - 1;  
145 - var nameToSent = name + '(' + pa + ')';  
146 - return nameToSent;  
147 - }  
148 -  
149 - if (args.Energy) {  
150 - var en = args.Energy - 1;  
151 -//TODO temporary  
152 - if (name.substr(name.length-2, 2) == '_E') name = name.substr(0,name.length-2);  
153 - var nameToSent = name + '(' + en + ')';  
154 - return nameToSent;  
155 - }  
156 - // T96; A2000  
157 - if (args.SW_Monitor) {  
158 - var nameToSent = name + '_' + args.Spacecraft + '_' + args.SW_Monitor;  
159 - return nameToSent;  
160 - }  
161 - // Cain ; Morschhauser  
162 - if (args.Spacecraft && args.Sampling) {  
163 - var nameToSent = name + '_' + args.Spacecraft + '_' + args.Sampling;  
164 - return nameToSent;  
165 - }  
166 - // LATMOS  
167 - if (args.ClockAngle && args.Satellite) {  
168 - var nameToSent = name + '_' + args.Satellite + '_' + args.ClockAngle;  
169 - return nameToSent;  
170 - }  
171 -  
172 - // FMI HYBRID  
173 - if (args.Satellite && Ext.Object.getSize(args) === 1) {  
174 - var nameToSent = name + '_' + args.Satellite;  
175 - return nameToSent;  
176 - }  
177 -  
178 - }, 75 +
  76 + var i = 0;
  77 + fullObject.tabs().each(function (tab) {
  78 + tab.panels().each(function (panel) {
  79 + panel.params().each(function (param) {
  80 + myValues.list[i] = param.get('paramid');
  81 + ++i;
  82 + });
  83 + });
  84 +
  85 + });
  86 +
  87 + myValues.name = fullObject.get('name');
  88 + myValues.timesrc = fullObject.get('timesrc');
  89 + // if there's at least one timeTable name into 'timeTables' collection
  90 + if (myValues.timesrc == amdaModel.AmdaTimeObject.inputTimeSrc[0]
  91 + && fullObject.get('timeTables')
  92 + && fullObject.get('timeTables').length ){
  93 + // get complete timeTables collection
  94 + var timeTables = fullObject.get('timeTables');
  95 + // init an empty array for timeTables
  96 + myValues.timeTables=[];
  97 + // for each interval record
  98 + Ext.Array.each(timeTables, function(item, index, all){
  99 + if (!item.$className) {
  100 + myValues.timeTables[index] = {timeTableName : item.timeTableName, id : item.id};
  101 + }
  102 + // get Json simplified value
  103 + else {
  104 + myValues.timeTables[index] = item.getJsonValues();
  105 + }
  106 + });
  107 + } else {
  108 + myValues.startDate = fullObject.get('startDate');
  109 + myValues.stopDate = fullObject.get('stopDate');
  110 + myValues.durationDay = fullObject.get('durationDay');
  111 + myValues.durationHour = fullObject.get('durationHour');
  112 + myValues.durationMin = fullObject.get('durationMin');
  113 + myValues.durationSec = fullObject.get('durationSec');
  114 + }
  115 + return myValues;
  116 + },
179 117
  118 + encodeObject: function() {
  119 + },
180 120
181 - loadJobTree : function() {  
182 - //ToDo - BRE - fix code duplication with ExecutableNode if possible  
183 - var rootNode = Ext.getCmp(amdaUI.ExplorerUI.JOB_TAB.TREE_ID).getRootNode();  
184 - var me = this;  
185 - amdaModel.InteractiveNode.preloadNodes(rootNode,  
186 - function()  
187 - {  
188 - amdaModel.InteractiveNode.jobTreeLoaded = true;  
189 - me.realExecute();  
190 - });  
191 - }, 121 + loadJobTree : function() {
  122 + //TBD - BRE - fix code duplication with ExecutableNode if possible
  123 + var rootNode = Ext.getCmp(amdaUI.ExplorerUI.JOB_TAB.TREE_ID).getRootNode();
  124 + var me = this;
  125 + amdaModel.InteractiveNode.preloadNodes(rootNode,
  126 + function()
  127 + {
  128 + amdaModel.InteractiveNode.jobTreeLoaded = true;
  129 + me.realExecute();
  130 + });
  131 + },
192 132
193 - execute : function() {  
194 -  
195 - if (!amdaModel.ExecutableNode.jobTreeLoaded) this.loadJobTree();  
196 - else this.realExecute();  
197 -  
198 - },  
199 -  
200 -  
201 - /**  
202 - * Method to execute this node  
203 - */  
204 - realExecute : function() {  
205 -  
206 - var jsonObject = this.get('object').getJsonValues();  
207 - if (!jsonObject.list && !jsonObject.images) {  
208 - myDesktopApp.warningMsg('Please select at least one Parameter (Get Data) or one Time Table (Get Time Table)');  
209 - return;  
210 - }  
211 -  
212 - loadMask.show();  
213 - AmdaAction.execute({nodeType : this.get('nodeType')}, jsonObject, function(res,e){ 133 + execute : function() {
214 134
215 - loadMask.hide(); 135 + if (!amdaModel.ExecutableNode.jobTreeLoaded) this.loadJobTree();
  136 + else this.realExecute();
  137 + },
  138 +
  139 +/**
  140 +* Method to execute this node
  141 +*/
  142 + realExecute : function() {
216 143
217 - //AKKA - Rework of the result treatment for the integration with the new kernel  
218 - if (!e.status)  
219 - {  
220 - myDesktopApp.errorMsg('Internal error during download request');  
221 - return;  
222 - }  
223 -  
224 - if (!res.success)  
225 - {  
226 - myDesktopApp.errorMsg(res.message);  
227 - return;  
228 - }  
229 -  
230 - var newobj = this.createJobObject(res);  
231 - var newNode = Ext.create(this.get('jobNode'),  
232 - {  
233 - id : res.id,  
234 - info : res.info,  
235 - jobType : this.get('nodeType'),  
236 - processId : res.id,  
237 - text : res.name,  
238 - status : res.status,  
239 - stop : res.stop,  
240 - leaf : true,  
241 - object : newobj});  
242 -  
243 - // new Tab  
244 - switch (res.status)  
245 - {  
246 - case amdaModel.BkgJobNode.STATUS_LIST.DONE :  
247 - // New tab, non-interactive session  
248 - var isInteractive = false;  
249 - var isNewTab = true;  
250 - newNode.createJobNode(true);  
251 - newNode.editNode(isNewTab, isInteractive);  
252 - break;  
253 - case amdaModel.BkgJobNode.STATUS_LIST.IN_PROGRESS :  
254 - newNode.createJobNode(false);  
255 - break;  
256 - default:  
257 - newNode.createJobNode(true);  
258 - }  
259 - }, this ); 144 + var jsonObject = this.get('object').getJsonValues();
  145 + if (!jsonObject.list && !jsonObject.images) {
  146 + myDesktopApp.warningMsg('Please select at least one Parameter (Get Data) or one Time Table (Get Time Table)');
  147 + return;
  148 + }
  149 +
  150 + loadMask.show();
  151 + AmdaAction.execute({nodeType : this.get('nodeType')}, jsonObject, function(res,e)
  152 + {
  153 + loadMask.hide();
260 154
261 -}, 155 + //AKKA - Rework of the result treatment for the integration with the new kernel
  156 + if (!e.status)
  157 + {
  158 + myDesktopApp.errorMsg('Internal error during download request');
  159 + return;
  160 + }
  161 +
  162 + if (!res.success)
  163 + {
  164 + myDesktopApp.errorMsg(res.message);
  165 + return;
  166 + }
  167 + //TBD if such condition is OK ?
  168 + if (!res.id && res.download) {
  169 + if (res.compression) {
  170 + window.location.href = res.download;
  171 + }
  172 + else {
  173 + window.open(res.download, '_blank');
  174 + }
  175 + return;
  176 + }
  177 +
  178 + var newobj = this.createJobObject(res);
  179 + var newNode = Ext.create(this.get('jobNode'),
  180 + {
  181 + id : res.id,
  182 + info : res.info,
  183 + jobType : this.get('nodeType'),
  184 + processId : res.id,
  185 + text : res.name,
  186 + status : res.status,
  187 + stop : res.stop,
  188 + leaf : true,
  189 + object : newobj
  190 +
  191 + });
  192 +
  193 + // new Tab
  194 + switch (res.status)
  195 + {
  196 + case amdaModel.BkgJobNode.STATUS_LIST.DONE :
  197 + // New tab, non-interactive session
  198 + var isInteractive = false;
  199 + var isNewTab = true;
  200 + newNode.createJobNode(true);
  201 + newNode.editNode(isNewTab, isInteractive);
  202 + break;
  203 + case amdaModel.BkgJobNode.STATUS_LIST.IN_PROGRESS :
  204 + newNode.createJobNode(false);
  205 + break;
  206 + default:
  207 + newNode.createJobNode(true);
  208 + }
  209 + }, this );
  210 + },
262 211
263 - createJobObject: function(res) { 212 + createJobObject: function(res) {
264 213
265 - var obj = this.get('object').getJsonValues();  
266 -//TODO text, name, outputName - if all is needed  
267 - //new object to attach to new bkgJobNode  
268 -  
269 -//TODO Ext.clone() 214 + var obj = this.get('object').getJsonValues();
  215 + //TODO text, name, outputName - if all is needed
  216 + //new object to attach to new bkgJobNode
  217 + //TODO Ext.clone()
270 218
271 - var newobj = Ext.copyTo({}, obj, this.get('object').propertiesToCopy);  
272 - newobj.id = res.id;  
273 - newobj.resultId = res.result;  
274 - newobj.folderId = res.folder;  
275 - newobj = Ext.create(this.get('object').$className, newobj);  
276 - return newobj; 219 + var newobj = Ext.copyTo({}, obj, this.get('object').propertiesToCopy);
  220 + newobj.id = res.id;
  221 + newobj.resultId = res.result;
  222 + newobj.folderId = res.folder;
  223 + newobj = Ext.create(this.get('object').$className, newobj);
  224 +
  225 + return newobj;
277 } 226 }
278 -  
279 }); 227 });
js/app/views/DownloadUI.js
@@ -23,45 +23,47 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -23,45 +23,47 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
23 //timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['Y m d H i s', 'YYYY MM DD hh mm ss'], ['d m Y H i s', 'DD MM YYYY hh mm ss'], ['Y z H i s', 'YYYY DDD hh mm ss']], 23 //timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['Y m d H i s', 'YYYY MM DD hh mm ss'], ['d m Y H i s', 'DD MM YYYY hh mm ss'], ['Y z H i s', 'YYYY DDD hh mm ss']],
24 //New kernel time formats 24 //New kernel time formats
25 timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['DD Time', 'DD Time'], ['Timestamp', 'Timestamp']], 25 timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['DD Time', 'DD Time'], ['Timestamp', 'Timestamp']],
  26 + timeformatTTData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss']],
26 fileformatData : [['ASCII', 'ASCII'],['vot', 'VOTable'],['cdf', 'CDF'],['json', 'JSON']], 27 fileformatData : [['ASCII', 'ASCII'],['vot', 'VOTable'],['cdf', 'CDF'],['json', 'JSON']],
27 fileformatTTData : [['text', 'plain text'], ['vot','VOTable']], 28 fileformatTTData : [['text', 'plain text'], ['vot','VOTable']],
28 filecompressData : [['zip', 'zip'], ['tar+gzip', 'tar+gzip']], 29 filecompressData : [['zip', 'zip'], ['tar+gzip', 'tar+gzip']],
  30 + filecompressTT : [['zip', 'zip'], ['tar+gzip', 'tar+gzip'], ['none', 'none']],
29 filestructureData : [['0','All In One File'], ['1','One File Per Time Interval'], ['2','One File Per Param/Interval']], 31 filestructureData : [['0','All In One File'], ['1','One File Per Time Interval'], ['2','One File Per Param/Interval']],
30 32
31 constructor: function(config) { 33 constructor: function(config) {
32 this.init(config); 34 this.init(config);
33 this.callParent(arguments); 35 this.callParent(arguments);
34 - // load object into view  
35 - if (this.object) this.loadObject();  
36 - //  
37 - var paramArgsPlug = this.getPlugin('download-param-arguments-plugin');  
38 - if (paramArgsPlug)  
39 - paramArgsPlug.onApply = this.onApplyParameterArgs; 36 + // load object into view
  37 + if (this.object) this.loadObject();
  38 + //
  39 + var paramArgsPlug = this.getPlugin('download-param-arguments-plugin');
  40 + if (paramArgsPlug)
  41 + paramArgsPlug.onApply = this.onApplyParameterArgs;
40 }, 42 },
41 43
42 addTT : function(newTTName,newTTid) 44 addTT : function(newTTName,newTTid)
43 - { 45 + {
44 var tabPanel = this.formPanel.down(); 46 var tabPanel = this.formPanel.down();
45 var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab()); 47 var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());
46 48
47 if (downloadSrc === 0) { 49 if (downloadSrc === 0) {
48 - this.timeSelector.addTT(newTTName,newTTid); 50 + this.timeSelector.addTT(newTTName,newTTid);
49 } 51 }
50 else { 52 else {
51 - // search for an existing record in store with this unique name  
52 - var existingIndex = this.TTGrid.store.findExact( 'name', newTTName);  
53 - // if no corresponding TT found  
54 - if (existingIndex == -1){  
55 - // adding the time table to the TTGrid of TT download  
56 - var r = Ext.create('amdaModel.TTobject', { id: newTTid, name: newTTName });  
57 - this.TTGrid.store.insert(this.TTGrid.store.getCount(),r);  
58 - } 53 + // search for an existing record in store with this unique name
  54 + var existingIndex = this.TTGrid.store.findExact( 'name', newTTName);
  55 + // if no corresponding TT found
  56 + if (existingIndex == -1){
  57 + // adding the time table to the TTGrid of TT download
  58 + var r = Ext.create('amdaModel.TTobject', { id: newTTid, name: newTTName });
  59 + this.TTGrid.store.insert(this.TTGrid.store.getCount(),r);
  60 + }
59 } 61 }
60 }, 62 },
61 63
62 addTTs : function(TTarray) { 64 addTTs : function(TTarray) {
63 // set TTTab 65 // set TTTab
64 - this.timeSelector.setTTTab(TTarray); 66 + this.timeSelector.setTTTab(TTarray);
65 }, 67 },
66 68
67 // Add TT in download TT module 69 // Add TT in download TT module
@@ -72,92 +74,91 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -72,92 +74,91 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
72 74
73 }, 75 },
74 76
75 - /**  
76 - * Set Start-Stop from parameter info (Local & MyData)  
77 - */  
78 - setTimeFromData : function(obj) {  
79 -  
80 - var dateStart = new Date(obj.start.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));  
81 - var dateStop = new Date(obj.stop.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));  
82 -  
83 - this.down('form').getForm().setValues({ startDate : dateStart, stopDate : dateStop });  
84 - this.timeSelector.intervalSel.updateDuration();  
85 - }, 77 + /**
  78 + * Set Start-Stop from parameter info (Local & MyData)
  79 + */
  80 + setTimeFromData : function(obj) {
  81 +
  82 + var dateStart = new Date(obj.start.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));
  83 + var dateStop = new Date(obj.stop.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));
  84 +
  85 + this.down('form').getForm().setValues({ startDate : dateStart, stopDate : dateStop });
  86 + this.timeSelector.intervalSel.updateDuration();
  87 + },
86 88
87 - addParam : function(paramId, isLeaf, needArgs, components)  
88 - {  
89 - // adding the parameter to the paramGrid  
90 -  
91 - var paramObj = {  
92 - paramid: paramId,  
93 - type: 0,  
94 - 'dim1-is-range': false,  
95 - 'dim1-min-range': 0.,  
96 - 'dim1-max-range': 0.,  
97 - 'dim1-index': '*',  
98 - 'dim2-is-range': false,  
99 - 'dim2-min-range': 0.,  
100 - 'dim2-max-range': 0.,  
101 - 'dim2-index': '*',  
102 - template_args: {}  
103 - }; 89 + addParam : function(paramId, isLeaf, needArgs, components)
  90 + {
  91 + // adding the parameter to the paramGrid
  92 + var paramObj = {
  93 + paramid: paramId,
  94 + type: 0,
  95 + 'dim1-is-range': false,
  96 + 'dim1-min-range': 0.,
  97 + 'dim1-max-range': 0.,
  98 + 'dim1-index': '*',
  99 + 'dim2-is-range': false,
  100 + 'dim2-min-range': 0.,
  101 + 'dim2-max-range': 0.,
  102 + 'dim2-index': '*',
  103 + template_args: {}
  104 + };
104 105
105 - if (components) {  
106 - if (components['index1']) {  
107 - paramObj['dim1-index'] = components['index1'];  
108 - ++paramObj['type'];  
109 - }  
110 -  
111 - if (components['index2']) {  
112 - paramObj['dim2-index'] = components['index2'];  
113 - ++paramObj['type'];  
114 - }  
115 - } 106 + if (components) {
  107 + if (components['index1']) {
  108 + paramObj['dim1-index'] = components['index1'];
  109 + ++paramObj['type'];
  110 + }
  111 +
  112 + if (components['index2']) {
  113 + paramObj['dim2-index'] = components['index2'];
  114 + ++paramObj['type'];
  115 + }
  116 + }
116 117
117 - var r = Ext.create('amdaModel.DownloadParam', paramObj);  
118 - var pos = this.paramGrid.store.getCount();  
119 - this.paramGrid.store.insert(pos,r);  
120 - this.paramGrid.getView().refresh();  
121 - if (!isLeaf || needArgs)  
122 - this.editParameterArgs(r);  
123 - }, 118 + var r = Ext.create('amdaModel.DownloadParam', paramObj);
  119 + var pos = this.paramGrid.store.getCount();
  120 + this.paramGrid.store.insert(pos,r);
  121 + this.paramGrid.getView().refresh();
  122 + if (!isLeaf || needArgs)
  123 + this.editParameterArgs(r);
  124 + },
124 125
125 - addParams: function(arrayParams)  
126 - {  
127 - var arrayRec = new Array();  
128 - var index = 1;  
129 - if (arrayParams)  
130 - {  
131 - index = 0;  
132 - Ext.Array.each(arrayParams,function(item){  
133 - if (Ext.isObject(item)) {  
134 - // for Parameter Name in Download Module  
135 - var paramObj = {  
136 - paramid: paramId,  
137 - type: 0,  
138 - 'dim1-is-range': false,  
139 - 'dim1-min-range': 0.,  
140 - 'dim1-max-range': 0.,  
141 - 'dim1-index': item.get('dim1'),  
142 - 'dim2-is-range': false,  
143 - 'dim2-min-range': 0.,  
144 - 'dim2-max-range': 0.,  
145 - 'dim2-index': item.get('dim2'),  
146 - template_args: {}  
147 - };  
148 -  
149 - var r = Ext.create('amdaModel.DownloadParam', paramObj);  
150 - }  
151 - else {  
152 - // for Download By Request in Operations menu  
153 - //ToDo BRE - Components selection  
154 - var r = Ext.create('amdaModel.DownloadParam', { paramid: item });  
155 - }  
156 - arrayRec.push(r);  
157 - });  
158 - }  
159 - this.paramGrid.getStore().loadData(arrayRec);  
160 - }, 126 + addParams: function(arrayParams)
  127 + {
  128 + var arrayRec = new Array();
  129 + var index = 1;
  130 + if (arrayParams)
  131 + {
  132 + index = 0;
  133 + Ext.Array.each(arrayParams,function(item){
  134 + if (Ext.isObject(item)) {
  135 + // for Parameter Name in Download Module
  136 + var paramObj = {
  137 + paramid: paramId,
  138 + type: 0,
  139 + 'dim1-is-range': false,
  140 + 'dim1-min-range': 0.,
  141 + 'dim1-max-range': 0.,
  142 + 'dim1-index': item.get('dim1'),
  143 + 'dim2-is-range': false,
  144 + 'dim2-min-range': 0.,
  145 + 'dim2-max-range': 0.,
  146 + 'dim2-index': item.get('dim2'),
  147 + template_args: {}
  148 + };
  149 +
  150 + var r = Ext.create('amdaModel.DownloadParam', paramObj);
  151 + }
  152 + else {
  153 + // for Download By Request in Operations menu
  154 + //TODO BRE - Components selection
  155 + var r = Ext.create('amdaModel.DownloadParam', { paramid: item });
  156 + }
  157 + arrayRec.push(r);
  158 + });
  159 + }
  160 + this.paramGrid.getStore().loadData(arrayRec);
  161 + },
161 162
162 // parameter name -> alias 163 // parameter name -> alias
163 updateConstruct : function(oldval,newval) { 164 updateConstruct : function(oldval,newval) {
@@ -165,7 +166,7 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -165,7 +166,7 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
165 if (index != -1) { 166 if (index != -1) {
166 this.paramGrid.getStore().getAt(index).set('name',newval); 167 this.paramGrid.getStore().getAt(index).set('name',newval);
167 this.paramGrid.getStore().getAt(index).set('text',newval); 168 this.paramGrid.getStore().getAt(index).set('text',newval);
168 - } 169 + }
169 }, 170 },
170 171
171 setObject : function(obj) { 172 setObject : function(obj) {
@@ -176,84 +177,89 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -176,84 +177,89 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
176 /** 177 /**
177 * update this.object from form 178 * update this.object from form
178 */ 179 */
179 - updateObject : function()  
180 - {  
181 - // get the basic form  
182 - var tabPanel = this.formPanel.down();  
183 - var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());  
184 - var basicForm = this.formPanel.getForm();  
185 - var updateStatus = true;  
186 - var values = basicForm.getValues();  
187 -  
188 - // data download  
189 - if (downloadSrc === 0)  
190 - {  
191 - var timeformat = basicForm.findField('timeformat').getRawValue();  
192 - var timeSource = this.timeSelector.getActiveTimeSource();  
193 - var structure = values.filestructure;  
194 - var sampling = values.sampling ? values.sampling : 600;  
195 - var refparamSampling = values.refparamsampling == 'on';  
196 - var fileprefix = values.fileprefix ? values.fileprefix : '';  
197 - var fileformat = values.fileformat;  
198 - var compression = values.compression; 180 + updateObject : function()
  181 + {
  182 + // get the basic form
  183 + var tabPanel = this.formPanel.down();
  184 + var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());
  185 + var basicForm = this.formPanel.getForm();
  186 + var updateStatus = true;
  187 + var values = basicForm.getValues();
  188 +
  189 + // data download
  190 + if (downloadSrc === 0)
  191 + {
  192 + var timeformat = basicForm.findField('timeformat').getRawValue();
  193 + var timeSource = this.timeSelector.getActiveTimeSource();
  194 + var structure = values.filestructure;
  195 + var sampling = values.sampling ? values.sampling : 600;
  196 + var refparamSampling = values.refparamsampling == 'on';
  197 + var fileprefix = values.fileprefix ? values.fileprefix : '';
  198 + var fileformat = values.fileformat;
  199 + var compression = values.compression;
199 200
200 - var fieldsWithoutName = basicForm.getFields().items;  
201 - Ext.Array.each(fieldsWithoutName, function(item, index,allItems){  
202 - if (!item.isValid()) {  
203 - if ((timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) &&  
204 - ((item.name == 'startDate') || (item.name == 'stopDate') || (item.name == 'duration'))) {  
205 - updateStatus = true;  
206 - }  
207 - else {  
208 - // set update isn't allowed  
209 - updateStatus = false;  
210 - return false;  
211 - }  
212 - }  
213 - }, this);  
214 -  
215 - if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0] // timeSource 'TimeTable'  
216 - && this.timeSelector.TTGrid.getStore().count() == 0) {  
217 - myDesktopApp.warningMsg('You\'ve chosen Time Selection `by TimeTable` but no timeTable was added!'  
218 - +'<br>You must add one or choose Time Selection `by Interval`');  
219 - updateStatus = false;  
220 - } 201 + var fieldsWithoutName = basicForm.getFields().items;
  202 + Ext.Array.each(fieldsWithoutName, function(item, index,allItems){
  203 + if (!item.isValid()) {
  204 + if ((timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) &&
  205 + ((item.name == 'startDate') || (item.name == 'stopDate') || (item.name == 'duration'))) {
  206 + updateStatus = true;
  207 + }
  208 + else {
  209 + // set update isn't allowed
  210 + updateStatus = false;
  211 + return false;
  212 + }
  213 + }
  214 + }, this);
  215 +
  216 + if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0] // timeSource 'TimeTable'
  217 + && this.timeSelector.TTGrid.getStore().count() == 0) {
  218 + myDesktopApp.warningMsg('You\'ve chosen Time Selection `by TimeTable` but no timeTable was added!'
  219 + +'<br>You must add one or choose Time Selection `by Interval`');
  220 + updateStatus = false;
  221 + }
221 222
222 - if (updateStatus)  
223 - {  
224 - /// real object update  
225 - // update TimeTable object with the content of form  
226 - basicForm.updateRecord(this.object);  
227 - this.object.set('timesrc', timeSource);  
228 - // set valid intervals into TimeTable object  
229 - if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0])  
230 - this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items);  
231 - // set parameters  
232 - this.object.set('list',this.paramGrid.getStore().data.items);  
233 - this.object.set('structure', structure);  
234 - this.object.set('refparamSampling', refparamSampling);  
235 - this.object.set('sampling', sampling);  
236 - this.object.set('fileprefix',fileprefix);  
237 - this.object.set('timeformat',timeformat);  
238 - this.object.set('fileformat',fileformat);  
239 - this.object.set('compression',compression);  
240 - }  
241 - }  
242 - //TT download  
243 - else  
244 - {  
245 - var timeformat = values.timeformatTT;  
246 - var compression = values.compressionTT;  
247 - var fileformat = values.fileformatTT;  
248 - this.object.set('timeTables',this.TTGrid.getStore().data.items);  
249 - this.object.set('timeformatTT',timeformat);  
250 - this.object.set('fileformatTT',fileformat);  
251 - this.object.set('compressionTT',compression);  
252 - } 223 + if (updateStatus)
  224 + {
  225 + /// real object update
  226 + // update TimeTable object with the content of form
  227 + basicForm.updateRecord(this.object);
  228 + this.object.set('timesrc', timeSource);
  229 + // set valid intervals into TimeTable object
  230 + if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0])
  231 + this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items);
  232 + // set parameters
  233 + this.object.set('list',this.paramGrid.getStore().data.items);
  234 + this.object.set('structure', structure);
  235 + this.object.set('refparamSampling', refparamSampling);
  236 + this.object.set('sampling', sampling);
  237 + this.object.set('fileprefix',fileprefix);
  238 + this.object.set('timeformat',timeformat);
  239 + this.object.set('fileformat',fileformat);
  240 + this.object.set('compression',compression);
  241 + }
  242 + }
  243 + //TT download
  244 + else
  245 + {
  246 + var timeformat = values.timeformatTT;
  247 + var compression = values.compressionTT;
  248 + var fileformat = values.fileformatTT;
  249 + if (compression === 'none'
  250 + && this.TTGrid.getStore().count() > 1) {
  251 + myDesktopApp.warningMsg('You are going to download several time tables - select the Compression please');
  252 + updateStatus = false;
  253 + }
  254 + this.object.set('timeTables',this.TTGrid.getStore().data.items);
  255 + this.object.set('timeformatTT',timeformat);
  256 + this.object.set('fileformatTT',fileformat);
  257 + this.object.set('compressionTT',compression);
  258 + }
253 259
254 - this.object.set('downloadSrc',downloadSrc);  
255 - // return the update status  
256 - return updateStatus; 260 + this.object.set('downloadSrc',downloadSrc);
  261 + // return the update status
  262 + return updateStatus;
257 }, 263 },
258 264
259 /** 265 /**
@@ -261,48 +267,48 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -261,48 +267,48 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
261 */ 267 */
262 loadObject : function(){ 268 loadObject : function(){
263 269
264 - if (!this.object.get('timeformat'))  
265 - this.object.set('timeformat', this.timeformatData[0][0]);  
266 -  
267 - if (!this.object.get('timeformatTT'))  
268 - this.object.set('timeformatTT', this.timeformatData[0][0]);  
269 -  
270 - if (!this.object.get('fileformat'))  
271 - this.object.set('fileformat', this.fileformatData[0][0]);  
272 -  
273 - if (!this.object.get('fileformatTT'))  
274 - this.object.set('fileformatTT', this.fileformatTTData[0][0]);  
275 -  
276 - if (!this.object.get('compression'))  
277 - this.object.set('compression', this.filecompressData[1][0]); 270 + if (!this.object.get('timeformat'))
  271 + this.object.set('timeformat', this.timeformatData[0][0]);
  272 +
  273 + if (!this.object.get('timeformatTT'))
  274 + this.object.set('timeformatTT', this.timeformatTTData[0][0]);
  275 +
  276 + if (!this.object.get('fileformat'))
  277 + this.object.set('fileformat', this.fileformatData[0][0]);
  278 +
  279 + if (!this.object.get('fileformatTT'))
  280 + this.object.set('fileformatTT', this.fileformatTTData[0][0]);
  281 +
  282 + if (!this.object.get('compression'))
  283 + this.object.set('compression', this.filecompressData[1][0]);
278 284
279 - if (!this.object.get('compressionTT'))  
280 - this.object.set('compressionTT', this.filecompressData[1][0]);  
281 -  
282 - // load object into form  
283 - this.formPanel.getForm().loadRecord(this.object);  
284 - // set object's TTs into the timeselector  
285 - this.addTTs(this.object.get('timeTables'));  
286 - // set parameters  
287 - this.addParams(this.object.get('list')); 285 + if (!this.object.get('compressionTT'))
  286 + this.object.set('compressionTT', this.filecompressData[1][0]);
  287 +
  288 + // load object into form
  289 + this.formPanel.getForm().loadRecord(this.object);
  290 + // set object's TTs into the timeselector
  291 + this.addTTs(this.object.get('timeTables'));
  292 + // set parameters
  293 + this.addParams(this.object.get('list'));
288 }, 294 },
289 295
290 - /**  
291 - * download method called by 'Download' button to launch the download process  
292 - */ 296 +/**
  297 +* download method called by 'Download' button to launch the download process
  298 +*/
293 doDownload : function(){ 299 doDownload : function(){
294 var downloadModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id); 300 var downloadModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);
295 if (downloadModule) 301 if (downloadModule)
296 - downloadModule.linkedNode.execute();  
297 - // fire execution  
298 - // this.object.fireEvent('execute',this.object.dirty); 302 + downloadModule.linkedNode.execute();
299 }, 303 },
300 -  
301 - 304 +
302 actionItem: function(grid, cell, cellIndex, record, row, recordIndex, e){ 305 actionItem: function(grid, cell, cellIndex, record, row, recordIndex, e){
303 - if (cellIndex == 3) 306 +
  307 + var isTimeTable = record instanceof amdaModel.TTobject;
  308 +
  309 + if ( cellIndex == 3 || ( cellIndex == 2 && isTimeTable ))
304 grid.getStore().remove(record); 310 grid.getStore().remove(record);
305 - else if (cellIndex == 2) { 311 + else if ( cellIndex == 2 ) {
306 this.paramGrid.getView().select(row); 312 this.paramGrid.getView().select(row);
307 this.editParameterArgs(record); 313 this.editParameterArgs(record);
308 } 314 }
@@ -355,388 +361,382 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, { @@ -355,388 +361,382 @@ Ext.define(&#39;amdaUI.DownloadUI&#39;, {
355 this.timeSelector = new amdaUI.TimeSelectorUI({id: 'downloadTimeSelector',flex: 1}); 361 this.timeSelector = new amdaUI.TimeSelectorUI({id: 'downloadTimeSelector',flex: 1});
356 362
357 this.paramGrid = Ext.create('Ext.grid.Panel', { 363 this.paramGrid = Ext.create('Ext.grid.Panel', {
358 - flex: 2,  
359 - store : Ext.create('Ext.data.Store', { model: 'amdaModel.DownloadParam'} ),  
360 - columns: [  
361 - { xtype: 'rownumberer', width: 20 },  
362 - {  
363 - header: "Parameter Name",  
364 - dataIndex: 'name',  
365 - flex:1,  
366 - sortable: false,  
367 - menuDisabled : true ,  
368 - renderer: function (val, meta, rec) {  
369 - return rec.getParamFullName();  
370 - }  
371 - },  
372 - {  
373 - menuDisabled : true, width: 30, renderer: function(){  
374 - return'<div class="icon-parameters" style="width: 15px; height: 15px;"></div>';  
375 - }  
376 - },  
377 - {  
378 - menuDisabled : true, width: 30, renderer: function(){  
379 - return'<div class="icon-remover" style="width: 15px; height: 15px;"></div>';  
380 - }  
381 - }  
382 - ], 364 + flex: 2,
  365 + store : Ext.create('Ext.data.Store', { model: 'amdaModel.DownloadParam'} ),
  366 + columns: [
  367 + { xtype: 'rownumberer', width: 20 },
  368 + {
  369 + header: "Parameter Name",
  370 + dataIndex: 'name',
  371 + flex:1,
  372 + sortable: false,
  373 + menuDisabled : true ,
  374 + renderer: function (val, meta, rec) {
  375 + return rec.getParamFullName();
  376 + }
  377 + },
  378 + {
  379 + menuDisabled : true, width: 30, renderer: function(){
  380 + return'<div class="icon-parameters" style="width: 15px; height: 15px;"></div>';
  381 + }
  382 + },
  383 + {
  384 + menuDisabled : true, width: 30, renderer: function(){
  385 + return'<div class="icon-remover" style="width: 15px; height: 15px;"></div>';
  386 + }
  387 + }
  388 + ],
383 //TODO - BRE - Wait the fix for drag&drop issue 389 //TODO - BRE - Wait the fix for drag&drop issue
384 - listeners : 390 + listeners :
385 { 391 {
386 - render : function(o,op)  
387 - {  
388 - var me = this;  
389 - var el = me.body.dom;  
390 - var dropTarget = Ext.create('Ext.dd.DropTarget', el, {  
391 - ddGroup: 'explorerTree',  
392 - notifyEnter : function(ddSource, e, data)  
393 - { },  
394 - notifyOver : function(ddSource, e, data)  
395 - {  
396 - if (data.records[0].data.nodeType == 'localParam' && data.records[0].get('notyet')) {  
397 - this.valid = false;  
398 - return this.dropNotAllowed;  
399 - }  
400 - if (((data.records[0].data.nodeType == 'localParam') ||  
401 - (data.records[0].data.nodeType == 'remoteParam') ||  
402 - (data.records[0].data.nodeType == 'remoteSimuParam') ||  
403 - (data.records[0].data.nodeType == 'derivedParam') ||  
404 - (data.records[0].data.nodeType == 'myDataParam') ||  
405 - (data.records[0].data.nodeType == 'alias'))&&  
406 - (data.records[0].isLeaf() || data.records[0].data.isParameter) &&  
407 - !data.records[0].data.disable)  
408 - {  
409 - this.valid = true;  
410 - return this.dropAllowed;  
411 - }  
412 -  
413 - this.valid = false;  
414 - return this.dropNotAllowed;  
415 - },  
416 - notifyDrop : function(ddSource, e, data)  
417 - {  
418 - if (!this.valid)  
419 - return false;  
420 - var idToSent;  
421 - var components = null;  
422 - switch (data.records[0].data.nodeType)  
423 - {  
424 - case 'localParam' :  
425 - case 'remoteParam':  
426 - case 'remoteSimuParam':  
427 - idToSent = data.records[0].get('id');  
428 - if (data.records[0].get('alias')!= "" )  
429 - idToSent = "#"+data.records[0].get('alias');  
430 - var component_info = data.records[0].get('component_info');  
431 - if (component_info && component_info.parentId) {  
432 - //It's a component  
433 - idToSent = component_info.parentId;  
434 - components = [];  
435 - if (component_info.index1)  
436 - components['index1'] = component_info.index1;  
437 - if (component_info.index2)  
438 - components['index2'] = component_info.index2;  
439 - }  
440 - break;  
441 - case 'alias' :  
442 - idToSent = "#"+data.records[0].get('text');  
443 - break;  
444 - case 'derivedParam' :  
445 - idToSent = "ws_"+data.records[0].get('text');  
446 - break;  
447 - case 'myDataParam' :  
448 - idToSent = "wsd_"+data.records[0].get('text');  
449 - break;  
450 - default :  
451 - return false;  
452 - }  
453 - var downModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);  
454 - if (downModule)  
455 - downModule.addParam(idToSent,data.records[0].get('leaf'), data.records[0].get('needsArgs'), components);  
456 - return true;  
457 - }  
458 - });  
459 - }  
460 - }  
461 - 392 + render : function(o,op)
  393 + {
  394 + var me = this;
  395 + var el = me.body.dom;
  396 + var dropTarget = Ext.create('Ext.dd.DropTarget', el, {
  397 + ddGroup: 'explorerTree',
  398 + notifyEnter : function(ddSource, e, data)
  399 + { },
  400 + notifyOver : function(ddSource, e, data)
  401 + {
  402 + if (data.records[0].data.nodeType == 'localParam' && data.records[0].get('notyet')) {
  403 + this.valid = false;
  404 + return this.dropNotAllowed;
  405 + }
  406 + if (((data.records[0].data.nodeType == 'localParam') ||
  407 + (data.records[0].data.nodeType == 'remoteParam') ||
  408 + (data.records[0].data.nodeType == 'remoteSimuParam') ||
  409 + (data.records[0].data.nodeType == 'derivedParam') ||
  410 + (data.records[0].data.nodeType == 'myDataParam') ||
  411 + (data.records[0].data.nodeType == 'alias'))&&
  412 + (data.records[0].isLeaf() || data.records[0].data.isParameter) &&
  413 + !data.records[0].data.disable)
  414 + {
  415 + this.valid = true;
  416 + return this.dropAllowed;
  417 + }
  418 +
  419 + this.valid = false;
  420 + return this.dropNotAllowed;
  421 + },
  422 + notifyDrop : function(ddSource, e, data)
  423 + {
  424 + if (!this.valid)
  425 + return false;
  426 + var idToSent;
  427 + var components = null;
  428 + switch (data.records[0].data.nodeType)
  429 + {
  430 + case 'localParam' :
  431 + case 'remoteParam':
  432 + case 'remoteSimuParam':
  433 + idToSent = data.records[0].get('id');
  434 + if (data.records[0].get('alias')!= "" )
  435 + idToSent = "#"+data.records[0].get('alias');
  436 + var component_info = data.records[0].get('component_info');
  437 + if (component_info && component_info.parentId) {
  438 + //It's a component
  439 + idToSent = component_info.parentId;
  440 + components = [];
  441 + if (component_info.index1)
  442 + components['index1'] = component_info.index1;
  443 + if (component_info.index2)
  444 + components['index2'] = component_info.index2;
  445 + }
  446 + break;
  447 + case 'alias' :
  448 + idToSent = "#"+data.records[0].get('text');
  449 + break;
  450 + case 'derivedParam' :
  451 + idToSent = "ws_"+data.records[0].get('text');
  452 + break;
  453 + case 'myDataParam' :
  454 + idToSent = "wsd_"+data.records[0].get('text');
  455 + break;
  456 + default :
  457 + return false;
  458 + }
  459 + var downModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);
  460 + if (downModule)
  461 + downModule.addParam(idToSent,data.records[0].get('leaf'), data.records[0].get('needsArgs'), components);
  462 + return true;
  463 + }
  464 + });
  465 + }
  466 + }
462 }); 467 });
463 468
464 this.paramGrid.on('cellclick', this.actionItem, this); 469 this.paramGrid.on('cellclick', this.actionItem, this);
465 470
466 this.TTGrid = Ext.create('Ext.grid.Panel', { 471 this.TTGrid = Ext.create('Ext.grid.Panel', {
467 - flex: 2,  
468 - store : Ext.create('Ext.data.Store', {model: 'amdaModel.TTobject'}),  
469 - columns: [  
470 - { xtype: 'rownumberer', width: 20 },  
471 - { header: "Time Table Name", dataIndex: 'name', flex:1, sortable: false, menuDisabled: true},  
472 - {  
473 - menuDisabled : true, width: 30, renderer: function(){  
474 - return '<div class="icon-remover" style="width: 15px; height: 15px;"></div>';  
475 - } 472 + flex: 2,
  473 + store : Ext.create('Ext.data.Store', {model: 'amdaModel.TTobject'}),
  474 + columns: [
  475 + { xtype: 'rownumberer', width: 20 },
  476 + { header: "Time Table Name", dataIndex: 'name', flex:1, sortable: false, menuDisabled: true},
  477 + {
  478 + menuDisabled : true, width: 30, renderer: function(){
  479 + return '<div class="icon-remover" style="width: 15px; height: 15px;"></div>';
  480 + }
  481 + }
  482 + ],
  483 + listeners :
  484 + {
  485 + render : function(o,op)
  486 + {
  487 + var me = this;
  488 + var el = me.body.dom;
  489 + var dropTarget = Ext.create('Ext.dd.DropTarget', el, {
  490 + ddGroup: 'explorerTree',
  491 + notifyEnter : function(ddSource, e, data)
  492 + {
  493 +
  494 + },
  495 + notifyOver : function(ddSource, e, data)
  496 + {
  497 + var nodeType = data.records[0].get('nodeType');
  498 +
  499 + if ((nodeType == 'timeTable' || nodeType == 'sharedtimeTable') ||
  500 + (nodeType == 'catalog' || nodeType == 'sharedCatalog') &&
  501 + (data.records[0].get('leaf')))
  502 + {
  503 + this.valid = true;
  504 + return this.dropAllowed;
  505 + }
  506 + this.valid = false;
  507 + return this.dropNotAllowed;
  508 + },
  509 + notifyDrop : function(ddSource, e, data)
  510 + {
  511 + if (!this.valid)
  512 + return false;
  513 + var downModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);
  514 + if (downModule)
  515 + downModule.getUiContent().addTTdownload(data.records[0].get('text'),data.records[0].get('id'));
  516 + return true;
  517 + }
  518 + });
  519 + }
476 } 520 }
477 - ],  
478 - listeners :  
479 - {  
480 - render : function(o,op)  
481 - {  
482 - var me = this;  
483 - var el = me.body.dom;  
484 - var dropTarget = Ext.create('Ext.dd.DropTarget', el, {  
485 - ddGroup: 'explorerTree',  
486 - notifyEnter : function(ddSource, e, data)  
487 - {  
488 -  
489 - },  
490 - notifyOver : function(ddSource, e, data)  
491 - {  
492 - if ((data.records[0].get('nodeType') == 'timeTable' || data.records[0].get('nodeType') == 'sharedtimeTable') && (data.records[0].get('leaf')))  
493 - {  
494 - this.valid = true;  
495 - return this.dropAllowed;  
496 - }  
497 - this.valid = false;  
498 - return this.dropNotAllowed;  
499 - },  
500 - notifyDrop : function(ddSource, e, data)  
501 - {  
502 - if (!this.valid)  
503 - return false;  
504 - var downModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);  
505 - if (downModule)  
506 - downModule.getUiContent().addTTdownload(data.records[0].get('text'),data.records[0].get('id'));  
507 - return true;  
508 - }  
509 - });  
510 - }  
511 - }  
512 }); 521 });
  522 +
513 this.TTGrid.on('cellclick', this.actionItem, this); 523 this.TTGrid.on('cellclick', this.actionItem, this);
514 524
515 this.paramPanel = { 525 this.paramPanel = {
516 - xtype: 'container',  
517 - title: 'Get Data',  
518 - layout: {  
519 - type: 'hbox',  
520 - align : 'stretch',  
521 - defaultMargins: {top: 10, left:10, bottom: 5, right:10}  
522 - },  
523 - items: [  
524 - {  
525 - xtype: 'container',  
526 - flex: 2,  
527 - layout: {  
528 - type: 'vbox',  
529 - align : 'stretch'  
530 - },  
531 - items: [  
532 - {  
533 - xtype: 'textfield',  
534 - fieldLabel: 'Request Name',  
535 - disabled: true,  
536 - name : 'name'  
537 - },  
538 - {  
539 - xtype: 'splitter',  
540 - flex: 0.05  
541 - },  
542 - this.paramGrid  
543 - ]  
544 - },  
545 - {  
546 - xtype: 'container',  
547 - flex: 2,  
548 - defaults : {  
549 - xtype : 'combo',  
550 - labelWidth: 90,  
551 - queryMode: 'local',  
552 - editable: false  
553 - },  
554 - layout: {  
555 - type: 'vbox',  
556 - align: 'stretch'  
557 - },  
558 - items: [  
559 - {  
560 - fieldLabel: 'Time Format',  
561 - name: 'timeformat',  
562 - store: this.timeformatData,  
563 - value: this.timeformatData[0]  
564 - },  
565 - {  
566 - fieldLabel: 'File Structure',  
567 - name: 'filestructure',  
568 - store: this.filestructureData,  
569 - value: this.filestructureData[2],  
570 - listeners : {  
571 - change : { fn : this.onFileStructureChange },  
572 - scope: this  
573 - } 526 + xtype: 'container',
  527 + title: 'Parameters',
  528 + layout: {
  529 + type: 'hbox',
  530 + align : 'stretch',
  531 + defaultMargins: {top: 10, left:10, bottom: 5, right:10}
  532 + },
  533 + items: [
  534 + {
  535 + xtype: 'container',
  536 + flex: 2,
  537 + layout: {
  538 + type: 'vbox',
  539 + align : 'stretch'
  540 + },
  541 + items: [
  542 + {
  543 + xtype: 'textfield',
  544 + fieldLabel: 'Request Name',
  545 + disabled: true,
  546 + name : 'name'
  547 + },
  548 + {
  549 + xtype: 'splitter',
  550 + flex: 0.05
  551 + },
  552 + this.paramGrid
  553 + ]
  554 + },
  555 + {
  556 + xtype: 'container',
  557 + flex: 2,
  558 + defaults : {
  559 + xtype : 'combo',
  560 + labelWidth: 90,
  561 + queryMode: 'local',
  562 + editable: false
574 }, 563 },
575 - {  
576 - xtype: 'checkbox', boxLabel: 'Use first param. as reference for sampling',  
577 - boxLabelAlign: 'before',  
578 - name: 'refparamsampling', checked: false, disabled: true,  
579 - listeners : {  
580 - change : { fn : this.onRefParamSamplingChange },  
581 - scope : this  
582 - }  
583 - },  
584 - {  
585 - xtype: 'numberfield', name: 'sampling',  
586 - fieldLabel: 'Sampling Time', value: 600,  
587 - hideTrigger: true, editable: true,  
588 - disabled: true 564 + layout: {
  565 + type: 'vbox',
  566 + align: 'stretch'
589 }, 567 },
590 - {  
591 - xtype: 'textfield', name: 'fileprefix',  
592 - fieldLabel: 'File Prefix',  
593 - disabled: false, editable: true 568 + items: [
  569 + {
  570 + fieldLabel: 'Time Format',
  571 + name: 'timeformat',
  572 + store: this.timeformatData,
  573 + value: this.timeformatData[0]
  574 + },
  575 + {
  576 + fieldLabel: 'File Structure',
  577 + name: 'filestructure',
  578 + store: this.filestructureData,
  579 + value: this.filestructureData[2],
  580 + listeners : {
  581 + change : { fn : this.onFileStructureChange },
  582 + scope: this
  583 + }
  584 + },
  585 + {
  586 + xtype: 'checkbox', boxLabel: 'Use first param. as reference for sampling',
  587 + boxLabelAlign: 'before',
  588 + name: 'refparamsampling', checked: false, disabled: true,
  589 + listeners : {
  590 + change : { fn : this.onRefParamSamplingChange },
  591 + scope : this
  592 + }
  593 + },
  594 + {
  595 + xtype: 'numberfield', name: 'sampling',
  596 + fieldLabel: 'Sampling Time', value: 600,
  597 + hideTrigger: true, editable: true,
  598 + disabled: true
  599 + },
  600 + {
  601 + xtype: 'textfield', name: 'fileprefix',
  602 + fieldLabel: 'File Prefix',
  603 + disabled: false, editable: true
  604 + },
  605 + {
  606 + fieldLabel: 'File Format',
  607 + name: 'fileformat',
  608 + store: this.fileformatData,
  609 + value: this.fileformatData[0]
  610 + },
  611 + {
  612 + fieldLabel: 'Compression',
  613 + name: 'compression',
  614 + store: this.filecompressData,
  615 + value: this.filecompressData[0]
  616 + },
  617 + this.timeSelector
  618 + ]
  619 + }
  620 + ]};
  621 +
  622 + this.ttPanel =
  623 + {
  624 + xtype: 'container',
  625 + title: 'Time Tables / Catalogs',
  626 + layout: {
  627 + type: 'hbox',
  628 + align : 'stretch',
  629 + defaultMargins: { top: 10, left:10, bottom: 5, right:10 }
  630 + },
  631 + items: [
  632 + this.TTGrid,
  633 + {
  634 + xtype: 'container',
  635 + flex: 2,
  636 + defaults : {
  637 + xtype : 'combo',
  638 + labelWidth: 90,
  639 + queryMode: 'local',
  640 + editable: false
594 }, 641 },
595 - {  
596 - fieldLabel: 'File Format',  
597 - name: 'fileformat',  
598 - store: this.fileformatData,  
599 - value: this.fileformatData[0]  
600 - },  
601 - {  
602 - fieldLabel: 'Compression',  
603 - name: 'compression',  
604 - store: this.filecompressData,  
605 - value: this.filecompressData[0] 642 + layout: {
  643 + type: 'vbox',
  644 + align : 'stretch'
606 }, 645 },
607 - this.timeSelector  
608 - ]  
609 - }  
610 - ]};  
611 -  
612 - this.ttPanel =  
613 - {  
614 - xtype: 'container',  
615 - title: 'Get Time Table',  
616 - layout: {  
617 - type: 'hbox',  
618 - align : 'stretch',  
619 - defaultMargins: {top: 10, left:10, bottom: 5, right:10}  
620 - },  
621 - items: [  
622 - this.TTGrid,  
623 - {  
624 - xtype: 'container',  
625 - flex: 2,  
626 - defaults : {  
627 - xtype : 'combo',  
628 - labelWidth: 90,  
629 - queryMode: 'local',  
630 - editable: false  
631 - },  
632 - layout: {  
633 - type: 'vbox',  
634 - align : 'stretch'  
635 - },  
636 - items: [  
637 - {  
638 - fieldLabel:'Time Format',  
639 - name:'timeformatTT',  
640 - store: this.timeformatData,  
641 - value: this.timeformatData[0]  
642 - },  
643 - {  
644 - fieldLabel: 'File Format ',  
645 - name: 'fileformatTT',  
646 - store: this.fileformatTTData,  
647 - value: this.fileformatTTData[0]  
648 - },  
649 - {  
650 - fieldLabel: 'Compression ',  
651 - name: 'compressionTT',  
652 - store: this.filecompressData,  
653 - value: this.filecompressData[0]  
654 - }  
655 - ]  
656 - }  
657 - ]  
658 - } ; 646 + items: [{
  647 + fieldLabel:'Time Format',
  648 + name:'timeformatTT',
  649 + store: this.timeformatTTData,
  650 + value: this.timeformatTTData[0]
  651 + },
  652 + {
  653 + fieldLabel: 'File Format ',
  654 + name: 'fileformatTT',
  655 + store: this.fileformatTTData,
  656 + value: this.fileformatTTData[0]
  657 + },
  658 + {
  659 + fieldLabel: 'Compression ',
  660 + name: 'compressionTT',
  661 + store: this.filecompressTT,
  662 + value: this.filecompressTT[0]
  663 + }
  664 + ]}
  665 + ]
  666 + };
659 667
660 this.formPanel = new Ext.form.Panel({ 668 this.formPanel = new Ext.form.Panel({
661 - layout: 'fit',  
662 - region: 'center',  
663 - bodyStyle: { background : '#dfe8f6' },  
664 - buttonAlign: 'left',  
665 - trackResetOnLoad: true, //reset to the last loaded record  
666 - defaults: { 669 + layout: 'fit',
  670 + region: 'center',
  671 + bodyStyle: { background : '#dfe8f6' },
  672 + buttonAlign: 'left',
  673 + trackResetOnLoad: true, //reset to the last loaded record
  674 + defaults: {
667 border: false 675 border: false
668 - },  
669 - items: [  
670 - {  
671 - xtype: 'tabpanel',  
672 - activeTab : 0,  
673 - bodyStyle: { background : '#dfe8f6' },  
674 - items: [  
675 - this.paramPanel,  
676 - this.ttPanel  
677 - ]  
678 - }  
679 - ],  
680 - fbar: [  
681 - {  
682 - text: 'Download',  
683 - scope : this,  
684 - handler: function(button){  
685 - // if the return is true (object had been updated)  
686 - if(this.updateObject()){  
687 - // launch the search process  
688 - this.doDownload();  
689 - }  
690 - }  
691 - },  
692 - {  
693 - text: 'Reset',  
694 - scope : this,  
695 - handler: function(){  
696 - this.formPanel.getForm().reset();  
697 -  
698 - var tabPanel = this.formPanel.down();  
699 - var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());  
700 - if (downloadSrc === 0) {  
701 - // reset parameters and Time Tables in Get Data  
702 - this.paramGrid.store.removeAll();  
703 - this.timeSelector.TTGrid.store.removeAll();  
704 - }  
705 - else {  
706 - // reset Time Tables in Get time Table  
707 - this.TTGrid.store.removeAll();  
708 - }  
709 - }  
710 - }  
711 - ]  
712 - });  
713 - 676 + },
  677 + items: [{
  678 + xtype: 'tabpanel',
  679 + activeTab : 0,
  680 + bodyStyle: { background : '#dfe8f6' },
  681 + items: [
  682 + this.paramPanel,
  683 + this.ttPanel
  684 + ]
  685 + }],
  686 + fbar: [
  687 + {
  688 + text: 'Download',
  689 + scope : this,
  690 + handler: function(button){
  691 + // if the return is true (object had been updated)
  692 + if(this.updateObject()){
  693 + // launch the download process
  694 + this.doDownload();
  695 + }
  696 + }
  697 + },
  698 + {
  699 + text: 'Reset',
  700 + scope : this,
  701 + handler: function(){
  702 + this.formPanel.getForm().reset();
  703 + var tabPanel = this.formPanel.down();
  704 + var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());
  705 + if (downloadSrc === 0) {
  706 + // reset parameters and Time Tables in Get Data
  707 + this.paramGrid.store.removeAll();
  708 + this.timeSelector.TTGrid.store.removeAll();
  709 + }
  710 + else {
  711 + // reset Time Tables in Get time Table
  712 + this.TTGrid.store.removeAll();
  713 + }
  714 + }
  715 + }]
  716 + });
714 717
715 - var myConf = {  
716 - layout: 'border',  
717 - items: [  
718 - this.formPanel,  
719 - {  
720 - xtype: 'panel',  
721 - region: 'south',  
722 - title: 'Information',  
723 - collapsible: true,  
724 - height: 100,  
725 - autoHide: false,  
726 - bodyStyle: 'padding:5px',  
727 - iconCls: 'icon-information',  
728 - loader: {  
729 - autoLoad: true,  
730 - url: helpDir+'downloadHOWTO'  
731 - }  
732 -  
733 -  
734 - }  
735 - ],  
736 - plugins: [ {ptype: 'paramArgumentsPlugin', pluginId: 'download-param-arguments-plugin'}]  
737 - };  
738 -  
739 - Ext.apply (this, Ext.apply(arguments, myConf));  
740 - }  
741 - 718 + var myConf = {
  719 + layout: 'border',
  720 + items: [
  721 + this.formPanel,
  722 + {
  723 + xtype: 'panel',
  724 + region: 'south',
  725 + title: 'Information',
  726 + collapsible: true,
  727 + height: 100,
  728 + autoHide: false,
  729 + bodyStyle: 'padding:5px',
  730 + iconCls: 'icon-information',
  731 + loader: {
  732 + autoLoad: true,
  733 + url: helpDir + 'downloadHOWTO'
  734 + }
  735 + }
  736 + ],
  737 + plugins: [ {ptype: 'paramArgumentsPlugin', pluginId: 'download-param-arguments-plugin'}]
  738 + };
  739 +
  740 + Ext.apply (this, Ext.apply(arguments, myConf));
  741 + }
742 }); 742 });
php/classes/AmdaAction.php
@@ -596,38 +596,37 @@ class AmdaAction { @@ -596,38 +596,37 @@ class AmdaAction {
596 } 596 }
597 597
598 598
599 - public function getObject($id, $nodeType) {  
600 -  
601 - switch ($nodeType) {  
602 - case 'myDataParam':  
603 - case 'derivedParam' :  
604 - $objectMgr = new DerivedParamMgr($nodeType);  
605 - break;  
606 - case 'timeTable' :  
607 - case 'sharedtimeTable' :  
608 - $objectMgr = new TimeTableMgr();  
609 - break;  
610 - case 'catalog' :  
611 - case 'sharedcatalog' :  
612 - $objectMgr = new CatalogMgr();  
613 - break;  
614 - case 'condition' :  
615 - case 'request' :  
616 - $objectMgr = new RequestMgr($nodeType);  
617 - break;  
618 - case 'bkgWorks' : 599 + public function getObject($id, $nodeType) {
  600 +
  601 + switch ($nodeType) {
  602 + case 'myDataParam':
  603 + case 'derivedParam' :
  604 + $objectMgr = new DerivedParamMgr($nodeType);
  605 + break;
  606 + case 'timeTable' :
  607 + case 'sharedtimeTable' :
  608 + $objectMgr = new TimeTableMgr();
  609 + break;
  610 + case 'catalog' :
  611 + case 'sharedcatalog' :
  612 + $objectMgr = new CatalogMgr();
  613 + break;
  614 + case 'condition' :
  615 + case 'request' :
  616 + $objectMgr = new RequestMgr($nodeType);
  617 + break;
  618 + case 'bkgWorks' :
619 require_once(INTEGRATION_SRC_DIR."RequestManager.php"); 619 require_once(INTEGRATION_SRC_DIR."RequestManager.php");
620 return $this->executeRequest($id, FunctionTypeEnumClass::PROCESSGETINFO); 620 return $this->executeRequest($id, FunctionTypeEnumClass::PROCESSGETINFO);
621 - break;  
622 - case 'myData' :  
623 - $objectMgr = new FilesMgr();  
624 - break;  
625 - default:  
626 - return array("error" => $nodeType." NOT_IMPLEMENTED_YET");  
627 - }  
628 -  
629 - return $objectMgr -> getObject($id, $nodeType);  
630 - } 621 + break;
  622 + case 'myData' :
  623 + $objectMgr = new FilesMgr();
  624 + break;
  625 + default:
  626 + return array("error" => $nodeType." NOT_IMPLEMENTED_YET");
  627 + }
  628 + return $objectMgr -> getObject($id, $nodeType);
  629 + }
631 /* 630 /*
632 * $obj = { id: node.id, leaf: node.leaf, nodeType: node.nodeType } 631 * $obj = { id: node.id, leaf: node.leaf, nodeType: node.nodeType }
633 */ 632 */
@@ -846,13 +845,13 @@ class AmdaAction { @@ -846,13 +845,13 @@ class AmdaAction {
846 return array('success' => true, 'userHost' => $dd -> getIPclient()); 845 return array('success' => true, 'userHost' => $dd -> getIPclient());
847 } 846 }
848 847
849 - private function executeRequest($obj, $function)  
850 - { 848 + private function executeRequest($obj, $function){
  849 +
851 $res = $this->checkUser($obj); 850 $res = $this->checkUser($obj);
852 851
853 if (!$res['success']) 852 if (!$res['success'])
854 return $res; 853 return $res;
855 - 854 +
856 $requestManager = new RequestManagerClass(); 855 $requestManager = new RequestManagerClass();
857 856
858 try { 857 try {
@@ -867,14 +866,18 @@ class AmdaAction { @@ -867,14 +866,18 @@ class AmdaAction {
867 /* 866 /*
868 * Main EXECUTE PROCEDURE 867 * Main EXECUTE PROCEDURE
869 */ 868 */
870 - public function execute($node, $obj)  
871 - { 869 + public function execute($node, $obj){
  870 +
872 require_once(INTEGRATION_SRC_DIR."RequestManager.php"); 871 require_once(INTEGRATION_SRC_DIR."RequestManager.php");
873 - if (isset($obj->action)) 872 +
  873 + // just convert TT / Catalog
  874 + if ($obj->nodeType == "download" && $obj->downloadSrc == "1")
  875 + return $this->executeRequest($obj, FunctionTypeEnumClass::TTCONVERT);
  876 + else if (isset($obj->action))
874 return $this->executeRequest($obj, FunctionTypeEnumClass::ACTION); 877 return $this->executeRequest($obj, FunctionTypeEnumClass::ACTION);
875 else 878 else
876 return $this->executeRequest($obj, FunctionTypeEnumClass::PARAMS); 879 return $this->executeRequest($obj, FunctionTypeEnumClass::PARAMS);
877 - } 880 + }
878 881
879 /* 882 /*
880 * Generate derived parameter compilation 883 * Generate derived parameter compilation
@@ -888,8 +891,8 @@ class AmdaAction { @@ -888,8 +891,8 @@ class AmdaAction {
888 /* 891 /*
889 * Delete derived parameter compilation 892 * Delete derived parameter compilation
890 */ 893 */
891 - public function compilParamDelete($obj)  
892 - { 894 + public function compilParamDelete($obj){
  895 +
893 require_once(INTEGRATION_SRC_DIR."RequestManager.php"); 896 require_once(INTEGRATION_SRC_DIR."RequestManager.php");
894 $res = $this->checkUser($obj); 897 $res = $this->checkUser($obj);
895 898
@@ -1177,108 +1180,125 @@ class AmdaAction { @@ -1177,108 +1180,125 @@ class AmdaAction {
1177 return $res; 1180 return $res;
1178 } 1181 }
1179 1182
1180 - public function getCrtFilterResult()  
1181 - {  
1182 - $filtersMgr = new FiltersMgr();  
1183 - return $filtersMgr->getCrtResult();  
1184 - } 1183 + public function getCrtFilterResult()
  1184 + {
  1185 + $filtersMgr = new FiltersMgr();
  1186 + return $filtersMgr->getCrtResult();
  1187 + }
1185 1188
1186 - public function setCrtFilterId($o)  
1187 - {  
1188 - $filtersMgr = new FiltersMgr();  
1189 - return $filtersMgr->setCrtId($o->id);  
1190 - } 1189 + public function setCrtFilterId($o)
  1190 + {
  1191 + $filtersMgr = new FiltersMgr();
  1192 + return $filtersMgr->setCrtId($o->id);
  1193 + }
1191 1194
1192 - public function resetFilter()  
1193 - {  
1194 - $filtersMgr = new FiltersMgr();  
1195 - $res = $filtersMgr->reset();  
1196 - return $res;  
1197 - } 1195 + public function resetFilter()
  1196 + {
  1197 + $filtersMgr = new FiltersMgr();
  1198 + $res = $filtersMgr->reset();
  1199 + return $res;
  1200 + }
1198 1201
1199 public function logout($isGuest) 1202 public function logout($isGuest)
1200 { 1203 {
1201 - if ($isGuest) {  
1202 - $guestMgr = new Guest($this->user);  
1203 - $guestMgr->deleteGuest();  
1204 - }  
1205 - else {  
1206 - $myBaseMgr = new BaseManager();  
1207 - $myBaseMgr->delSimuFiles('mysimudata');  
1208 - $myBaseMgr->delSimuFiles('mywsrdata');  
1209 -  
1210 - $this->cleanUserWS();  
1211 - } 1204 + if ($isGuest) {
  1205 + $guestMgr = new Guest($this->user);
  1206 + $guestMgr->deleteGuest();
  1207 + }
  1208 + else {
  1209 + $myBaseMgr = new BaseManager();
  1210 + $myBaseMgr->delSimuFiles('mysimudata');
  1211 + $myBaseMgr->delSimuFiles('mywsrdata');
  1212 +
  1213 + $this->cleanUserWS();
  1214 + }
1212 return; 1215 return;
1213 } 1216 }
1214 1217
1215 - public function getInfo($obj)  
1216 - {  
1217 - if (file_exists(HELPPATH.$obj->name))  
1218 - {  
1219 - $content = file_get_contents(HELPPATH.$obj->name);  
1220 - return array('success' => true, 'result' => $content);  
1221 - }  
1222 - return array('success' => false);  
1223 -  
1224 - } 1218 + public function getInfo($obj)
  1219 + {
  1220 + if (file_exists(HELPPATH.$obj->name))
  1221 + {
  1222 + $content = file_get_contents(HELPPATH.$obj->name);
  1223 + return array('success' => true, 'result' => $content);
  1224 + }
  1225 + return array('success' => false);
  1226 + }
1225 1227
1226 - public function getUserInfo()  
1227 - {  
1228 - $dd = new UserMgr();  
1229 - return $dd->getUserInfo();  
1230 - }  
1231 -  
1232 - public function convertWS()  
1233 - {  
1234 - $dd = new UserMgr();  
1235 - return $dd->convertWS();  
1236 - } 1228 + public function getUserInfo()
  1229 + {
  1230 + $dd = new UserMgr();
  1231 + return $dd->getUserInfo();
  1232 + }
1237 1233
1238 -// $obj ={"Object":"Earth","RunCount":"2",  
1239 -// "SW_Density_value":"10","SW_Density_weight":"1","SW_Density_scale":"7","SW_Temperature_value":"100", ....}  
1240 - public function getRun($obj)  
1241 - { 1234 + public function convertWS()
  1235 + {
  1236 + $dd = new UserMgr();
  1237 + return $dd->convertWS();
  1238 + }
1242 1239
1243 - $myBestRunsMgr = new BestRunsMgr();  
1244 - $res = $myBestRunsMgr->getRun($obj);  
1245 -  
1246 - return $res;  
1247 - } 1240 + // $obj ={"Object":"Earth","RunCount":"2",
  1241 + // "SW_Density_value":"10","SW_Density_weight":"1","SW_Density_scale":"7","SW_Temperature_value":"100", ....}
  1242 + public function getRun($obj)
  1243 + {
  1244 + $myBestRunsMgr = new BestRunsMgr();
  1245 + $res = $myBestRunsMgr->getRun($obj);
  1246 +
  1247 + return $res;
  1248 + }
1248 1249
1249 - //$obj = array of IDs  
1250 - public function addRun($obj)  
1251 - {  
1252 - $myBestRunsMgr = new BestRunsMgr();  
1253 - $myBestRunsMgr->init();  
1254 - $myBestRunsMgr->addRuns($obj);  
1255 -  
1256 - $res = array('success' => true,'addedRuns' => $obj);  
1257 - return $res;  
1258 - }  
1259 - //AKKA - New action to clean user WS  
1260 - public function cleanUserWS()  
1261 - {  
1262 - require_once(INTEGRATION_SRC_DIR."RequestManager.php");  
1263 - return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSCLEAN);  
1264 - } 1250 + //$obj = array of IDs
  1251 + public function addRun($obj)
  1252 + {
  1253 + $myBestRunsMgr = new BestRunsMgr();
  1254 + $myBestRunsMgr->init();
  1255 + $myBestRunsMgr->addRuns($obj);
1265 1256
1266 - public function deleteSpecialInfo($name)  
1267 - {  
1268 - if (file_exists(USERDIR.$name))  
1269 - unlink(USERDIR.$name);  
1270 - return array('success' => true);  
1271 - } 1257 + $res = array('success' => true,'addedRuns' => $obj);
  1258 + return $res;
  1259 + }
  1260 +
  1261 + //AKKA - New action to clean user WS
  1262 + public function cleanUserWS()
  1263 + {
  1264 + $this->rrmdir(USERDIR.'DOWNLOAD.TEMP');
  1265 +
  1266 + require_once(INTEGRATION_SRC_DIR."RequestManager.php");
  1267 + return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSCLEAN);
  1268 + }
  1269 +
  1270 + public function rrmdir($dir){
  1271 + if (is_dir($dir)) {
  1272 + $objects = scandir($dir);
  1273 + foreach ($objects as $object) { // Recursively delete a directory that is not empty and directorys in directory
  1274 + if ($object != "." && $object != "..") { // If object isn't a directory recall recursively this function
  1275 + if (filetype($dir."/".$object) == "dir")
  1276 + $this->rrmdir($dir."/".$object);
  1277 + else
  1278 + unlink($dir."/".$object);
  1279 + }
  1280 + }
  1281 + reset($objects);
  1282 + rmdir($dir);
  1283 + }
  1284 + }
  1285 +
  1286 + public function deleteSpecialInfo($name)
  1287 + {
  1288 + if (file_exists(USERDIR.$name))
  1289 + unlink(USERDIR.$name);
  1290 + return array('success' => true);
  1291 + }
1272 1292
1273 - public function interactivePlot($obj, $multiPlotState)  
1274 - {  
1275 - require_once(INTEGRATION_SRC_DIR."RequestManager.php");  
1276 - $inputobj = (Object)array(  
1277 - 'action' => $obj,  
1278 - 'multiPlotState' => $multiPlotState  
1279 - );  
1280 - return $this->executeRequest($inputobj, FunctionTypeEnumClass::ACTION);  
1281 - } 1293 + public function interactivePlot($obj, $multiPlotState)
  1294 + {
  1295 + require_once(INTEGRATION_SRC_DIR."RequestManager.php");
  1296 + $inputobj = (Object)array(
  1297 + 'action' => $obj,
  1298 + 'multiPlotState' => $multiPlotState
  1299 + );
  1300 + return $this->executeRequest($inputobj, FunctionTypeEnumClass::ACTION);
  1301 + }
1282 1302
1283 public function getParamPlotInit($obj) 1303 public function getParamPlotInit($obj)
1284 { 1304 {
php/classes/AmdaObjectMgr.php
@@ -5,187 +5,208 @@ @@ -5,187 +5,208 @@
5 * 5 *
6 */ 6 */
7 7
8 - class AmdaObjectMgr {  
9 -  
10 - protected $xmlName, $xp;  
11 - protected $attributes, $optionalAttributes;  
12 - protected $contentRootId, $objTagName;  
13 - protected $descFileName, $resFileName;  
14 - protected $id_prefix;  
15 - protected $contentRootTag;  
16 - protected $obj, $id;  
17 - protected $types;  
18 -  
19 - public $contentDom;  
20 - public $objectDom;  
21 -  
22 - protected function __construct($xmlFile) {  
23 -// content XML 8 +class AmdaObjectMgr {
  9 +
  10 + protected $xmlName, $xp;
  11 + protected $attributes, $optionalAttributes;
  12 + protected $contentRootId, $objTagName;
  13 + protected $descFileName, $resFileName;
  14 + protected $id_prefix;
  15 + protected $contentRootTag;
  16 + protected $obj, $id;
  17 + protected $types;
  18 +
  19 + public $contentDom;
  20 + public $objectDom;
  21 +
  22 + protected function __construct($xmlFile) {
  23 + // content XML
24 $this->xmlName = USERWSDIR."/".$xmlFile; 24 $this->xmlName = USERWSDIR."/".$xmlFile;
25 $this->contentDom = new DomDocument("1.0"); 25 $this->contentDom = new DomDocument("1.0");
26 $this->contentDom->preserveWhiteSpace = false; 26 $this->contentDom->preserveWhiteSpace = false;
27 $this->contentDom->formatOutput = true; 27 $this->contentDom->formatOutput = true;
28 28
29 if (file_exists($this->xmlName)) { 29 if (file_exists($this->xmlName)) {
30 - $this->contentDom -> load($this->xmlName);  
31 - $this->xp = new domxpath($this->contentDom); 30 + $this->contentDom -> load($this->xmlName);
  31 + $this->xp = new domxpath($this->contentDom);
32 } 32 }
33 -// object desc XML  
34 -//TODO not used in RequestMgr 33 + // object desc XML
  34 + //TODO not used in RequestMgr
35 $this->objectDom = new DomDocument("1.0"); 35 $this->objectDom = new DomDocument("1.0");
36 $this->objectDom->preserveWhiteSpace = false; 36 $this->objectDom->preserveWhiteSpace = false;
37 $this->objectDom->formatOutput = true; 37 $this->objectDom->formatOutput = true;
38 } 38 }
39 39
40 - private function getNewId() {  
41 - // Get all ID attributes  
42 - $elements = $this->xp->query("//".$this->objTagName."/@xml:id"); 40 + private function getNewId() {
  41 + // Get all ID attributes
  42 + $elements = $this->xp->query("//".$this->objTagName."/@xml:id");
43 43
44 - // Now find New Valid ID 44 + // Now find New Valid ID
45 if ($elements->length > 0) { 45 if ($elements->length > 0) {
46 - if($elements->length > 0) for ($i = 0; $i < $elements->length; $i++) {  
47 - $id = explode('_',$elements->item($i)->nodeValue);  
48 - $idList[] = $id[1]; 46 + if($elements->length > 0) for ($i = 0; $i < $elements->length; $i++) {
  47 + $id = explode('_',$elements->item($i)->nodeValue);
  48 + $idList[] = $id[1];
49 } 49 }
50 50
51 sort($idList); 51 sort($idList);
52 52
53 for ($i = 0; $i < count($idList); $i++) { 53 for ($i = 0; $i < count($idList); $i++) {
54 - if ($idList[$i] > $i) {  
55 - $newID = $i;  
56 - break; 54 + if ($idList[$i] > $i) {
  55 + $newID = $i;
  56 + break;
57 } 57 }
58 - $newID = $i+1;  
59 - } 58 + $newID = $i+1;
  59 + }
60 } else 60 } else
61 - $newID = 0;  
62 - return $newID;  
63 - } 61 + $newID = 0;
  62 + return $newID;
  63 + }
64 64
65 protected function setId() { 65 protected function setId() {
66 - $id_ = $this->getNewId(); 66 +
  67 + $id_ = $this->getNewId();
67 if ($id_ === false) return false; 68 if ($id_ === false) return false;
68 $this->id = $this->id_prefix.$id_; 69 $this->id = $this->id_prefix.$id_;
  70 +
69 return $this->id; 71 return $this->id;
70 } 72 }
71 73
72 protected function objectExistsByName($name){ 74 protected function objectExistsByName($name){
73 - $this->obj = $this->xp->query("//".$this->objTagName."[@name='".$name."']"); 75 +
  76 + $this->obj = $this->xp->query("//".$this->objTagName."[@name='".$name."']");
74 if ($this->obj->length != 0) return true; 77 if ($this->obj->length != 0) return true;
  78 +
75 return false; 79 return false;
76 } 80 }
77 81
78 protected function getObjectIdByName($name) { 82 protected function getObjectIdByName($name) {
  83 +
79 $this->obj = $this->xp->query("//".$this->objTagName."[@name='".$name."']"); 84 $this->obj = $this->xp->query("//".$this->objTagName."[@name='".$name."']");
80 - if ($this->obj->length == 0) return false;  
81 - $id = $this->obj->item(0)->getAttribute('xml:id');  
82 - if ($id) return $id; 85 + if ($this->obj->length == 0) return false;
  86 + $id = $this->obj->item(0)->getAttribute('xml:id');
  87 + if ($id) return $id;
  88 +
83 return false; 89 return false;
84 } 90 }
85 91
86 protected function folderExistsByName($name){ 92 protected function folderExistsByName($name){
87 - $this->obj = $this->xp->query("//".$this->contentRootTag."/folder[@name='".$name."']"); 93 +
  94 + $this->obj = $this->xp->query("//".$this->contentRootTag."/folder[@name='".$name."']");
88 if ($this->obj->length != 0) return true; 95 if ($this->obj->length != 0) return true;
  96 +
89 return false; 97 return false;
90 } 98 }
91 99
92 - protected function objectExistsById($id){ 100 + protected function objectExistsById($id){
  101 +
93 $this->obj = $this->contentDom->getElementById($id); 102 $this->obj = $this->contentDom->getElementById($id);
94 if ($this->obj != null) return $this->obj; 103 if ($this->obj != null) return $this->obj;
  104 +
95 return false; 105 return false;
96 - } 106 + }
97 107
98 - protected function createObjectResource(){}  
99 - protected function renameInResource(){} 108 + protected function createObjectResource(){}
  109 + protected function renameInResource(){}
100 110
101 /* 111 /*
102 * Write Object into desc file 112 * Write Object into desc file
103 */ 113 */
104 protected function createObjectDescription($obj){ 114 protected function createObjectDescription($obj){
105 - $root = $this->objectDom->createElement($this->objTagName);  
106 - $root->setAttribute('xml:id',$this->id); 115 +
  116 + $root = $this->objectDom->createElement($this->objTagName);
  117 + $root->setAttribute('xml:id',$this->id);
107 118
108 foreach($obj as $key => $value) { 119 foreach($obj as $key => $value) {
109 - if ($key != 'id' && $key != 'leaf' && $key != 'nodeType') {  
110 - $node = $this->objectDom->createElement($key,htmlspecialchars($value));  
111 - $root -> appendChild($node);  
112 - } 120 + if ($key != 'id' && $key != 'leaf' && $key != 'nodeType') {
  121 + $node = $this->objectDom->createElement($key,htmlspecialchars($value));
  122 + $root -> appendChild($node);
  123 + }
113 } 124 }
114 -// add Optional Attributes if they are undefined  
115 - foreach ($this->optionalAttributes as $key => $value)  
116 - if ($root->getElementsByTagName($key)->length == 0) {  
117 - $node = $this->objectDom->createElement($key,htmlspecialchars($value));  
118 - $root -> appendChild($node);  
119 - } 125 + // add Optional Attributes if they are undefined
  126 + foreach ($this->optionalAttributes as $key => $value)
  127 + if ($root->getElementsByTagName($key)->length == 0) {
  128 + $node = $this->objectDom->createElement($key,htmlspecialchars($value));
  129 + $root -> appendChild($node);
  130 + }
120 131
121 - $this->objectDom->appendChild($root);  
122 - $this->objectDom->save($this->descFileName);  
123 - } 132 + $this->objectDom->appendChild($root);
  133 + $this->objectDom->save($this->descFileName);
  134 + }
  135 +
124 /* 136 /*
125 * Just Save Content XML 137 * Just Save Content XML
126 */ 138 */
127 - protected function saveContent() {  
128 - $this->contentDom->save($this->xmlName);  
129 - } 139 + protected function saveContent() {
  140 +
  141 + $this->contentDom->save($this->xmlName);
  142 + }
130 143
131 /* 144 /*
132 * Add Object to Content XML 145 * Add Object to Content XML
133 */ 146 */
134 - protected function addToContent($obj, $folder) { 147 + protected function addToContent($obj, $folder) {
135 148
136 - $folderToAdd = null; 149 + $folderToAdd = null;
137 150
138 $objList = $this->contentDom->getElementById($this->contentRootId); 151 $objList = $this->contentDom->getElementById($this->contentRootId);
139 - $newObj = $this->contentDom->createElement($this->objTagName);  
140 - $newObj->setAttribute('xml:id',$this->id);  
141 -// object to mapped array  
142 - $obj_arr = (array)$obj;  
143 - foreach ($this->attributes as $key => $value) {  
144 - $newObj->setAttribute($key, $obj_arr[$key]);  
145 - }  
146 - if ($folder != null)  
147 - $folderToAdd = $this->contentDom->getElementById($folder);  
148 -  
149 - if ($folderToAdd) $folderToAdd -> appendChild($newObj);  
150 - else $objList -> appendChild($newObj);  
151 - 152 + $newObj = $this->contentDom->createElement($this->objTagName);
  153 + $newObj->setAttribute('xml:id',$this->id);
  154 + // object to mapped array
  155 + $obj_arr = (array)$obj;
  156 + foreach ($this->attributes as $key => $value) {
  157 + $newObj->setAttribute($key, $obj_arr[$key]);
  158 + }
  159 + if ($folder != null)
  160 + $folderToAdd = $this->contentDom->getElementById($folder);
  161 +
  162 + if ($folderToAdd)
  163 + $folderToAdd -> appendChild($newObj);
  164 + else
  165 + $objList -> appendChild($newObj);
152 166
153 $this->saveContent(); 167 $this->saveContent();
154 - } 168 + }
155 169
156 /* 170 /*
157 -* Delete Object From Content XML 171 +* Delete Object From Content XML
158 */ 172 */
159 - protected function deleteFromContent($obj) {  
160 - $objList = $obj -> parentNode;// $this->contentDom->getElementById($this->contentRootId);  
161 - $objList -> removeChild($obj); 173 + protected function deleteFromContent($obj) {
  174 +
  175 + $objList = $obj -> parentNode; // $this->contentDom->getElementById($this->contentRootId);
  176 + $objList -> removeChild($obj);
162 $this->saveContent(); 177 $this->saveContent();
163 - } 178 + }
164 179
165 /* 180 /*
166 -* Create Folder 181 +* Create Folder
167 */ 182 */
168 - protected function createFolder($obj){  
169 - if ($this -> folderExistsByName($obj->name)) return array('error' => NAME_EXISTS);  
170 - $newFolder = $this->contentDom->createElement('folder');  
171 - $id = $obj->name."_".$this->objTagName;  
172 - $newFolder -> setAttribute('xml:id',$id);  
173 - $newFolder -> setAttribute('name',$obj->name);  
174 - $objList = $this->contentDom->getElementById($obj->parent);  
175 - $objList -> appendChild($newFolder);  
176 - $this -> saveContent(); 183 + protected function createFolder($obj){
  184 +
  185 + if ($this -> folderExistsByName($obj->name))
  186 + return array('error' => NAME_EXISTS);
  187 + $newFolder = $this->contentDom->createElement('folder');
  188 + $id = $obj->name."_".$this->objTagName;
  189 + $newFolder -> setAttribute('xml:id',$id);
  190 + $newFolder -> setAttribute('name',$obj->name);
  191 + $objList = $this->contentDom->getElementById($obj->parent);
  192 + $objList -> appendChild($newFolder);
  193 + $this -> saveContent();
  194 +
177 return array('id' => $id); 195 return array('id' => $id);
178 - } 196 + }
  197 +
179 /* 198 /*
180 * Get Folder of the object 199 * Get Folder of the object
181 */ 200 */
182 - protected function getObjectFolder($id) { 201 + protected function getObjectFolder($id) {
183 202
184 - if (!($obj = $this->objectExistsById($id))) return "NO_SUCH_ID";  
185 - if ($obj->parentNode->tagName == 'folder') return $obj->parentNode->getAttribute('xml:id'); 203 + if (!($obj = $this->objectExistsById($id)))
  204 + return "NO_SUCH_ID";
  205 + if ($obj->parentNode->tagName == 'folder')
  206 + return $obj->parentNode->getAttribute('xml:id');
  207 +
186 return null; 208 return null;
187 -  
188 - } 209 + }
189 210
190 protected function setAlias($chain) { 211 protected function setAlias($chain) {
191 212
@@ -195,9 +216,8 @@ @@ -195,9 +216,8 @@
195 foreach($listeAlias as $alias) { 216 foreach($listeAlias as $alias) {
196 $chain = $aliasMgr->substrParamAlias($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name")); 217 $chain = $aliasMgr->substrParamAlias($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name"));
197 } 218 }
198 -  
199 return $chain; 219 return $chain;
200 - } 220 + }
201 221
202 protected function resetAlias($chain) { 222 protected function resetAlias($chain) {
203 223
@@ -207,23 +227,23 @@ @@ -207,23 +227,23 @@
207 foreach($listeAlias as $alias) { 227 foreach($listeAlias as $alias) {
208 $chain = $aliasMgr->substrAliasParam($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name")); 228 $chain = $aliasMgr->substrAliasParam($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name"));
209 } 229 }
210 -  
211 return $chain; 230 return $chain;
212 } 231 }
213 232
214 protected function createDom() { 233 protected function createDom() {
215 234
216 $rootElement = $this->contentDom->createElement('ws'); 235 $rootElement = $this->contentDom->createElement('ws');
217 - foreach ($this->types as $type) {  
218 - $contentId = $type.'-treeRootNode';  
219 - $contentTag = $type.'List';  
220 - $typeElement = $this->contentDom->createElement($contentTag);  
221 - $typeElement->setAttribute('xml:id', $contentId);  
222 - $rootElement->appendChild($typeElement); 236 + foreach ($this->types as $type) {
  237 + $contentId = $type.'-treeRootNode';
  238 + $contentTag = $type.'List';
  239 + $typeElement = $this->contentDom->createElement($contentTag);
  240 + $typeElement->setAttribute('xml:id', $contentId);
  241 + $rootElement->appendChild($typeElement);
223 } 242 }
224 - $this->contentDom->appendChild($rootElement); 243 +
  244 + $this->contentDom->appendChild($rootElement);
225 $this->contentDom->save($this->xmlName); 245 $this->contentDom->save($this->xmlName);
226 - } 246 + }
227 247
228 248
229 /***************************************************************** 249 /*****************************************************************
@@ -234,104 +254,121 @@ @@ -234,104 +254,121 @@
234 * Create Parameter[TT...]/Folder 254 * Create Parameter[TT...]/Folder
235 * create object itself, add it to content DOM 255 * create object itself, add it to content DOM
236 */ 256 */
237 - function createObject($p, $folder){ 257 + function createObject($p, $folder){
238 258
239 - if ($p -> leaf) return $this->createParameter($p, $folder);  
240 - // else return $this->createFolder($p);  
241 -//TODO check if this is possible?  
242 - else return array('error' => 'createFolder should be called from RENAME'); 259 + if ($p -> leaf)
  260 + return $this->createParameter($p, $folder);
  261 + // else return $this->createFolder($p);
  262 + //TODO check if this is possible?
  263 + else
  264 + return array('error' => 'createFolder should be called from RENAME');
243 265
244 - } 266 + }
245 267
246 /* 268 /*
247 * Rename Parameter[TT...]/Folder 269 * Rename Parameter[TT...]/Folder
248 */ 270 */
249 - function renameObject($p){ 271 + function renameObject($p){
250 272
251 if (!($objToRename = $this -> objectExistsById($p->id))) { 273 if (!($objToRename = $this -> objectExistsById($p->id))) {
252 -// NO SUCH ID: leaf -> error;  
253 - if ($p->leaf) return array('error' => NO_SUCH_ID);  
254 -// NO SUCH ID: folder -> create  
255 - return $this -> createFolder($p);  
256 - }  
257 -// object was just DD in the tree : move tag in xml 274 + // NO SUCH ID: leaf -> error;
  275 + if ($p->leaf)
  276 + return array('error' => NO_SUCH_ID);
  277 + // NO SUCH ID: folder -> create
  278 + return $this -> createFolder($p);
  279 + }
  280 +
  281 + // object was just DD in the tree : move tag in xml
258 if ($p -> name == $p -> old_name) { 282 if ($p -> name == $p -> old_name) {
259 - if (!($parentNode = $this->contentDom->getElementById($p -> parent))) return array('error' => NO_SUCH_PARENT_ID);  
260 - $parentNode -> appendChild($objToRename);  
261 - $this->saveContent();  
262 - return array('id' => $p->id);  
263 - }  
264 -  
265 -// if ($this -> objectExistsByName($p->name, $this->objTagName)) return array('error' => NAME_EXISTS);  
266 -//TODO CHECK: With some PHP versions setAttribute ADD attribute  
267 - if ($objToRename->hasAttribute('name')) $objToRename->removeAttribute('name');  
268 - $objToRename->setAttribute('name',$p->name); 283 + if (!($parentNode = $this->contentDom->getElementById($p -> parent)))
  284 + return array('error' => NO_SUCH_PARENT_ID);
  285 + $parentNode -> appendChild($objToRename);
  286 + $this->saveContent();
  287 +
  288 + return array('id' => $p->id);
  289 + }
  290 +
  291 + //TODO CHECK: With some PHP versions setAttribute ADD attribute
  292 + if ($objToRename->hasAttribute('name'))
  293 + $objToRename->removeAttribute('name');
  294 +
  295 + $objToRename->setAttribute('name',$p->name);
  296 +
269 if (!$p->leaf) { 297 if (!$p->leaf) {
270 - $objToRename->removeAttribute('xml:id');  
271 - $objToRename->setAttribute('xml:id', $p->name.'_'.$this->objTagName);  
272 - } 298 + $objToRename->removeAttribute('xml:id');
  299 + $objToRename->setAttribute('xml:id', $p->name.'_'.$this->objTagName);
  300 + }
273 else 301 else
274 - $this -> renameInResource($p->name, $p->id); 302 + $this -> renameInResource($p->name, $p->id);
275 303
276 $this->saveContent(); 304 $this->saveContent();
  305 +
277 return array('id' => $p->id); 306 return array('id' => $p->id);
278 } 307 }
279 308
280 /* 309 /*
281 * Delete Parameter[TT...]/Folder 310 * Delete Parameter[TT...]/Folder
282 -* Delete object itself, delete from contentDOM, mark as undefined in depending objects 311 +* Delete object itself, delete from contentDOM, mark as undefined in depending objects
283 */ 312 */
284 - function deleteObject($p){  
285 -  
286 - if ($p->leaf) {  
287 -// if Parameter[TT...] - delete resources first  
288 - $isDeleted = $this->deleteParameter($p->id);  
289 - if (!($objToDelete = $this -> objectExistsById($p->id))) return array('error' => NO_SUCH_ID);  
290 - }  
291 - else {  
292 - if (!($objToDelete = $this -> objectExistsById($p->id))) return array('error' => NO_SUCH_ID); 313 + function deleteObject($p){
  314 +
  315 + if ($p->leaf) {
  316 + // if Parameter[TT...] - delete resources first
  317 + $isDeleted = $this->deleteParameter($p->id);
  318 + if (!($objToDelete = $this -> objectExistsById($p->id)))
  319 + return array('error' => NO_SUCH_ID);
  320 + }
  321 + else {
  322 + if (!($objToDelete = $this -> objectExistsById($p->id)))
  323 + return array('error' => NO_SUCH_ID);
293 $folderToDelete = $objToDelete->getElementsByTagName($this->objTagName); 324 $folderToDelete = $objToDelete->getElementsByTagName($this->objTagName);
294 -// delete all parameters[TT..] in folder(s) 325 + // delete all parameters[TT..] in folder(s)
295 foreach ($folderToDelete as $obj) { 326 foreach ($folderToDelete as $obj) {
296 - $id = $obj->getAttribute('xml:id');  
297 - $this->deleteParameter($id);  
298 - }  
299 - }  
300 - $this -> deleteFromContent($objToDelete);  
301 -  
302 - if ($isDeleted) return array('id' => $p->id, 'maskDeleted' => true);  
303 - else return array('id' => $p->id);  
304 - } 327 + $id = $obj->getAttribute('xml:id');
  328 + $this->deleteParameter($id);
  329 + }
  330 + }
  331 +
  332 + $this -> deleteFromContent($objToDelete);
  333 +
  334 + if ($isDeleted)
  335 + return array('id' => $p->id, 'maskDeleted' => true);
  336 + else
  337 + return array('id' => $p->id);
  338 + }
305 339
306 /* 340 /*
307 * Modify Parameter[TT...]/Folder 341 * Modify Parameter[TT...]/Folder
308 -*/  
309 -  
310 - function modifyObject($p){  
311 - if ($this->renameOnly($p)) { 342 +*/
  343 + function modifyObject($p){
  344 +
  345 + if ($this->renameOnly($p)) {
312 $p->leaf = 1; 346 $p->leaf = 1;
313 - return $this->renameObject($p);  
314 - }  
315 - $folder = $this->getObjectFolder($p->id);  
316 - $this->deleteObject($p);  
317 - return  
318 - $this->createObject($p, $folder);  
319 - } 347 + return $this->renameObject($p);
  348 + }
  349 +
  350 + $folder = $this->getObjectFolder($p->id);
  351 + $this->deleteObject($p);
  352 +
  353 + return $this->createObject($p, $folder);
  354 + }
320 355
321 356
322 - function validNameObject($p){  
323 - if (!isset($p->name) || ($p->name == ""))  
324 - return array('valid' => false, 'error' => 'Name is required');  
325 - if ($p->leaf)  
326 - $alreadyExist = $this -> objectExistsByName($p->name, $this->objTagName);  
327 - else  
328 - $alreadyExist = $this -> folderExistsByName($p->name);  
329 - if ($alreadyExist)  
330 - return array('valid' => false, 'error' => 'This name already exists in this subtree!');  
331 - return array('valid' => true);  
332 - } 357 + function validNameObject($p){
  358 +
  359 + if (!isset($p->name) || ($p->name == ""))
  360 + return array('valid' => false, 'error' => 'Name is required');
  361 + if ($p->leaf)
  362 + $alreadyExist = $this -> objectExistsByName($p->name, $this->objTagName);
  363 + else
  364 + $alreadyExist = $this -> folderExistsByName($p->name);
  365 + if ($alreadyExist)
  366 + return array('valid' => false, 'error' => 'This name already exists in this subtree!');
  367 +
  368 + return array('valid' => true);
  369 + }
333 370
334 - function getObject($id){} 371 + function getObject($id){}
335 372
336 } 373 }
337 ?> 374 ?>
php/classes/TimeTableMgr.php
@@ -54,9 +54,9 @@ class TimeTableMgr extends AmdaObjectMgr @@ -54,9 +54,9 @@ class TimeTableMgr extends AmdaObjectMgr
54 $this->contentDom->save($this->xmlName); 54 $this->contentDom->save($this->xmlName);
55 } 55 }
56 56
57 - /*  
58 - * rename Time Table in id.xml  
59 - */ 57 +/*
  58 +* rename Time Table in id.xml
  59 +*/
60 protected function renameInResource($name, $id) 60 protected function renameInResource($name, $id)
61 { 61 {
62 if (!file_exists(USERTTDIR.$id.'.xml')) return false; 62 if (!file_exists(USERTTDIR.$id.'.xml')) return false;
@@ -150,65 +150,9 @@ class TimeTableMgr extends AmdaObjectMgr @@ -150,65 +150,9 @@ class TimeTableMgr extends AmdaObjectMgr
150 return $inter; 150 return $inter;
151 } 151 }
152 152
153 - /*  
154 - * For TT download : file format in text  
155 - */  
156 - protected function xsl2text($file,$format)  
157 - {  
158 - define("format", $format);  
159 - $xslt = new XSLTProcessor();  
160 -  
161 - // add PHP functions to XSLT functions  
162 - $xslt -> registerPHPFunctions();  
163 -  
164 - // Load Time table  
165 - $xml = new domDocument("1.0");  
166 - $xml->load($file);  
167 -  
168 - // Load XSL file  
169 - $xsl = new domDocument("1.0");  
170 - if ($format == "Y-m-dTH:i:s") $xslName = "xml2iso.xsl";  
171 - else $xslName = "xml2all.xsl";  
172 - $xsl->load(XMLPATH.$xslName);  
173 -  
174 - // Import XSL and write output file in text format  
175 - $xslt -> importStylesheet($xsl);  
176 - $filename = $xml->getElementsByTagName('name')->item(0)->nodeValue.".txt";  
177 - $output=fopen(USERWORKINGDIR.$filename, "w");  
178 - fwrite($output, trim($xslt -> transformToDoc($xml)->firstChild->wholeText));  
179 - fclose($output);  
180 -  
181 - return USERWORKINGDIR.$filename;  
182 - }  
183 -  
184 - /*  
185 - * For TT download : file format in vot  
186 - */  
187 - public function xsl2vot($file,$format)  
188 - {  
189 - $xslt = new XSLTProcessor();  
190 -  
191 - // Load Time table  
192 - $xml = new domDocument("1.0");  
193 - $xml->load($file);  
194 -  
195 - // Load XSL file  
196 - $xsl = new domDocument("1.0");  
197 - $xsl->load(XMLPATH.'xml2vot.xsl');  
198 -  
199 - // Import XSL and write output file in vot format  
200 - $xslt -> importStylesheet($xsl);  
201 - $vot = new domDocument("1.0");  
202 - $vot -> loadXML($xslt -> transformToXML($xml));  
203 - $filename = $xml->getElementsByTagName('name')->item(0)->nodeValue.".xml";  
204 - $vot -> save(USERWORKINGDIR.$filename);  
205 -  
206 - return USERWORKINGDIR.$filename;  
207 - }  
208 -  
209 - /*  
210 - * Uploaded text file => convert to array  
211 - */ 153 +/*
  154 +* Uploaded text file => convert to array
  155 +*/
212 protected function text2amda($tmp_file, $onlyDescription = false) 156 protected function text2amda($tmp_file, $onlyDescription = false)
213 { 157 {
214 $suffix = explode('.', basename($tmp_file)); 158 $suffix = explode('.', basename($tmp_file));
@@ -828,7 +772,7 @@ class TimeTableMgr extends AmdaObjectMgr @@ -828,7 +772,7 @@ class TimeTableMgr extends AmdaObjectMgr
828 chmod($dst_file_path, 0775); 772 chmod($dst_file_path, 0775);
829 773
830 return TRUE; 774 return TRUE;
831 - } 775 + }
832 776
833 } 777 }
834 ?> 778 ?>