StatisticsUI.js 9.63 KB
/**
 * Project       AMDA-NG
 * Name          StatisticsUI.js
 * @class 	 amdaUI.statisticsUI
 * @extends      Ext.container.Container
 * @brief	 Statistics Module UI definition (View)
 * @author 	 elena
 */

Ext.define('amdaUI.StatisticsUI', {
	extend: 'Ext.container.Container',
	alias: 'widget.panelStatistics',
	
	requires : [	
//	  'amdaModel.Function'
          'amdaUI.TimeSelectorUI'
	],
	
	statics : {	 
//	  functionStore : null
	},
		
	constructor: function(config) {
	        this.init(config); 
		this.callParent(arguments);
	//	if (this.object) this.loadObject();
	},
	
	addParam : function(ParamName,isLeaf) 
        {                        	 
	    var r = Ext.create('amdaModel.AmdaObject', { name: ParamName });
	    this.paramGrid.getStore().add(r);
	    this.paramGrid.getSelectionModel().select(this.paramGrid.getStore().getCount()-1);  
        },
	
	addTT : function(TTname,TTid)
	{ 
	    this.timeSelector.addTT(TTname, TTid); ; 
	 
	},
	 
	generateCatalog : function(){	     
	  var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.statistics.id);
	  if (module) 
		module.linkedNode.execute();	     
	},
	
	/**
	 * update this.object from form
	 */
	
	updateObject : function(){    
	    // get the basic form of the left 
	    var basicForm = this.formPanel.items.items[0].getForm();
	    var updateStatus = true;
	    
	    var formValues = basicForm.getValues();
	//    this.object.set('name',formValues.name);
	//    this.object.set('description',formValues.description);
     	    	    
	    var recs = this.paramGrid.getStore().getNewRecords();
	    var paramArr = new Array();
	    
	    Ext.Array.each(recs, function(rec, index,allItems)
	    {
	      var obj =  new Object();
	      obj.param = rec.get('name');
	      obj.function = rec.get('function');
	      if (obj.function == null) {
		 myDesktopApp.warningMsg('Please select function : `click to select`'); 
		 updateStatus = false;
		 return;                     
	      }
             paramArr.push(obj);            	      
	    });
	    
	    this.object.set('parameter', paramArr);
	    
	    var timeSource = this.timeSelector.getActiveTimeSource(); 
 
	    if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0] // timeSource  'TimeTable'
                        && this.timeSelector.TTGrid.getStore().count() == 0) {
                    myDesktopApp.warningMsg('You\'ve chosen Time Selection `by TimeTable` but no timeTable was added!'
                            +'<br>You must add one or choose Time Selection `by Interval`'); 
                    return false;    
              }
             
	    basicForm.updateRecord(this.object);
	    
	    this.object.set('timesrc', timeSource);
	    // set valid intervals into TimeTable object
	    if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0])
		    this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items);          
	  	      
	    return updateStatus;	    
	},
	
	/**
	 * Check if changes were made before closing window 
	 * @return true if changes
	 */	
	fclose : function() {
		if (this.status == null)
			return false;
		
		var isDirty = this.formPanel.getForm().isDirty() || (this.status.isModified) || (this.status.nbModified > 0) || (this.status.nbNew > 0);
		return isDirty;
	},
	
	/**
	 * View configuration
	 */
	init : function (config) {
	  
// 	  var functions = Ext.create('Ext.data.Store', {
// 	    fields: ['id', 'name'],
// 	    data : [
// 		{"id":"min", "name":"MIN"},
// 		{"id":"max", "name":"MAX"},
// 		{"id":"mean","name":"MEAN"}        
// 	    ]
// 	    });
	     
	  this.fieldName = new Ext.form.field.Text({
	      fieldLabel: 'Catalog Name',
	      allowBlank : false,
	      stripCharsRe: /(^\s+|\s+$)/g,
	      emptyText: 'Please no spaces!',
	      name: 'name',
//	      anchor: '100%',
	      validateOnChange: false,
	      validateOnBlur: false,
	      validFlag: false,
		  validator : function() {
		      return this.validFlag;
		  }
	  });
	  
	var ttStore = Ext.create('Ext.data.Store', 
	  {
	      fields: [ 'name', 'hidden_id']	
	  });
	  
	this.timeSelector = new amdaUI.TimeSelectorUI({id: 'statisticsTimeSelector', height : 160}); 
	
	var store = Ext.create('Ext.data.Store', 
        {
            fields: ['name', 'function'] 
        });
	
	this.paramGrid = Ext.create('Ext.grid.Panel', { 
	      title: 'Select Parameter & Apply Function',
	      selType : 'rowmodel',
//	      flex: 2,
	      height :250,
	      store : store, 
	      columns: [
	        { xtype: 'rownumberer' },
		{ header: 'parameter',  dataIndex: 'name', menuDisabled : true, sortable : false },
		{ header: 'function',  dataIndex: 'function', menuDisabled : true, sortable : false,
		  editor: {
		    xtype: 'combo', queryMode : 'local',		    
//		    emptyText : 'please click to select function',
		    store: [ 'min', 'max', 'mean' ],
		    triggerAction: 'all',  		         
//		    lazyInit: false,
		    listeners: {
			focus: function(obj) {
			    obj.expand();
			}
		    }
		  },
		  renderer: function(v)
		      {
			  if(v != null && v.length > 0 )
			      return v;
			  else
			      return 'click to select';                    
		      } 	  
		},
		{ menuDisabled : true, width: 30, renderer: function(){
			return '<div class="icon-remover" style="width: 15px; height: 15px;"></div>';
		    }
		}
	      ], 
	      plugins: [
		Ext.create('Ext.grid.plugin.CellEditing', {
		    clicksToEdit: 1
		})
	      ],
	    listeners :
	      {
		render : function(o,op)
		{
		  var me = this;
		  var el = me.body.dom;
		  var dropTarget = Ext.create('Ext.dd.DropTarget', el, {
		      ddGroup: 'explorerTree',		    
		      notifyOver  : function(ddSource, e, data)
		      {                                    
			  if (data.records[0].data.nodeType == 'localParam' && data.records[0].get('notyet')) {
			      this.valid = false;
			      return this.dropNotAllowed;   
			  }	
			  if (((data.records[0].data.nodeType == 'localParam')   ||
				      (data.records[0].data.nodeType == 'remoteParam') || 
				      (data.records[0].data.nodeType == 'remoteSimuParam') ||
				      (data.records[0].data.nodeType == 'derivedParam') || 
				      (data.records[0].data.nodeType == 'myDataParam') ||
				      (data.records[0].data.nodeType == 'alias'))&&
				      (data.records[0].isLeaf() || data.records[0].data.isParameter) &&
				      !data.records[0].data.disable)
			  {
			      this.valid = true;
			      return this.dropAllowed;
			  }
			  
			  this.valid = false;
			  return this.dropNotAllowed;
		      },
		      notifyDrop  : function(ddSource, e, data)
		      {
			if (!this.valid)
			  return false;
			  var nameToSent;
			  switch (data.records[0].data.nodeType)
			  {
			      case 'localParam' :
			      case 'remoteParam':
			      case 'remoteSimuParam':                                           
				  nameToSent = data.records[0].get('id');
				  if (data.records[0].get('alias')!= "" )
				  var nameToSent = "#"+data.records[0].get('alias');
				  break;
			      case 'alias' :
				  nameToSent = "#"+data.records[0].get('text');
				  break;
			      case 'derivedParam' :
				  nameToSent = "ws_"+data.records[0].get('text');
				  break;
			      case 'myDataParam' :
				  nameToSent = "wsd_"+data.records[0].get('text');
				  break;
			      default :
				  return false;
			  }
		 	  var module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.statistics.id);
			  if (module)
			  {
			      if (data.records[0].get('needsArgs') && !data.records[0].get('isSpectra')) { 				    
				      module.getUiContent().fireEvent('openParamEditor',nameToSent);
			      }
			      else {
				      module.addParam(nameToSent,true);	
			      }
			  }
			return true;
		      }
		  });
		},	
		cellclick : function(grid, cell, cellIndex, record){		     
		      if (cellIndex == 3) 
			    grid.getStore().remove(record);
		}
	      }    
	}); 
      	
 
	  this.formPanel =  Ext.create('Ext.form.Panel', { 
	      region: 'center',	     
	      layout:  'hbox',
//	      bodyStyle: {background : '#dfe8f6'},
	      defaults: { bodyStyle: {background : '#dfe8f6'}, padding : '3'},
	      fieldDefaults: { labelWidth: 80, labelAlign : 'top' },
	      items: [ 	  		    
		{  
		    xtype: 'form',
		    flex : 1,			    
		    layout: {type: 'vbox', pack: 'start', align: 'stretch'},
		    items : [
		      this.paramGrid,
		      this.timeSelector
		    ]
		},
		{            
		    xtype: 'form', 
		    title: 'Additional Information', 
		    flex : 1,
		    layout: {type: 'vbox', pack: 'start', align: 'stretch', padding : '3'},
		    items : [
		      this.fieldName,
		      {
			xtype: 'textarea',
			name: 'description',
			fieldLabel: 'Description', 			
			height: 200
		      }   
		    ],
		    fbar:
		        [
			{   
			    type: 'button',			   
			    text: 'Generate Catalog',
			    scope : this,
			    handler: function(){
                            // update object with user's values
                            // if the return is true (object had been updated)
				if(this.updateObject()){ 
					this.updateObject();
					this.generateCatalog();			   			 
				}
                        }
			},
			{   
			    type: 'button',
			    text: 'Reset',
			    scope : this,
			    handler: function() {
			    }
			} 
		      ]
		}
	    ]  
	  }); 
	 
	 
	
	var myConf = {
		    layout: 'border',
		    items: [		   
			  this.formPanel, 		     
			  {
			    xtype: 'panel', 
			    region: 'south',
			    title: 'Information',
			    collapsible: true,
			    height: 100,
			    autoHide: false,
			    bodyStyle: 'padding:5px',
			    iconCls: 'icon-information',
			      loader: {
				autoLoad: true,
				url: helpDir+'statisticsHOWTO'
			      } 
			  }
		    ] 
	      };
	    
	    Ext.apply (this, Ext.apply(arguments, myConf));	
    }
	 
});