Blame view

js/app/models/InteractiveNode.js 24.1 KB
16035364   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
11
/** 
 * Project  : AMDA-NG4
 * Name     : InteractiveNode.js
 * @class   amdaModel.InteractiveNode
 * @extends amdaModel.AmdaNode
 * @brief   Generic Model of Interactive Node
 * @author  CDA
 * @version $Id: InteractiveNode.js 2683 2014-12-02 10:58:53Z elena $
 */

Ext.define('amdaModel.InteractiveNode', {
eec153c1   Elena.Budnik   formattage, netto...
12
	extend: 'amdaModel.AmdaNode',
16035364   Benjamin Renard   First commit
13

eec153c1   Elena.Budnik   formattage, netto...
14
15
16
	requires: [
		'amdaPlotObj.PlotRequestObject'
	],
c00f7d82   Benjamin Renard   Add another missi...
17
    
eec153c1   Elena.Budnik   formattage, netto...
18
19
20
21
22
23
24
25
	fields: [        
		{name: 'contextNode', type: 'amdaModel.AmdaNode', persist: false},
		{name: 'objectDataModel', type: 'string', persist: false},       
		{name: 'object', type: 'object', persist: false},
		{name: 'moduleId', type: 'string', persist: false},
		{name: 'filtered', type: 'boolean', defaultValue: false, persist: false},
		{name: 'disable', type: 'boolean', defaultValue: false, persist: false}
	],
16035364   Benjamin Renard   First commit
26

eec153c1   Elena.Budnik   formattage, netto...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
	statics: {
		preloadNodes : function(node,onready)
		{
			var me = this;
			
			var nodesToLoad = new Array();
			nodesToLoad.push(node);
			this.preloadTreeNode(node, nodesToLoad, function (node)
				{
					var isFinish = true;
					nodesToLoad.forEach(function (element, index, array)
					{
							if (!element.isLoaded())
								isFinish = false;
					});					
					if (isFinish && onready)
						onready.call();
				});
		},
16035364   Benjamin Renard   First commit
46

eec153c1   Elena.Budnik   formattage, netto...
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
		preloadTreeNode : function(node, nodesToLoad, onloaded)
		{
			var me = this;
			
			if (node.isLoaded())
			{
				node.eachChild(function(n)
					{		      
						if (!n.isLoaded() && !n.isLeaf())
						{
							nodesToLoad.push(n);
							me.preloadTreeNode(n,nodesToLoad,onloaded);
						}
					});
					
					if (onloaded)
						onloaded.call(me,node);
					return;
			}	
			
			node.store.load({
				node : node, 
				callback : function(records, operation, successful)
					{
						records.forEach(function (record)
							{                                                       
								if (!record.isLoaded() && !record.isLeaf())
									{
										nodesToLoad.push(record);
										me.preloadTreeNode(record,nodesToLoad,onloaded);
									}
							});
						if (onloaded)
							onloaded.call(me,node);
					}
			});
		}
	},
16035364   Benjamin Renard   First commit
85
    
eec153c1   Elena.Budnik   formattage, netto...
86
87
88
89
90
91
92
93
94
95
96
97
	constructor : function(config)
	{
		this.callParent(arguments); 
		this.set('nodeType',this.self.nodeType);		
		this.set('ownerTreeId',amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);	 
		// if id of this node have root category suffix		
		if (Ext.util.Format.substr(this.get('id'), -(amdaUI.ExplorerUI.CAT_SUFFIX.length), this.get('id').length) === amdaUI.ExplorerUI.CAT_SUFFIX)
		{
		// set the expanded property to true
			this.set('expanded',true);
		}        
	},
16035364   Benjamin Renard   First commit
98
    
eec153c1   Elena.Budnik   formattage, netto...
99
100
101
102
103
104
105
/**
* this method is overriden into ExecutableNode to return true
*/
	isExecutable: function()
	{
		return false;
	},
16035364   Benjamin Renard   First commit
106

eec153c1   Elena.Budnik   formattage, netto...
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
* open Module with THIS NODE
*/
	editInModule : function (contextNode, onReady) 
	{
		// set the contextNode of this node
		this.set('contextNode',contextNode);
		// parameter module
		var me = this;
		myDesktopApp.getLoadedModule(this.get('moduleId'),true, function (module) {
		// If the node to edit is not already linked to this module
			if (module.getLinkedNode() != me) 
			{
				// set relative node into parameter Module
				module.setLinkedNode(me);	 
				if (contextNode==null) 
				{
					// set the root node as contextNode
					contextNode = me.getRootNode();
				}       	 
				module.setContextNode(contextNode); 
							
			} else if (module.getLinkedNode() != null){	
			//TODO the node to edit is already edited
				// myDesktopApp.warningMsg('This object is  being edited');
				//Sol1: msg alert: "warning this node is already edited! If you want to get the original, please press the 'reset' button"->'OK'
				//Sol2: msg with user choice: "warning this node is already edited! Would you confirm this action and lost your modification?"->'Confirm','Cancel'
			}
			// Opening parameter window     
			module.createWindow(onReady);  
		});				
	},
16035364   Benjamin Renard   First commit
139

eec153c1   Elena.Budnik   formattage, netto...
140
141
142
143
144
145
146
147
/**
* Method to rename the workspace node
*/
	rename: function(value,callBackFn) 
	{ 		 
		var dataToSend = {id : this.get('id'), old_name: this.modified.text, name: value,  parent : this.parentNode.get('id'), leaf: this.isLeaf(), nodeType: this.get('nodeType')};
		AmdaAction.renameObject(dataToSend, callBackFn);		 
	},
16035364   Benjamin Renard   First commit
148
    
eec153c1   Elena.Budnik   formattage, netto...
149
150
151
152
153
154
155
156
/**
* Method to rename the workspace node when D&D
*/
	renameDD: function(parentId, callBackFn) 
	{ 
		var dataToSend = {id : this.get('id'), old_name: this.get('name'), name: this.get('name'), parent : parentId, leaf: this.isLeaf(), nodeType: this.get('nodeType')};
		AmdaAction.renameObject(dataToSend, callBackFn);
	},
16035364   Benjamin Renard   First commit
157
    
eec153c1   Elena.Budnik   formattage, netto...
158
159
160
161
162
163
164
165
166
167
/**
* validation method on name (used in module forms)
* @param name the name to validate
* @returns 
*/
	isValidName : function(name, callBackFn)
	{
		var dataToSend = {name: name, nodeType: this.get('nodeType'), leaf: this.isLeaf()};
		AmdaAction.validNameObject(dataToSend, callBackFn);    	
	},
16035364   Benjamin Renard   First commit
168

eec153c1   Elena.Budnik   formattage, netto...
169
170
171
172
173
174
175
/**
* Method to persist modifications of an AmdaObject by Server side and update the workspace
* node linked to a Module
*/
	update : function(opt)
	{        
		AmdaAction.modifyObject(this.get('object').getJsonValues(true), function(res,e){
16035364   Benjamin Renard   First commit
176
            
eec153c1   Elena.Budnik   formattage, netto...
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
			if(e.status) {
				if (res.id) {              
					if (!this.get('contextNode')) {
						// set the root node of 'Derived Parameters' tree as contextNode
						this.set('contextNode',this.getRootNode());
					}
					this.get('contextNode').expand(false,false);
					this.myGetOwnerTree().getSelectionModel().select(this);
					
					if (opt)
					{
						var scope = opt.scope ? opt.scope : this;
						if (opt.callback)
							opt.callback.call(scope,'update');
					}
					
					Ext.Msg.alert('Complete', 'Object '+this.get('object').get('name')+' has been modified');
					// fix the modifications for object
					this.get('object').commit();
					
					if (res.info) {
						this.set('info',res.info);
					} 
					
					if (this.get('nodeType') == 'myDataParam') {
						if (res.isSpectra) {
							this.set('iconCls', 'icon-spectra');
						} 
						else { 
							if (res.size > 1) this.set('iconCls', 'icon-unknowntype');
						}
					}
					
					// update my data on possibble mask change		    
					if (res.updateMyData) {
						this.updateMyData();
						this.updateMask(res.mask);
					}
					// reload object into the view of corresponding Module
					var me = this;
					myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) {
						module.getUiContent().setObject(me.get('object'));
					});
				}
				else {
					//TODO proper error message handling
					// error code from server; but e.status==true                   
					// revert all modifications since last load or commit
					this.get('object').reject();
					myDesktopApp.errorMsg(res.error);
				}
			}
			else {
				// revert all modifications since last load or commit
				this.get('object').reject();
				myDesktopApp.errorMsg(e.message);   
			}
		},this);
	},
