LocalParamNode.js 8.12 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 || 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 == 10) this.set('iconCls', 'icon-uranus'); 
			if (rank == 11) this.set('iconCls', 'icon-neptune');   
			if (rank == 93) this.set('iconCls', 'icon-comet');
			if (rank == 3 || 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 () {
    const missions = {
      'Giotto': '1P',
      'ICE': '21P',
      'Rosetta': '67P',
      'Voyager': 'Jupiter, Io, Thébé, Métis Adrastée, Europe, ' +
      'Saturn, Atlas, Prométhée, Pandore, Téthys, Japet, Encelade, Uranus, Mirandaneptune, Triton',
      'Pioneer': 'Earth, Moon, Venus, Jupiter, Callisto, Ganymede, Io, Europa, Amalthea, Saturn, Iapetus, Phoebe, ' +
      'Hyperion, Epimetheus, Atlas, Dione, Mimas, Janus, Tethys, Enceladus, Calypso, Rhea, Titan',
      'Ulysses': 'Sun',
      'Solar_Probe_Plus': 'Sun',
      'Solar_Orbiter': 'Sun',
      'Ephemerides': 'Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Deimos, Phobos, 67P'
    }
    const icons = {
      'icon-mercury': 'Mercury',
      'icon-venus': 'Venus',
      'icon-earth': 'Earth',
      'icon-mars': 'Mars',
      'icon-jupiter': 'Jupiter',
      'icon-saturn': 'Saturn',
      'icon-sw': 'Earth, Sun'
    }

    const targetName = this.get('id') in missions ? missions[this.get('id')]
        : this.get('iconCls') in icons ? icons[this.get('iconCls')]
        : ''
    const start = this.get('globalStart') ? this.get('globalStart') : ''
    const stop = this.get('globalStop') ? this.get('globalStop') : ''
    const filter = {'productType': 'all', 'targetName': targetName, 'start': start, 'stop': stop}
    myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
      module.createWindow({'activeTab': 2, 'epntapFilter': filter})
    })
  }
});