/**
* 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',
'amdaModel.RequestParamObject'
],
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 '