16035364   Benjamin Renard   First commit
236

eec153c1   Elena.Budnik   formattage, netto...
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
/**
* Method to create a new AmdaObject by server side and create the workspace node linked to a Module
* under its contextNode or the root node corresponding to this nodeType category
*/
	create : function(opt) 
	{
		if (!this.get('contextNode') || (this.get('contextNode').data.id == 'sharedtimeTable-treeRootNode') || (this.get('contextNode').data.id == 'sharedcatalog-treeRootNode')) {
			// set the root node of 'Derived Parameters' tree as contextNode
			this.set('contextNode',this.getRootNode());
		}        
		// call the Ext.Direct method to create parameter 
		AmdaAction.createObject(this.get('object').getJsonValues(false), this.get('contextNode').get('id'), function(res,e){          
			//success
			if(e.status) 
			{                
				// if correct response received
				if (res.id) {   //if (res.id || res.error == 'NAME_EXISTS') {
					// 'save as' case ; delete old node if it exists
					if (this.toRename) 
					{
						this.toRename	= false;  
						var myRoot = this.getRootNode();
						// search the same named node to override
						var updateNode = myRoot.findChild('text',this.get('object').get('name'),true);
						// destroy the overrided node
						updateNode.parentNode.removeChild(updateNode);//TODO ??if destroy==true => too many recursions....
						updateNode.destroy();			 
					} 
					// set text of this node
					this.set('text',this.get('object').get('name'));
					//set id of this node
					this.set('id',res.id);
					this.internalId = res.id;
					// set id of node's object
					this.get('object').set('id',res.id);
16035364   Benjamin Renard   First commit
272
                    
eec153c1   Elena.Budnik   formattage, netto...
273
274
275
276
					if (res.created){
						// set the created date
						this.get('object').set('created',res.created);
					}
16035364   Benjamin Renard   First commit
277
                    
eec153c1   Elena.Budnik   formattage, netto...
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
					if (res.info){
						// set the tooltip
						this.set('info',res.info);
						//set globalStart & global Stop to be used for time selection
						if (this.get('nodeType') == 'myDataParam')
						{
							var startStop = res.info.split("<br/>"); 
							var globalStart = startStop[1].substr(0,19);
							var globalStop = startStop[1].substr(20);
							
							this.set('globalStart', globalStart);
							this.set('globalStop', globalStop);
							
							if (res.mask)
								this.set('linkedMask', res.mask);
							if (res.size) 
								this.set('size', res.size);
							
							if (res.isSpectra) {
								this.set('iconCls', 'icon-spectra');
							} 
							else { 
								if (res.size > 1) 
									this.set('iconCls', 'icon-unknowntype');
							}
						}
					}                                                         
					//TODO do we need this commission ???
					// fix the modifications for object
					this.get('object').commit(); 
					// if ownerTree panel is not active
					if (this.myGetOwnerTree().ownerCt.getActiveTab()!==this.myGetOwnerTree())
					{
						// set ownerTree panel as the active tab - to enable selection of this node his ownerTree must have a view
						this.myGetOwnerTree().ownerCt.setActiveTab(this.myGetOwnerTree());                        
					}
16035364   Benjamin Renard   First commit
314
                    
eec153c1   Elena.Budnik   formattage, netto...
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
					Ext.Msg.alert('Complete', 'New object '+this.get('object').get('name')+' has been created'); 
					// expand the contextNode
					this.get('contextNode').expand(false, function()
					{
						if (!this.get('contextNode').findChild('text',this.get('text'))) {
							// create node in tree as child of contextNode                 
							this.get('contextNode').appendChild(this);			                  				
						}
						// select the new node 
						this.myGetOwnerTree().getSelectionModel().select(this);
						if (opt)
						{
							var scope = opt.scope ? opt.scope : this;
							if (opt.callback)
									opt.callback.call(scope,'create');
						}                                                
					}, this);
16035364   Benjamin Renard   First commit
332
        
eec153c1   Elena.Budnik   formattage, netto...
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
					// myDataParamNode - update MyData subtree 
					//TODO put this in mydataparamnode
					if (res.updateMyData) {
						this.updateMyData();
						this.updateMask(res.mask);
					} 
				
				}               
				// error code from server; but e.status==true
				else {
					myDesktopApp.errorMsg(res.error);                         
					// revert all modifications since last load or commit
					this.get('object').reject();
				}
			}
			// failure: e.status == false
			else {
				// revert all modifications since last load or commit
				this.get('object').reject();
				//TODO: this.destroy();
				myDesktopApp.errorMsg(e.message);
			}
		},this);         
	},
