ExplorerModule.js 7.94 KB
/** 
 * Project  : AMDA-NG
 * Name     : ExplorerModule.js
 * @class   amdaDesktop.ExplorerModule 
 * @extends amdaDesktop.AmdaModule
 * @brief   Explorer Module controller definition
 * @author  CDA
 */

Ext.define('amdaDesktop.ExplorerModule', 
{
	extend: 'amdaDesktop.AmdaModule',
    
	requires : [
		'amdaUI.ExplorerUI',
		'amdaUI.AliasUI',
		// Node Models
		'amdaModel.BkgJobNode',
		'amdaModel.DerivedParamNode',
		'amdaModel.LocalParamNode',
		'amdaModel.RemoteParamNode',
		'amdaModel.RemoteSimuParamNode',
		'amdaModel.AliasNode',
		'amdaModel.TimeTableNode',
		'amdaModel.CatalogNode',
		'amdaModel.StatisticsNode',	// singleton; not shown in the tree
		'amdaModel.sharedTimeTableNode',
		'amdaModel.sharedCatalogNode',
		'amdaModel.MyDataParamNode',
		'amdaModel.MyDataNode',
		'amdaModel.PlotNode',
		'amdaModel.DownloadNode',  // singleton; not shown in the tree
		'amdaModel.SearchNode',
		// Object Models
		'amdaModel.Parameter',
		'amdaModel.Search',        
		'amdaModel.Download',
		'amdaModel.TimeTable',
		'amdaModel.Catalog',	
		'amdaModel.Statistics',
		'amdaModel.FileObject',
		'amdaModel.FileParamObject',
		'amdaModel.FilterInfo'
	],
    
	contentId : 'explorerUI',
   
	filter : null,
	filtersStore : null,
    
	paramInfoRegistry : {},
    
	constructor : function(config)
	{
		this.callParent(arguments);
		if (!this.filtersStore) 
		{
			this.filtersStore = Ext.create('Ext.data.Store', {
					model: 'amdaModel.FilterList' 
			});                 
			this.filtersStore.load(); 
			//  amdaDesktop.ExplorerModule.filtersStore = this.filtersStore;
		}                
	},
        
	createWindow : function() 
	{
		var desktop = this.app.getDesktop();
        
		var win = desktop.getWindow(this.id);
		if (!win) {            
			win = desktop.createWindow( {
				id : this.id,
				title : this.title,
				width : 340,
				height : 500,
				iconCls : this.icon,
				animCollapse : false,
				border : false,
       //         constrainHeader : true,
				closable: false,
				stateful : true,
				stateId  : this.id,
				stateEvents: ['move','show','resize'],
				constrain: true,
				layout   :
				{
					type : 'border',
					align : 'stretch'
				},
				x : 5,
				y : 5,
				items : [
					{
						xtype: 'panelExplorer',
						id : this.contentId,
						region: 'center'
					},
					{
						xtype: 'panel', 
						id : 'LogPanel',
						region: 'south',
						height : 150,
						split : true,
						layout: {
							type: 'vbox',
							align : 'stretch',
							autoSize : true
						}, 
						autoScroll : true,
						stateful : true,
						stateId  : 'LogPanel',
						buttons : [{
							scope: this,
							text : 'Clear',
							handler: function(){	
								win.items.get('LogPanel').removeAll();  
								this.addLogMessage('<b>Log</b>');
							}
						}]
					}
				]
			});
		}
        
		win.on({
			activate: {
				fn : function() 
				{
					myDesktopApp.getLoadedModule(this.id, true, function (module) {
					// on activation when there's a pinedModule 'null'
						if (module.pinedModule===null) {
							// get the ZIndex manager
							var manager = myDesktopApp.desktop.getDesktopZIndexManager();
							// ordering to send back this window
							manager.sendToBack(win);
						} 
					});
				},
				scope: this
			} 
		});
        
		win.on({
			show : 
			{
				fn : function(o)
				{
					//set current filter
					this.setCrtFilter();    				
					//resize the explorer in relation with the desktop size
					if (win.y + win.height > myDesktopApp.desktop.el.getHeight())
							win.setHeight(myDesktopApp.desktop.el.getHeight() - win.y);
				},
				scope : this
			}
		});
        
		win.addCls('window-active');
		win.show();
		this.addLogMessage('<b>Log</b>');
		return win;        
	},
    
	pinedModule : null,
    
	/**
	* Getter of pinedModule
	* @return {amdaDesktop.InteractiveModule} The pined module
	*/
	getPinedModule : function() 
	{
		// get the pined Module
		return this.pinedModule;
	},

	/**
	* Setter of pinedModule
	* @param {amdaDesktop.InteractiveModule} The pined module
	*/
	setPinedModule : function(amdaModule) 
	{
		// set the pined Module
		this.pinedModule = amdaModule;
	},
    
	/**
	* Module Attachment Method
	* @param {amdaDesktop.InteractiveModule} The module to attach
	*/
	pinMechanism : function(amdaModule) 
	{
		// if there is an old pined module
		if (this.getPinedModule()!=null) {
			// get old pined module :
			var oldPinedModule = this.getPinedModule();
			// call uncolor method on the old pined Module
			myDesktopApp.getLoadedModule(oldPinedModule).uncolorHeaderModule();
		}
		// set pined module
		this.setPinedModule(amdaModule);
		// call color method on pined Module
		myDesktopApp.getLoadedModule(amdaModule).colorHeaderModule();
	},
    
    
	addLogMessage : function(message)
	{
		var height = 40;
		var msg = Ext.create('Ext.Component', {
			height: height,
			html: message,
			style: { color : '#555555'}
		});
		var desktop = myDesktopApp.getDesktop();
		var win = desktop.getWindow(this.id);
		var panel = win.items.get('LogPanel');
		panel.add(msg);
	},
     
	//
	setCrtFilter : function()
	{
		var me = this;
		//get current filter to apply
		AmdaAction.getCrtFilterResult(function (result, e)
			{
				var t = e.getTransaction();
				if (e.status) 
				{	
					if (result)
					{
						//apply current filter
						this.filter = result;
						// add saved filter to Explorer List
						if (!this.filtersStore.getById(this.filter.id)) 
							this.filtersStore.add({id : this.filter.id, name : this.filter.name});
						
						//apply filter to the tree
						var desktop = myDesktopApp.getDesktop();
						var win = desktop.getWindow(this.id);
						if (win)
						{
							var explorerUI = win.query('#'+this.contentId);
							explorerUI[0].updateFilter();
						}
					}
					else
						Ext.Msg.show( {
								title : 'Filter', 
								msg : 'Cannot apply filter',
								modal : true,
								icon : Ext.Msg.ERROR,
								buttons : Ext.Msg.OK
						});
				}
				else
				{
					// FAILURE
					Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
				} 
			},this);
	},
     
	resetFilter : function()
	{
		AmdaAction.resetFilter( function (result, e)
			{
				var t = e.getTransaction();
				if (e.status) 
				{	
					if (result)
					{
						this.setCrtFilter();						
						//update filter win
						var desktop = myDesktopApp.getDesktop();
						var win = desktop.getWindow(myDesktopApp.dynamicModules.filters.id);
						if (win)
						{
							var filterUI = win.query('panelFilters');
							filterUI[0].reloadFilter();
						}
					}
					else
						Ext.Msg.show( {
									title : 'Filter', 
									msg : 'Cannot reset filter',
									modal : true,
									icon : Ext.Msg.ERROR,
									buttons : Ext.Msg.OK
						});
				}
				else
				{
					// FAILURE
					Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
				} 
			},this);
	},
     
	getParamInfo : function(paramId, onReady) 
	{
		if (this.paramInfoRegistry[paramId]) 
		{
			if (onReady)
				onReady(this.paramInfoRegistry[paramId]);
			return this.paramInfoRegistry[paramId];
		}
			
		var me = this;
		AmdaAction.getParamInfo({"paramId" : paramId}, function (result, e) 
		{
			var paramInfo = null;
			if (e.status === true)
			{
				if (!result.success)
				{
				//No available info for this parameter. Do not display an error message
					/*if (result.message && result.message != '')
						Ext.Msg.show({title:'Get parameter arguments error ', msg: result.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
					else
						Ext.Msg.show({title:'Get parameter arguments error', msg: 'Unknown error', icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});*/
				}
				else
				{
					//Store parameter info in registry
					me.paramInfoRegistry[paramId] = result;
					paramInfo = result;
				}
			}
			else
			{
				Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
			}

			if (onReady)
				onReady(paramInfo); 
		});
		
		return null;
	}
	
});