Blame view

js/app/models/InteractiveNode.js 23.6 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
	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},
f29c5e66   Elena.Budnik   plot only option
24
		{name: 'needsArgs', type:'boolean', defaultValue: false},
eec153c1   Elena.Budnik   formattage, netto...
25
26
		{name: 'disable', type: 'boolean', defaultValue: false, persist: false}
	],
16035364   Benjamin Renard   First commit
27

eec153c1   Elena.Budnik   formattage, netto...
28
29
30
	statics: {
		preloadNodes : function(node,onready)
		{
f6206fd6   Elena.Budnik   rm 6522 First Der...
31
			var me = this;	
eec153c1   Elena.Budnik   formattage, netto...
32
33
34
35
36
37
38
39
40
41
42
43
44
45
			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
    
0c154100   Elena.Budnik   redmine #5141 part.2
86
87
	onReady : null,
	
eec153c1   Elena.Budnik   formattage, netto...
88
89
90
91
	constructor : function(config)
	{
		this.callParent(arguments); 
		this.set('nodeType',this.self.nodeType);		
74b77f58   Elena.Budnik   init remote branch
92
93
94
95
96
97
98
99
100
		this.set('ownerTreeId',amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
		if (this.get('id')) { // TODO why sometimes (delete in remote interoper tree) this.get('id') = undefined ?
			// 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);
			}  
		}
eec153c1   Elena.Budnik   formattage, netto...
101
	},
16035364   Benjamin Renard   First commit
102
    
eec153c1   Elena.Budnik   formattage, netto...
103
104
105
106
107
108
109
/**
* this method is overriden into ExecutableNode to return true
*/
	isExecutable: function()
	{
		return false;
	},
16035364   Benjamin Renard   First commit
110

eec153c1   Elena.Budnik   formattage, netto...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
* 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); 
							
f6206fd6   Elena.Budnik   rm 6522 First Der...
133
			} else if (module.getLinkedNode() != null){
eec153c1   Elena.Budnik   formattage, netto...
134
135
136
137
138
139
140
141
142
			//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
143

eec153c1   Elena.Budnik   formattage, netto...
144
145
146
147
148
/**
* Method to rename the workspace node
*/
	rename: function(value,callBackFn) 
	{ 		 
11d21073   Nathanaël Jourdane   Fix bugs when cre...
149
		var dataToSend = {id : this.get('id'), old_name: this.modified.text, name: value,  parent : this.data.parentId, leaf: this.isLeaf(), nodeType: this.get('nodeType')};
eec153c1   Elena.Budnik   formattage, netto...
150
151
		AmdaAction.renameObject(dataToSend, callBackFn);		 
	},
16035364   Benjamin Renard   First commit
152
    
eec153c1   Elena.Budnik   formattage, netto...
153
154
155
156
157
158
159
160
/**
* 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
161
    
eec153c1   Elena.Budnik   formattage, netto...
162
163
164
165
166
167
168
169
/**
* 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()};
65ac4a9d   Nathanaël Jourdane   Fix folders debug...
170
		AmdaAction.validNameObject(dataToSend, callBackFn);
eec153c1   Elena.Budnik   formattage, netto...
171
	},
16035364   Benjamin Renard   First commit
172

eec153c1   Elena.Budnik   formattage, netto...
173
174
175
176
177
178
179
/**
* 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
180
            
eec153c1   Elena.Budnik   formattage, netto...
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
			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);
eec153c1   Elena.Budnik   formattage, netto...
203
204
					}
					
75a3182b   Elena.Budnik   special MyDataPar...
205
206
207
					// myDataParam special update
					this.specialUpdate(res, false);
					
eec153c1   Elena.Budnik   formattage, netto...
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
					// 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
229

eec153c1   Elena.Budnik   formattage, netto...
230
231
232
233
234
235
236
237
238
/**
* 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());
f6206fd6   Elena.Budnik   rm 6522 First Der...
239
		} 
eec153c1   Elena.Budnik   formattage, netto...
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
		// 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'));
f6206fd6   Elena.Budnik   rm 6522 First Der...
260

eec153c1   Elena.Budnik   formattage, netto...
261
262
263
					//set id of this node
					this.set('id',res.id);
					this.internalId = res.id;
f6206fd6   Elena.Budnik   rm 6522 First Der...
264

eec153c1   Elena.Budnik   formattage, netto...
265
					// set id of node's object
f6206fd6   Elena.Budnik   rm 6522 First Der...
266
					this.get('object').set('id',res.id);    
eec153c1   Elena.Budnik   formattage, netto...
267
268
269
270
					if (res.created){
						// set the created date
						this.get('object').set('created',res.created);
					}
16035364   Benjamin Renard   First commit
271
                    
eec153c1   Elena.Budnik   formattage, netto...
272
273
274
					if (res.info){
						// set the tooltip
						this.set('info',res.info);
75a3182b   Elena.Budnik   special MyDataPar...
275
276
277
278
					}
					//set globalStart & global Stop to be used for time selection
					this.specialUpdate(res, true);
                                                        
eec153c1   Elena.Budnik   formattage, netto...
279
280
281
					//TODO do we need this commission ???
					// fix the modifications for object
					this.get('object').commit(); 
663f6395   Elena.Budnik   nettoyage
282

eec153c1   Elena.Budnik   formattage, netto...
283
					// if ownerTree panel is not active
663f6395   Elena.Budnik   nettoyage
284
					if (this.myGetOwnerTree().ownerCt.getActiveTab()!==this.myGetOwnerTree()) {
eec153c1   Elena.Budnik   formattage, netto...
285
286
287
						// 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
288
                    
eec153c1   Elena.Budnik   formattage, netto...
289
290
					Ext.Msg.alert('Complete', 'New object '+this.get('object').get('name')+' has been created'); 
					// expand the contextNode
663f6395   Elena.Budnik   nettoyage
291
					this.get('contextNode').expand(false, function() {
eec153c1   Elena.Budnik   formattage, netto...
292
293
294
295
296
297
						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);
663f6395   Elena.Budnik   nettoyage
298
						if (opt) {
eec153c1   Elena.Budnik   formattage, netto...
299
300
301
302
303
							var scope = opt.scope ? opt.scope : this;
							if (opt.callback)
									opt.callback.call(scope,'create');
						}                                                
					}, this);
eec153c1   Elena.Budnik   formattage, netto...
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
				}               
				// 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
321

75a3182b   Elena.Budnik   special MyDataPar...
322
	specialUpdate : function() {},
eec153c1   Elena.Budnik   formattage, netto...
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
/**
* 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
360

eec153c1   Elena.Budnik   formattage, netto...
361
362
363
364
365
366
367
368
369
	allMenuMultiItems : function() {
		var menuMulti = [
		{
			fnId : 'mult-deleteMulti',
			text : 'Delete selected ' + this.self.objectName + 's'
		}
		];
		return menuMulti;
	},
d18b535d   elena   catalog draft + c...
370

eec153c1   Elena.Budnik   formattage, netto...
371
372
373
374
375
376
377
	getAllContextMenuItems: function(){  
		return  this.allMenuItems();       
	},

	getMultiContextMenuItems: function(){
		return this.allMenuMultiItems();
	},
d18b535d   elena   catalog draft + c...
378
    
eec153c1   Elena.Budnik   formattage, netto...
379
380
381
382
383
384
385
/**
* default implementation
* no menu display if there's no override of this function
*/
	getMultiContextMenuItems: function(){
		return null;
	},
16035364   Benjamin Renard   First commit
386
    
eec153c1   Elena.Budnik   formattage, netto...
387
388
389
390
391
392
393
/**
*  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
394

eec153c1   Elena.Budnik   formattage, netto...
395
396
397
398
399
400
401
402
403
404
405
		switch (fnId) {
			case 'deleteNode':
				this.deleteNode(); 
				break;
			case 'createDir':
				this.createDir(); 
				break;
			case 'createLeaf':
				this.createLeaf(this);
				break;                    
			case 'renameNode':
11d21073   Nathanaël Jourdane   Fix bugs when cre...
406
				this.renameNode(false);
eec153c1   Elena.Budnik   formattage, netto...
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
				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)  {
eec153c1   Elena.Budnik   formattage, netto...
426
427
		var startString = new String(node.get('globalStart'));
		var stopString = new String(node.get('globalStop'));
a0f13ed1   Elena.Budnik   small format + ti...
428
429

		var startDate =  new Date(startString.replace(/\-/g,'\/').replace(/[T|Z]/g,' '));	
eec153c1   Elena.Budnik   formattage, netto...
430
		var stopDate =  new Date(stopString.replace(/\-/g,'\/').replace(/[T|Z]/g,' '));
a0f13ed1   Elena.Budnik   small format + ti...
431

eec153c1   Elena.Budnik   formattage, netto...
432
433
		if (stopDate -  startDate  > 86400000 ) {
			var startTime = Ext.Date.add(stopDate, Ext.Date.DAY, -1);		 
a0f13ed1   Elena.Budnik   small format + ti...
434
435
			// var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s')};
			var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d'), stop: Ext.Date.format(stopDate, 'Y/m/d')};
eec153c1   Elena.Budnik   formattage, netto...
436
437
438
439
440
441
		} 
		else {
			var timeObj = {start:  node.get('globalStart'), stop:  node.get('globalStop')};
		}
		return timeObj;			
	},
16035364   Benjamin Renard   First commit
442

eec153c1   Elena.Budnik   formattage, netto...
443
444
445
446
447
448
449
450
451
	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();
a0f13ed1   Elena.Budnik   small format + ti...
452
				if((node.get('globalStart') != null) && (node.get('globalStop') != null) && node.get('globalStart') != 'depending on mission' && node.get('isParameter')) {                                                                            
eec153c1   Elena.Budnik   formattage, netto...
453
454
455
456
457
458
					module.getUiContent().setTimeFromData(node.getTimeFromNode(node)); 
				}
			}         
			module.getUiContent().addParameter(node);  
		});
	},
16035364   Benjamin Renard   First commit
459
    
eec153c1   Elena.Budnik   formattage, netto...
460
	createDownload: function(node) 
f29c5e66   Elena.Budnik   plot only option
461
	{ 
eec153c1   Elena.Budnik   formattage, netto...
462
463
464
465
466
467
		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();
a0f13ed1   Elena.Budnik   small format + ti...
468
				if ((node.get('globalStart') != null) && (node.get('globalStop') != null) && node.get('globalStart') != 'depending on mission' &&  node.get('isParameter')) {
eec153c1   Elena.Budnik   formattage, netto...
469
470
471
					module.getUiContent().setTimeFromData(node.getTimeFromNode(node)); 
				}
			}         
eec153c1   Elena.Budnik   formattage, netto...
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
				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');
				}				
f21cd402   Benjamin Renard   Fix components se...
490
491
492
493
494
495
496
497
498
499
 				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;
 				}		
9fad5834   Elena.Budnik   redmine #4795
500
				module.addParam(paramName,true,node.get('needsArgs'),components);  
eec153c1   Elena.Budnik   formattage, netto...
501
502
503
504
505
506
507
508
509
510
511
512
513
514
		}); 
	},
	
	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
515
    
eec153c1   Elena.Budnik   formattage, netto...
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
/**
* 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
532
    
eec153c1   Elena.Budnik   formattage, netto...
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
/**
* 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
552
    
eec153c1   Elena.Budnik   formattage, netto...
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
/*
*    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');
3e9f7a84   Elena.Budnik   check if window i...
568
							// if really interactive node 
eec153c1   Elena.Budnik   formattage, netto...
569
							if (moduleId) {
3e9f7a84   Elena.Budnik   check if window i...
570
571
572
573
574
575
								var win = myDesktopApp.getDesktop().getWindow(moduleId);
								// if window is really open
								if (win) {
									var me = this;
									myDesktopApp.getLoadedModule(moduleId, true, function (module) {
										var editedNode = module.getLinkedNode();
f6206fd6   Elena.Budnik   rm 6522 First Der...
576
										
3e9f7a84   Elena.Budnik   check if window i...
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
										// 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; 
											
										// node was created BEFORE tree loading; node.id are different ; but it is the same node 
										if ( editedNode && editedNode.get('id') == me.get('id') && editedNode !== me ) {
											module.setLinkedNode(me);
											isThisFile = true;
										}
										
										if (me.$className == 'amdaModel.DerivedParamNode') {
											var obj = {
												paramId : 'ws_'+me.get('text')
											};
											AmdaAction.compilParamDelete(obj);
										}
										
										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();
										}
									});	
								}
eec153c1   Elena.Budnik   formattage, netto...
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
							}
						}                    
						//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
645

eec153c1   Elena.Budnik   formattage, netto...
646
647
648
649
650
651
652
653
654
655
656
/*
*  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
657
    
eec153c1   Elena.Budnik   formattage, netto...
658
659
660
661
/*
*  Create Folder
*/
	createDir: function() {
eec153c1   Elena.Budnik   formattage, netto...
662
663
664
665
666
667
		var me = this;
		amdaModel.InteractiveNode.preloadNodes(this.getRootNode(),
			function()
			{
				var newNode = Ext.create(me.$className,
				{
82560cb2   Nathanaël Jourdane   fix folders (wip)
668
669
					leaf : false, nodeType : me.get('nodeType'),
					text : amdaModel.AmdaNode.NEW_DIR_NAME,
11d21073   Nathanaël Jourdane   Fix bugs when cre...
670
671
					children : [],
          parentId: me.get('id')
eec153c1   Elena.Budnik   formattage, netto...
672
				});
16035364   Benjamin Renard   First commit
673

82560cb2   Nathanaël Jourdane   fix folders (wip)
674
				// insert the new node as a child of node
65ac4a9d   Nathanaël Jourdane   Fix folders debug...
675
        me.insertChild(0, newNode);
eec153c1   Elena.Budnik   formattage, netto...
676
677
678
				// start text edition on this new directory node
				me.expand(false);
				newNode.expand(false);
16035364   Benjamin Renard   First commit
679

eec153c1   Elena.Budnik   formattage, netto...
680
681
682
				// select the new node
				me.myGetOwnerTree().getSelectionModel().select(newNode);
				// call the renameNode method for this new node
11d21073   Nathanaël Jourdane   Fix bugs when cre...
683
				newNode.renameNode(true);
eec153c1   Elena.Budnik   formattage, netto...
684
685
			});
	},
16035364   Benjamin Renard   First commit
686
    
eec153c1   Elena.Budnik   formattage, netto...
687
688
689
690
691
692
/*
*  
*/
	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
693

eec153c1   Elena.Budnik   formattage, netto...
694
695
696
697
698
699
700
701
		// 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
702

11d21073   Nathanaël Jourdane   Fix bugs when cre...
703
	renameNode: function(deleteOnFailure)
65ac4a9d   Nathanaël Jourdane   Fix folders debug...
704
	{
eec153c1   Elena.Budnik   formattage, netto...
705
706
707
708
709
710
711
712
		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
11d21073   Nathanaël Jourdane   Fix bugs when cre...
713
714
715
716
					var item = me.myGetOwnerTree().getSelectionModel().selected.items[0];
					item.deleteOnFailure = deleteOnFailure;
					me.myGetOwnerTree().fireEvent('edition', me.myGetOwnerTree().view, item);
				});