16035364   Benjamin Renard   First commit
357

eec153c1   Elena.Budnik   formattage, netto...
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
/**
* Generic part of Context Menu
*  
*/ 
	allMenuItems : function() {
		var src = this.self.objectName;
		var menuItems =
		[ {
			fnId : 'root-createLeaf',
			text : 'Create '+ src
		}, {
			fnId : 'root-createDir',
			text : 'Create Folder'
		}, {
			fnId : 'dire-createLeaf',
			text : 'Create ' + src
		}, {
			fnId : 'dire-createDir',
			text : 'Create Folder'
		}, {
			fnId : 'dire-renameNode',
			text : 'Rename Folder'
		}, {
			fnId : 'dire-deleteNode',
			text : 'Delete Folder'
		}, {
			fnId : 'leaf-editLeaf',
			text : 'Edit ' + src
		}, {
			fnId : 'leaf-renameNode',
			text : 'Rename ' + src
		}, {
			fnId : 'leaf-deleteNode',
			text : 'Delete '+ src
		} ];
		return menuItems;
	},
16035364   Benjamin Renard   First commit
395

eec153c1   Elena.Budnik   formattage, netto...
396
397
398
399
400
401
402
403
404
	allMenuMultiItems : function() {
		var menuMulti = [
		{
			fnId : 'mult-deleteMulti',
			text : 'Delete selected ' + this.self.objectName + 's'
		}
		];
		return menuMulti;
	},
