LocalParamNode.js 7.23 KB
/**
 * Project  : AMDA-NG4
 * Name     : LocalParamNode.js
 * @class   amdaModel.LocalParamNode
 * @extends amdaModel.InteractiveNode
 * @brief   Basic Model of Node corresponding to a amda  parameter
 * @author
 * @version $Id: LocalParamNode.js 2800 2015-02-27 16:23:06Z elena $
 */

Ext.define('amdaModel.LocalParamNode',
{
	extend: 'amdaModel.InteractiveNode',

	statics:
	{
		nodeType: 'localParam'
	},

	fields:
	[
		{name: 'alias', type:'string', persist: false},
		{name: 'isParameter', type: 'boolean', persist: false},
		{name: 'notyet', type: 'boolean', defaultValue: false, persist: false},
		{name: 'needsArgs', type: 'boolean', persist: false},
		{name: 'isSpectra', type: 'boolean', defaultValue: false, persist: false},
		{name: 'isStack', type: 'boolean', defaultValue: true, persist: false},
		{name: 'globalStart', type: 'string', persist: false},
		{name: 'globalStop', type: 'string', persist: false},
		{name: 'timeRestriction', type: 'boolean', persist: false},
		{name: 'rank', type: 'integer', persist: false, defaultValue: null}
	],

	constructor : function(config)
	{
		this.callParent(arguments);

		this.set('allowDrop', true);
		this.set('moduleId',myDesktopApp.dynamicModules.param.id);
		this.set('objectDataModel',amdaModel.Parameter.$className);

		// if future missions or 'depending on mission'
		if (this.get('globalStart')) {
		var now = Ext.Date.format(new Date(), 'Y/m/d');
		if ( this.get('globalStart') > now )
			this.set('cls','predicted');
		}
		// time restriction on parameters
		if (this.get('timeRestriction')) {
		//      this.set('cls','predicted');
			var id = this.get('id');
			var bracketPos =  id.indexOf("(");
			if (bracketPos > 0) {
				id = Ext.String.insert(id, '_restr', bracketPos);
			}
			else {
				id += '_restr';
			}
			this.set('id', id);
		}

		if (this.get('rank')) {
			var rank = this.get('rank');
			if (rank == 1) this.set('iconCls', 'icon-mercury');
			if (rank == 2) this.set('iconCls', 'icon-venus');
			if (rank == 5) this.set('iconCls', 'icon-earth');
			if (rank == 6) this.set('iconCls', 'icon-earth');
			if (rank == 7) this.set('iconCls', 'icon-mars');
			if (rank == 8) this.set('iconCls', 'icon-jupiter');
			if (rank == 9) this.set('iconCls', 'icon-saturn');
			if (rank == 93) this.set('iconCls', 'icon-comet');
			if (rank == 3) this.set('iconCls', 'icon-sw');
			if (rank == 4) this.set('iconCls', 'icon-sw');
			if (rank >= 99) this.set('iconCls', 'icon-solarsystem');
		}

		if (this.get('isParameter'))
		{
			if (this.get('leaf'))
				this.set('iconCls', 'icon-scalar');
			else
				this.set('iconCls', 'icon-vector');

			if (this.get('isStack') || this.get('isSpectra'))
				this.set('iconCls', 'icon-spectra');
		}
	},

	allMenuItems : function()
	{
		var menuItems =
		[{
			fnId : 'root-collapseAll',
			text : 'Close All',
			hidden : true
		}, {
			fnId : 'dire-collapseAll',
			text : 'Close All',
			hidden : true
		}, {
			fnId : 'miss-collapseAll',
			text : 'Close All',
			hidden : true
		}, {
			fnId : 'para-plotParam',
			text : 'Plot Parameter',
			hidden : true
		}, {
			fnId : 'para-downParam',
			text : 'Download Parameter',
			hidden : true
		},{
			fnId : 'leaf-createAlias',
			text : 'Create/Edit Alias',
			hidden : true
		},{
			fnId : 'leaf-createDerivedParam',
			text : 'Create Derived Parameter',
			hidden : true
		},{
			fnId : 'leaf-plotParam',
			text : 'Plot Parameter',
			hidden : true
		}, {
			fnId : 'leaf-downParam',
			text : 'Download Parameter',
			hidden : true
		}, {
			fnId : 'miss-epnTap',
			text : 'Display EPN-TAP services',
			hidden : true
		}];

		return menuItems;
	},

	onMenuItemClick : function(menu,item,event)
	{
		switch (item.fnId)
		{
			case 'root-collapseAll':
			case 'dire-collapseAll':
				if(this && !this.isLeaf()) {
					this.collapse(true);
				}
				break;
			case 'leaf-plotParam':
			case 'para-plotParam':
					this.createPlot(this);
				break;
			case 'leaf-downParam':
			case 'para-downParam':
					this.createDownload(this);
				break;
			case 'leaf-createDerivedParam':
				if (!this.get('notyet'))
					this.createLeaf(this);
				else
					myDesktopApp.warningMsg("Sorry! access to this parameter is restricted");
				break;
			case 'leaf-createAlias':
				if (!this.get('notyet'))
					this.createAlias(this);
				else
					myDesktopApp.warningMsg("Sorry! access to this parameter is restricted");

				break;
			case 'miss-epnTap':
				this.displayEpnTap();
				break;
			default:
				break;
		}
	},

	createLeaf: function(node)
	{
		// instanciate a Parameter object with the current data in his buidchain
		var param =  Ext.create(this.get('objectDataModel'));//, { buildchain: node.get('alias') ? "#"+node.get('alias') : node.get('id') });
		// instanciate a DerivedParamNode with this param object
		var newNode = Ext.create(amdaModel.DerivedParamNode.$className, {leaf : true, object : param});

		// edit newNode into Parameter Module with node as contextNode
		newNode.editInModule();

		var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.param.id, true, function(module) {
			var paramName;
			var components = null;
			if (node.get('alias')!= "" )
				paramName = "#"+node.get('alias');
			else
				paramName = node.get('id');
// 			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);
		});
	},

	createAlias: function(node)
	{
		var win = myDesktopApp.desktop.getWindow('alias-win');
		if (!node.get('needsArgs') && node.get('leaf'))
		{
			if(!win)
			{
				var win = myDesktopApp.desktop.createWindow(
				{
					border: false,
					id : 'alias-win',
					title : 'Create Alias',
					width : 400,
					height : 200,
					layout : 'border',
					maximizable : false,
					items :
					[{
						xtype : 'alias',
						region : 'center',
						margins :
						{
							top: 0,
							right: 5,
							bottom: 5,
							left: 5
						},
						paramNode : node,
						id : 'aliasUI'
					}]
				});
			}
			else
			{
				//Set data into Alias Widget
				win.items.items[0].paramNode = node;
				win.items.items[0].setAlias(node);
			}
			win.show();
		}
		else
		{
			var message = 'Sorry, parameter ' + node.get('id') + ' cannot have alias';
			Ext.Msg.alert('Impossible Create Alias', message);
			if (win) win.close();
		}
	},

	isParameter : function()
	{
		return this.get('isParameter');
	},

	displayEpnTap: function() {
		var icons = {
			'icon-mercury': 'Mercury',
			'icon-venus': 'Venus',
			'icon-earth': 'Earth',
			'icon-mars': 'Mars',
			'icon-jupiter': 'Jupiter',
			'icon-saturn': 'Saturn',
			'icon-comet': 'Comet',
		}
		var filter = {'productType': 'all'};
		filter['targetName'] = this.get('iconCls') in icons ? icons[this.get('iconCls')] : '';
		filter['start'] = this.get('globalStart') ? this.get('globalStart') : '';
		filter['stop'] = this.get('globalStop') ? this.get('globalStop') : '';
		myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
			module.createWindow({'activeTab': 2, 'epntapFilter': filter});
		});
	}
});