eec153c1   Elena.Budnik   formattage, netto...
717
718
719
720
721
722
		}
		else
		{
			myDesktopApp.errorMsg('tree is undefined');
		}
	},
16035364   Benjamin Renard   First commit
723

eec153c1   Elena.Budnik   formattage, netto...
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
/*
*       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
0c154100   Elena.Budnik   redmine #5141 part.2
740
			{				
eec153c1   Elena.Budnik   formattage, netto...
741
				// call the ext method to get the details of parameter
0c154100   Elena.Budnik   redmine #5141 part.2
742
743
744
745
				// the edition of real parameter is done into callback method getObjectCallback   
				if (onReady) 
					me.onReady = onReady;
															
eec153c1   Elena.Budnik   formattage, netto...
746
747
748
749
				AmdaAction.getObject(me.get('id'), me.get('nodeType'), me.getObjectCallback, me);
			}
		});		
	},
16035364   Benjamin Renard   First commit
750

eec153c1   Elena.Budnik   formattage, netto...
751
752
753
754
755
756
757
758
759
760
761
/*
* 
*/
	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);
0c154100   Elena.Budnik   redmine #5141 part.2
762
763
			// Edition of parameter into parameter Module	
			this.editInModule(null, this.onReady);
eec153c1   Elena.Budnik   formattage, netto...
764
765
766
767
768
769
770
		} 
		else {
		// EXCEPTION : parameter not found !?
			myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"
			+ this.get('name') + "' found!");          
		}
	} 	
16035364   Benjamin Renard   First commit
771
});