d18b535d   elena   catalog draft + c...
405

eec153c1   Elena.Budnik   formattage, netto...
406
407
408
409
410
411
412
	getAllContextMenuItems: function(){  
		return  this.allMenuItems();       
	},

	getMultiContextMenuItems: function(){
		return this.allMenuMultiItems();
	},
d18b535d   elena   catalog draft + c...
413
    
eec153c1   Elena.Budnik   formattage, netto...
414
415
416
417
418
419
420
/**
* default implementation
* no menu display if there's no override of this function
*/
	getMultiContextMenuItems: function(){
		return null;
	},
16035364   Benjamin Renard   First commit
421
    
eec153c1   Elena.Budnik   formattage, netto...
422
423
424
425
426
427
428
/**
*  Context Menu Actions
*  
*/ 
	onMenuItemClick : function(menu,item,event) {
		// fnId parsing :
		var fnId = Ext.util.Format.substr(item.fnId, 5, item.fnId.length);
16035364   Benjamin Renard   First commit
429

eec153c1   Elena.Budnik   formattage, netto...
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
		switch (fnId) {
			case 'deleteNode':
				this.deleteNode(); 
				break;
			case 'createDir':
				this.createDir(); 
				break;
			case 'createLeaf':
				this.createLeaf(this);
				break;                    
			case 'renameNode':
				this.renameNode(); 
				break;
			case 'editLeaf':   
				this.editLeaf(); 
				break;        
			case 'deleteMulti':
				this.deleteMulti();
				break;            
			case 'plotParam':                        
				this.createPlot(this);                
				break;
			case 'downParam':                      
				this.createDownload(this);                
				break;   
			default:
				break;
		} // switch end
	},
   
	getTimeFromNode: function(node)  {
		
		var startString = new String(node.get('globalStart'));
		var stopString = new String(node.get('globalStop'));
		var startDate =  new Date(startString.replace(/\-/g,'\/').replace(/[T|Z]/g,' '));
		var stopDate =  new Date(stopString.replace(/\-/g,'\/').replace(/[T|Z]/g,' '));
		if (stopDate -  startDate  > 86400000 ) {
			var startTime = Ext.Date.add(stopDate, Ext.Date.DAY, -1);		 
			var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s')};
		} 
		else {
			var timeObj = {start:  node.get('globalStart'), stop:  node.get('globalStop')};
		}
		return timeObj;			
	},
