/**
* Project : AMDA-NG
* Name : DownloadUI.js
* @class amdaUI.DownloadUI
* @extends Ext.container.Container
* @brief Download Module UI definition (View)
* @author Myriam
* @version $Id: DownloadUI.js 2622 2014-11-07 14:50:09Z elena $
*/
Ext.define('amdaUI.DownloadUI', {
extend: 'Ext.container.Container',
alias: 'widget.panelDownload',
requires: [
'amdaUI.TimeSelectorUI',
'amdaUI.ParamArgumentsPlug',
'amdaModel.DownloadParam'
],
//Old kernel time formats
//timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['Y m d H i s', 'YYYY MM DD hh mm ss'], ['d m Y H i s', 'DD MM YYYY hh mm ss'], ['Y z H i s', 'YYYY DDD hh mm ss']],
//New kernel time formats
timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['DD Time', 'DD Time'], ['Timestamp', 'Timestamp']],
fileformatData : [['ASCII', 'ASCII'],['vot', 'VOTable'],['cdf', 'CDF'],['json', 'JSON']],
fileformatTTData : [['text', 'plain text'], ['vot','VOTable']],
filecompressData : [['zip', 'zip'], ['tar+gzip', 'tar+gzip']],
filestructureData : [['0','All In One File'], ['1','One File Per Time Interval'], ['2','One File Per Param/Interval']],
constructor: function(config) {
this.init(config);
this.callParent(arguments);
// load object into view
if (this.object) this.loadObject();
//
var paramArgsPlug = this.getPlugin('download-param-arguments-plugin');
if (paramArgsPlug)
paramArgsPlug.onApply = this.onApplyParameterArgs;
},
addTT : function(newTTName,newTTid)
{
var tabPanel = this.formPanel.down();
var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());
if (downloadSrc === 0) {
this.timeSelector.addTT(newTTName,newTTid);
}
else {
// search for an existing record in store with this unique name
var existingIndex = this.TTGrid.store.findExact( 'name', newTTName);
// if no corresponding TT found
if (existingIndex == -1){
// adding the time table to the TTGrid of TT download
var r = Ext.create('amdaModel.TTobject', { id: newTTid, name: newTTName });
this.TTGrid.store.insert(this.TTGrid.store.getCount(),r);
}
}
},
addTTs : function(TTarray) {
// set TTTab
this.timeSelector.setTTTab(TTarray);
},
// Add TT in download TT module
addTTdownload : function(newTTName,newTTid){
var tabPanel = this.formPanel.down();
tabPanel.setActiveTab(1);
this.addTT(newTTName,newTTid);
},
/**
* Set Start-Stop from parameter info (Local & MyData)
*/
setTimeFromData : function(obj) {
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.down('form').getForm().setValues({ startDate : dateStart, stopDate : dateStop });
this.timeSelector.intervalSel.updateDuration();
},
addParam : function(newParamName,isLeaf)
{
// search for an existing record in store with this unique name
var existingIndex = this.paramGrid.store.findExact('name', newParamName);
// if no corresponding parameter found
if (existingIndex == -1){
// adding the parameter to the paramGrid
var r = Ext.create('amdaModel.DownloadParam', {name: newParamName, type: 0, dim1: '', dim2: '' });
var pos = newParamName.indexOf('ws_',0) == -1 ? 0 :this.paramGrid.store.getCount();
this.paramGrid.store.insert(pos,r);
this.paramGrid.getView().refresh();
}
},
addParams: function(arrayParams)
{
var arrayRec = new Array();
var index = 1;
if (arrayParams)
{
index = 0;
Ext.Array.each(arrayParams,function(item){
if (Ext.isObject(item)) {
// for Parameter Name in Download Module
var r = Ext.create('amdaModel.DownloadParam', { name: item.get('name'), type: item.get('type'), dim1: item.get('dim1'), dim2: item.get('dim2')});
}
else {
// for Download By Request in Operations menu
//ToDo BRE - Components selection
var r = Ext.create('amdaModel.DownloadParam', { name: item });
}
arrayRec.push(r);
});
}
this.paramGrid.getStore().loadData(arrayRec);
},
// parameter name -> alias
updateConstruct : function(oldval,newval) {
var index = this.paramGrid.store.findExact('name', oldval);
if (index != -1) {
this.paramGrid.getStore().getAt(index).set('name',newval);
this.paramGrid.getStore().getAt(index).set('text',newval);
}
},
setObject : function(obj) {
this.object = obj;
this.loadObject();
},
/**
* update this.object from form
*/
updateObject : function()
{
// get the basic form
var tabPanel = this.formPanel.down();
var downloadSrc = tabPanel.items.indexOf(tabPanel.getActiveTab());
var basicForm = this.formPanel.getForm();
var updateStatus = true;
var values = basicForm.getValues();
// data download
if (downloadSrc === 0)
{
var timeformat = basicForm.findField('timeformat').getRawValue();
var timeSource = this.timeSelector.getActiveTimeSource();
var structure = values.filestructure;
var sampling = values.sampling ? values.sampling : 600;
var refparamSampling = values.refparamsampling == 'on';
var fileprefix = values.fileprefix ? values.fileprefix : '';
var fileformat = values.fileformat;
var compression = values.compression;
var fieldsWithoutName = basicForm.getFields().items;
Ext.Array.each(fieldsWithoutName, function(item, index,allItems){
if (!item.isValid()) {
if ((timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) &&
((item.name == 'startDate') || (item.name == 'stopDate') || (item.name == 'duration'))) {
updateStatus = true;
}
else {
// set update isn't allowed
updateStatus = false;
return false;
}
}
}, this);
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`');
updateStatus = false;
}
if (updateStatus)
{
/// real object update
// update TimeTable object with the content of form
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);
// set parameters
this.object.set('list',this.paramGrid.getStore().data.items);
this.object.set('structure', structure);
this.object.set('refparamSampling', refparamSampling);
this.object.set('sampling', sampling);
this.object.set('fileprefix',fileprefix);
this.object.set('timeformat',timeformat);
this.object.set('fileformat',fileformat);
this.object.set('compression',compression);
}
}
//TT download
else
{
var timeformat = values.timeformatTT;
var compression = values.compressionTT;
var fileformat = values.fileformatTT;
this.object.set('timeTables',this.TTGrid.getStore().data.items);
this.object.set('timeformatTT',timeformat);
this.object.set('fileformatTT',fileformat);
this.object.set('compressionTT',compression);
}
this.object.set('downloadSrc',downloadSrc);
// return the update status
return updateStatus;
},
/**
* load this.object into form
*/
loadObject : function(){
if (!this.object.get('timeformat'))
this.object.set('timeformat', this.timeformatData[0][0]);
if (!this.object.get('timeformatTT'))
this.object.set('timeformatTT', this.timeformatData[0][0]);
if (!this.object.get('fileformat'))
this.object.set('fileformat', this.fileformatData[0][0]);
if (!this.object.get('fileformatTT'))
this.object.set('fileformatTT', this.fileformatTTData[0][0]);
if (!this.object.get('compression'))
this.object.set('compression', this.filecompressData[1][0]);
if (!this.object.get('compressionTT'))
this.object.set('compressionTT', this.filecompressData[1][0]);
// load object into form
this.formPanel.getForm().loadRecord(this.object);
// set object's TTs into the timeselector
this.addTTs(this.object.get('timeTables'));
// set parameters
this.addParams(this.object.get('list'));
},
/**
* download method called by 'Download' button to launch the download process
*/
doDownload : function(){
var downloadModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.download.id);
if (downloadModule)
downloadModule.linkedNode.execute();
// fire execution
// this.object.fireEvent('execute',this.object.dirty);
},
actionItem: function(grid, cell, cellIndex, record, row, recordIndex, e){
if (cellIndex == 3)
grid.getStore().remove(record);
else if (cellIndex == 2)
this.editParameterArgs(record.get('name'));
},
editParameterArgs: function(name) {
var paramArgsPlug = this.getPlugin('download-param-arguments-plugin');
if (paramArgsPlug)
paramArgsPlug.show(name);
},
onApplyParameterArgs : function(parentUI, paramId, values) {
var selection = parentUI.paramGrid.getView().getSelectionModel().getSelection()[0];
selection.set('type', values.type ? values.type : 0);
selection.set('dim1', values.dim_1 ? values.dim_1 : '');
selection.set('dim2', values.dim_2 ? values.dim_2 : '');
parentUI.paramGrid.getView().refresh();
},
onFileStructureChange : function(combo, newValue, oldValue){
if (!this.formPanel)
return;
var refParamCheck = this.formPanel.getForm().findField('refparamsampling');
var samplingField = this.formPanel.getForm().findField('sampling');
if (samplingField && newValue !== oldValue) {
refParamCheck.setDisabled(newValue == 2);
samplingField.setDisabled((newValue == 2) || refParamCheck.getValue());
}
},
onRefParamSamplingChange : function(check, newValue, oldValue){
if (!this.formPanel)
return;
var samplingField = this.formPanel.getForm().findField('sampling');
var structureCombo = this.formPanel.getForm().findField('filestructure');
if (samplingField && newValue !== oldValue)
samplingField.setDisabled((structureCombo.getValue() == 2) || check.getValue());
},
/**
* Check if changes were made before closing window
* @return false
*/
fclose : function() {
return false;
},
init : function (config){
this.timeSelector = new amdaUI.TimeSelectorUI({id: 'downloadTimeSelector',flex: 1});
this.paramGrid = Ext.create('Ext.grid.Panel', {
flex: 2,
store : Ext.create('Ext.data.Store', { model: 'amdaModel.DownloadParam'} ),
columns: [
{ xtype: 'rownumberer', width: 20 },
{
header: "Parameter Name",
dataIndex: 'name',
flex:1,
sortable: false,
menuDisabled : true ,
renderer: function (val, meta, rec) {
var fullVal = val;
switch (rec.get('type')) {
case 0:
//scalar - nothing to do
break;
case 1:
//Tab1D
if ((rec.get('dim1') != '') && (rec.get('dim1') != '*'))
fullVal += '('+rec.get('dim1')+')';
else if ((rec.get('dim2') != '') && (rec.get('dim2') != '*'))
fullVal += '('+rec.get('dim2')+')';
break;
case 2:
//Tab2D
var dim1 = rec.get('dim1') != '' ? rec.get('dim1') : "*";
var dim2 = rec.get('dim2') != '' ? rec.get('dim2') : "*";
if ((dim1 != '*') || (dim2 != '*'))
fullVal += '('+dim1+','+dim2+')';
}
return fullVal;
}
},
{
menuDisabled : true, width: 30, renderer: function(){
return'