/**
* 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',
'amdaUI.ParamArgumentsPlug',
'amdaModel.DownloadParam'
],
statics :
{
// functionStore : null
},
constructor: function(config)
{
this.init(config);
this.callParent(arguments);
this.loadObject();
var paramArgsPlug = this.getPlugin('statistics-param-arguments-plugin');
if (paramArgsPlug)
paramArgsPlug.onApply = this.onApplyParameterArgs;
},
loadObject : function()
{
// load object into form
var basicForm = this.formPanel.items.items[1].getForm();
basicForm.loadRecord(this.object);
},
onApplyParameterArgs : function(parentUI, paramObject)
{
parentUI.paramGrid.getView().refresh();
},
addParam : function(paramId, isLeaf, needArgs, components)
{
// adding the parameter to the paramGrid
var paramObj = amdaModel.RequestParamObject.getEmptyObj();
paramObj.paramid = paramId;
if (components) {
if (components['index1']) {
paramObj['dim1-index'] = components['index1'];
++paramObj['type'];
}
if (components['index2']) {
paramObj['dim2-index'] = components['index2'];
++paramObj['type'];
}
}
var r = Ext.create('amdaModel.DownloadParam', paramObj);
this.paramGrid.getStore().add(r);
this.paramGrid.getSelectionModel().select(this.paramGrid.getStore().getCount()-1);
// var pos = this.paramGrid.store.getCount();
// this.paramGrid.store.insert(pos,r);
this.paramGrid.getView().refresh();
if (needArgs)
this.editParameterArgs(r);
},
editParameterArgs: function(record)
{
var paramArgsPlug = this.getPlugin('statistics-param-arguments-plugin');
if (paramArgsPlug)
paramArgsPlug.show('statistics-param-arguments-plugin', record);
},
addTT : function(TTname,TTid)
{
this.timeSelector.addTT(TTname, TTid); ;
},
/**
* Set Start-Stop from parameter info (Local & MyData)
*/
setTimeFromData : function(obj) {
if (!obj.start || !obj.stop)
return;
var dateStart = new Date(obj.start.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));
var dateStop = new Date(obj.stop.replace(/[T|Z]/g,' ').replace(/\-/g,'\/'));
this.formPanel.items.items[1].getForm().setValues({ startDate : dateStart, stopDate : dateStop });
this.timeSelector.intervalSel.updateDuration();
},
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[1].getForm();
var updateStatus = true;
var formValues = basicForm.getValues();
this.object.set('name',this.fieldName.getValue());
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 = Ext.clone(rec.data);
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!'
+'
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)
{
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', flex:1});
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 Name",
dataIndex: 'name',
flex:1,
sortable: false,
menuDisabled : true ,
renderer: function (val, meta, rec) {
return rec.getParamFullName();
}
},
// { 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' ,'RMS','median','variance','skewness','kurtosis','count','countNotNan','countTrue' ],
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 '