16035364   Benjamin Renard   First commit
475

eec153c1   Elena.Budnik   formattage, netto...
476
477
478
479
480
481
482
483
484
485
	createPlot: function(node) 
	{       			     
		if (node.get('disable')) return;			
		myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id, true, function (module) {
			if (!myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.plot.id)) {               
				var request = Ext.create(amdaPlotObj.PlotRequestObject.$className);
				var newNode = Ext.create(amdaModel.PlotNode.$className, { object : request });                 
				// edit newNode into Plot Module with node as contextNode
				newNode.editInModule();
				if(node.get('globalStart') != 'depending on mission' && ( node.get('nodeType') == 'localParam' ||
bf74fc2d   Elena.Budnik   IMPEX
486
					node.get('nodeType') == 'myDataParam' || node.get('nodeType') == 'remoteSimuParam')) {                                                                            
eec153c1   Elena.Budnik   formattage, netto...
487
488
489
490
491
492
					module.getUiContent().setTimeFromData(node.getTimeFromNode(node)); 
				}
			}         
			module.getUiContent().addParameter(node);  
		});
	},
16035364   Benjamin Renard   First commit
493
    
eec153c1   Elena.Budnik   formattage, netto...
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
	createDownload: function(node) 
	{    		
		if (node.get('disable')) return;
		
		if (node.get('notyet')) {
			myDesktopApp.warningMsg('Sorry! access to this parameter is restricted.');        
			return;
		}
		
		myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id, true, function (module) {
			if (!myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.download.id)) {               
				var request = Ext.create(amdaModel.Download.$className);
				amdaModel.DownloadNode.set('object',request);              
				// singleton!
				amdaModel.DownloadNode.editInModule();
bf74fc2d   Elena.Budnik   IMPEX
509
510
				if (node.get('globalStart') != 'depending on mission' && ( node.get('nodeType') == 'localParam' ||
					node.get('nodeType') == 'myDataParam' || node.get('nodeType') == 'remoteSimuParam')) {
eec153c1   Elena.Budnik   formattage, netto...
511
512
513
					module.getUiContent().setTimeFromData(node.getTimeFromNode(node)); 
				}
			}         
eec153c1   Elena.Budnik   formattage, netto...
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
				var paramName; 
				var components = null;
				switch (node.$className) {
					case 'amdaModel.AliasNode'        :                        
						paramName = "#"+node.get('text');
						break;
					case 'amdaModel.DerivedParamNode' :                         
						paramName = "ws_"+node.get('text');
						break;
					case 'amdaModel.MyDataParamNode' :
						paramName = 'wsd_'+node.get('text');                                 
						break;                        
					default : 
						if (node.get('alias')!= "" )
							paramName = "#"+node.get('alias');
						else 
							paramName = node.get('id');
				}				
9fad5834   Elena.Budnik   redmine #4795
532
533
534
535
536
537
538
539
540
541
542
// 				var component_info = node.get('component_info');
// 				if (component_info && component_info.parentId) {
// 					//It's a component
// 					paramName = component_info.parentId;
// 					components = [];
// 					if (component_info.index1)
// 						components['index1'] = component_info.index1;
// 					if (component_info.index2)
// 						components['index2'] = component_info.index2;
// 				}		
				module.addParam(paramName,true,node.get('needsArgs'),components);  
eec153c1   Elena.Budnik   formattage, netto...
543
544
545
546
547
548
549
550
551
552
553
554
555
556
		}); 
	},
	
	deleteNode: function() {		   
			// if the target is a directory
			if (!this.isLeaf()) {
				// determine if this directory is empty before launching the delete confirmation method
				this.isNotEmptyDir(this.confirmDirectoryDeletion);                        
			// else (the target is a leaf)
			} else {
				// no confirmation prompt for leaves
				this.confirmDirectoryDeletion(false);
			}
	},
16035364   Benjamin Renard   First commit
557
    
eec153c1   Elena.Budnik   formattage, netto...
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
/**
* this method return if node has Childs even if it was not already loaded
*/
	isNotEmptyDir : function(callbackFn) {
		var hasChilds;
		// if node not already loaded
		if (!this.isLoaded()){
			// call directFunction to load this node 
			AmdaAction.getTree({node:this.get('id'),nodeType:this.get('nodeType')},function(res,e){
				callbackFn.call(this,res.length>0?true:false);
			},this);
		} 
		else {
			callbackFn.call(this,this.hasChildNodes());
		}
	},
16035364   Benjamin Renard   First commit
574
    
eec153c1   Elena.Budnik   formattage, netto...
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
/**
* this method is used to display a confirmation message
*/
	confirmDirectoryDeletion : function(isNotEmptyDir)
	{        
		// if this is a non-empty directory
		if (isNotEmptyDir) {
			// Prompt to the user if he also wants to delete its content
			Ext.Msg.confirm('non-empty directory', 'The target is a non-empty directory!<br>Do you want to continue and also delete its content?', function(btn, text){
				if (btn == 'yes'){
					// do delete
					this.realDelete();
				}
			},this);
		} 
		else {
			this.realDelete();
		}        
	},
16035364   Benjamin Renard   First commit
594
    
eec153c1   Elena.Budnik   formattage, netto...
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
/*
*    Call the extDirect method to delete parameter
*    Callback method needed to execute node deletion in tree if id in result or to show error msg  
*/
	realDelete : function()
	{                       
		AmdaAction.deleteObject({id: this.get('id'), leaf: this.isLeaf(), nodeType: this.get('nodeType')}, function(res,e){ 
			//TODO proper errors handling                       
			// node deletion in tree 
			if (res) {  // if success
				if (res.id) {
					//Ext.Msg.show({title:'Warning', msg: 'Requests with parameter '+node.data.text+' are deleted', icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
					if (this.parentNode) {
						if (this.isLeaf()){
							var moduleId = this.get('moduleId');
							// if really interactive node
							if (moduleId) {
								var me = this;
								myDesktopApp.getLoadedModule(moduleId, true, function (module) {
									var editedNode = module.getLinkedNode();
								// file node is not linked directly to the module				    
								var isThisFile = false;
							
								if (editedNode && editedNode.$className == 'amdaModel.MyDataParamNode')                                        
									if (editedNode.get('fileObject').get('fileName') == me.get('text'))
										isThisFile = true;  
16035364   Benjamin Renard   First commit
621
                                        
eec153c1   Elena.Budnik   formattage, netto...
622
623
624
625
626
627
628
								if (me.$className == 'amdaModel.DerivedParamNode')
								{
									var obj = {
										paramId : 'ws_'+me.get('text')
									};
									AmdaAction.compilParamDelete(obj);
								}
a0b3d64e   Benjamin Renard   Derived parameter...
629
                                        	
eec153c1   Elena.Budnik   formattage, netto...
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
								if (editedNode === me || isThisFile){
									var newNode = Ext.ModelManager.create({leaf : true}, me.$className);
									// several tabs could be connected to one node
									if (moduleId === myDesktopApp.dynamicModules.plot.id) {
										var linkedNodes = module.linkedNodes;
																																		
										if (linkedNodes) {
											linkedNodes.each(function(key, value){						      
												if (value === me) {	 
													linkedNodes.replace(key,newNode);
													var tabPanel = module.getUiContent().tabPanel.items.getByKey(key);
													tabPanel.setObject(Ext.create(amdaModel.Plot.$className, {}));						 
												}	
											}, me);
										}					  					 	
									} 
									newNode.editInModule();
								}
								});				                                        
							}
						}                    
						//update mask info in myData              
						if (res.maskDesc && !res.maskDeleted) {
							this.parentNode.set('info', res.maskDesc);
							this.updateMyDataParam(res.mask, res.maskDesc);
						}                         
						this.remove();                       
					}
					//TODO Several special node-dependent actions - to move to node functions..                   
					// nodes of another nodeType to be deleted as they depend on deleted node                     
					if (res.params) {
						this.deleteDependence(res.params);
						//TODO reset
					}                     
					// mask was deleted or updated - to update mydata tree		    
					if (res.maskDeleted) {
						this.updateMyData(); 
					}                       
				}
				else {
					myDesktopApp.warningMsg(res.error);  
				}
			}
			else {
				myDesktopApp.errorMsg(e.message);   
			}
		}, this);
	},
16035364   Benjamin Renard   First commit
678

eec153c1   Elena.Budnik   formattage, netto...
679
680
681
682
683
684
685
686
687
688
689
/*
*  Delete musti selection
*/
	deleteMulti: function()
	{
		var selection = this.myGetOwnerTree().getSelectionModel().selected.items;
		alert(selection.length +' to delete!');
		Ext.Array.each(selection,function(item,index,allItems){
			item.deleteNode();
		})
	},
16035364   Benjamin Renard   First commit
690
    
eec153c1   Elena.Budnik   formattage, netto...
691
692
693
694
695
696
697
698
699
700
701
702
703
704
/*
*  Create Folder
*/
	createDir: function() {
		var me = this;
		amdaModel.InteractiveNode.preloadNodes(this.getRootNode(),
			function()
			{
				var newNode = Ext.create(me.$className,
				{
					leaf : false, nodeType : me.get('nodeType'),
					text : amdaModel.AmdaNode.NEW_DIR_NAME,
					children : []
				});
16035364   Benjamin Renard   First commit
705

eec153c1   Elena.Budnik   formattage, netto...
706
707
708
709
710
				// insert the new node as a child of node                    
				newNode = me.insertChild(0, newNode);
				// start text edition on this new directory node
				me.expand(false);
				newNode.expand(false);
16035364   Benjamin Renard   First commit
711

eec153c1   Elena.Budnik   formattage, netto...
712
713
714
715
716
717
				// select the new node
				me.myGetOwnerTree().getSelectionModel().select(newNode);
				// call the renameNode method for this new node
				newNode.renameNode();
			});
	},
16035364   Benjamin Renard   First commit
718
    
eec153c1   Elena.Budnik   formattage, netto...
719
720
721
722
723
724
/*
*  
*/
	createLeaf: function(contextNode) {
		// create new node with the same type than the contextNode
		var newNode = Ext.create(contextNode.$className, {leaf : true});
16035364   Benjamin Renard   First commit
725

eec153c1   Elena.Budnik   formattage, netto...
726
727
728
729
730
731
732
733
		// load the rootNode and recursively all its child nodes
		amdaModel.InteractiveNode.preloadNodes(contextNode.getRootNode(),
			function()
			{
				// edit newNode into Parameter Module with node as contextNode
				newNode.editInModule(contextNode);
			});
	},
16035364   Benjamin Renard   First commit
734

eec153c1   Elena.Budnik   formattage, netto...
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
	renameNode: function()
	{	
		if (this.myGetOwnerTree())
		{			
			// load the rootNode and recursively all its child nodes if not already loaded
			var me = this;
			amdaModel.InteractiveNode.preloadNodes(this.getRootNode(),
				function()
				{
					// fire the edition event on tree
					me.myGetOwnerTree().fireEvent('edition',me.myGetOwnerTree().view, me.myGetOwnerTree().getSelectionModel().selected.items[0]);
				});		
		}
		else
		{
			myDesktopApp.errorMsg('tree is undefined');
		}
	},
16035364   Benjamin Renard   First commit
753

eec153c1   Elena.Budnik   formattage, netto...
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
/*
*       load the rootNode and recursively all its child nodes
*       to know all names of DerivedParameters
*/
	editLeaf: function(onReady) 
	{ 		
		var me = this;
		amdaModel.InteractiveNode.preloadNodes(this.getRootNode(),
		function()
		{
			if (me.get('object')) 
			{
				// launch edition of parameter into parameter module
				me.editInModule(null, onReady);
			}
			else
			{
				// call the ext method to get the details of parameter
				// the edition of real parameter is done into callback method getObjectCallback            
				AmdaAction.getObject(me.get('id'), me.get('nodeType'), me.getObjectCallback, me);
			}
		});		
	},
16035364   Benjamin Renard   First commit
777

eec153c1   Elena.Budnik   formattage, netto...
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
/*
* 
*/
	getObjectCallback : function(result,remoteEvent)
	{
		var t = remoteEvent.getTransaction();
		
		if (result) {  
			var paramObj = Ext.create(this.get('objectDataModel'), result);
			// set parameter into node
			this.set('object',paramObj);
			// Edition of parameter into parameter Module	    
			this.editInModule();
		} 
		else {
		// EXCEPTION : parameter not found !?
			myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"
			+ this.get('name') + "' found!");          
		}
	} 	
16035364   Benjamin Renard   First commit
798
});