/**
* Project : AMDA-NG
* Name : UploadUI.js
* @class amdaUI.UploadUI
* @extends Ext.form.Panel
* @brief Upload Panel UI definition (View)
* @author Elena
* @version $Id: UploadPanelUI.js 2831 2015-03-26 10:33:42Z elena $
*/
Ext.define('amdaUI.UploadPanelUI', {
extend: 'Ext.form.Panel',
alias: 'widget.panelUpload',
requires : [
'amdaUI.RemoteSearchPlugin'
],
isFile : true,
isTimeTable : false,
tmpNode : null,
constructor: function(config)
{
this.init(config);
this.callParent(arguments);
},
/*
* create MyData linked node and edit in module MyData
* update myDataParams info if needed
*/
getObjectCallback : function(result,remoteEvent)
{
var t = remoteEvent.getTransaction();
if (result && !result.error)
{
// set parameter into node
var me = this;
myDesktopApp.getLoadedModule(this.tmpNode.get('moduleId'), true, function (module){
// myData
if (me.tmpNode.get('nodeType') == amdaModel.MyDataParamNode.nodeType)
{
var linkedFile = Ext.create('amdaModel.MyDataNode', {leaf : true, text : me.tmpNode.get('text')});
linkedFile.create(result.mask, result.description, result.maskDesc);
linkedFile.updateMyDataParam(result.mask,result.maskDesc);
if (!linkedFile.get('id'))
linkedFile.set('id',me.tmpNode.get('text'));
var paramObj = Ext.create(linkedFile.get('objectDataModel'), result);
linkedFile.set('object',paramObj);
me.tmpNode.set('fileObject',paramObj);
}
else
{
// Time Table or Catalog
var paramObj = Ext.create(me.tmpNode.get('objectDataModel'), result);
paramObj.set('fromPlugin',true);
if (result.intervals)
{
paramObj.set('intervals',result.intervals);
paramObj.set('nbIntervals',result.intervals.length);
}
me.tmpNode.set('object',paramObj);
}
if (module)
{
module.setLinkedNode(me.tmpNode);
module.linkedNode.editInModule();
}
});
}
else
{
// EXCEPTION : parameter not found !
myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"+this.tmpNode.get('text')+"' found!");
}
loadMask.hide();
},
/*
* form validation
* TODO markInvalid()?
*/
validate : function()
{
var values = this.getForm().getValues();
if (values['filesrc'] == 'LOCAL')
{
if (this.isFile) var locFile = this.getForm().findField('localFileName').getValue();
else if (this.isTimeTable) var locFile = this.getForm().findField('localTTName').getValue();
else var locFile = this.getForm().findField('localCatName').getValue();
if (!locFile)
{
myDesktopApp.warningMsg("Select File to Upload");
return false;
}
}
else
{
if (!values['remoteFile'] && !values['remoteTT'] && !values['remoteCat'])
{
myDesktopApp.warningMsg("Select File to Upload");
return false;
}
}
return true;
},
//TODO proper parsing
updateFormat: function(value)
{
var arrayOfStr = value.split('.');
//TODO use down method?
if (this.isFile)
{
var radios = Ext.getCmp('filefrmt');
var user_format_obj = radios.getValue();
var user_format = user_format_obj.filefrmt;
}
else if (this.isTimeTable)
{
var radios = Ext.getCmp('ttfrmt');
var user_format_obj = radios.getValue();
var user_format = user_format_obj.ttfrmt;
}
else
{
var radios = Ext.getCmp('catfrmt');
var user_format_obj = radios.getValue();
var user_format = user_format_obj.catfrmt;
}
var auto_format = user_format;
// auto define format in some special cases
//TODO name without extention => ASCII?
if (arrayOfStr.length == 1) auto_format = 'ASCII';
else
{
var suffix = arrayOfStr[arrayOfStr.length - 1].toLowerCase();
if (suffix == 'gz')
suffix = arrayOfStr[arrayOfStr.length - 2].toLowerCase() + '.gz';
switch (suffix)
{
case 'cdf' : auto_format = 'CDF'; break;
case 'cef.gz' :
case 'cef' : auto_format = 'CEF'; break;
case 'xml' : auto_format = 'VOT';
case 'vot' : auto_format = 'VOT'; break;
case 'nc' : auto_format = 'NC'; break;
case 'asc' :
case 'txt' :
default : auto_format = 'ASCII';
}
}
// set auto format : case when format was not set by user before
if (this.isFile && user_format !== auto_format) {
user_format_obj.filefrmt = auto_format;
} else if (this.isTimeTable && user_format !== auto_format) {
user_format_obj.ttfrmt = auto_format;
} else if (!this.isFile && !this.isTimeTable && user_format !== auto_format) {
user_format_obj.catfrmt = auto_format;
}
radios.setValue(user_format_obj);
},
/*
*
*/
forceUpload : function (url,format,onFinish)
{
var me = this;
var re = /http:\/\/127.0.0.1:/;
var isRemoteUrl = !re.test(url);
switch (format)
{
case 'votable' :
this.getForm().findField('filefrmt').setValue('VOT');
break;
case 'cdf' :
this.getForm().findField('filefrmt').setValue('CDF');
break;
default :
myDesktopApp.errorMsg('Not supported data receive from SAMP');
return;
}
if (!isRemoteUrl) {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
var onError = function(error) {
if (error)
myDesktopApp.errorMsg(error);
else
myDesktopApp.errorMsg("Cannot load data from this SAMP notification");
if (onFinish)
onFinish();
};
var onLoad = function(data) {
//Fake value for validation
Ext.form.field.File.superclass.setValue.call(me.getForm().findField('localFileName'), 'samp.vot');
me.getForm().findField('filesrc').setValue('LOCAL');
//Add data related to the samp notification
me.getForm().findField('sampFileName').setValue('samp.vot');
me.getForm().findField('sampData').setValue(data);
var onFinishAll = function() {
me.getForm().findField('sampFileName').reset();
me.getForm().findField('sampData').reset();
if (onFinish)
onFinish();
}
me.postUpload(onFinishAll);
};
module.loadFile(url,onLoad,onError);
});
return;
}
this.getForm().findField('filesrc').setValue('URL');
this.getForm().findField('remoteFile').setValue(url);
this.postUpload(onFinish);
},
/*
*
*/
postUpload : function(onFinish)
{
// 'global' form containing 'partial' forms
var form = this.getForm();
// special validation
if(this.validate())
{
loadMask.show();
form.submit({
scope: this,
url: 'php/uploadFile.php',
waitMsg: 'Uploading your file...',
success: function(form, o)
{
if (onFinish)
onFinish();
this.tmpNode = Ext.create(this.nodeType,{leaf : true, text : o.result.file});
AmdaAction.getUploadedObject(o.result.file, o.result.format, this.tmpNode.get('nodeType'), this.getObjectCallback, this);
loadMask.hide();
},
failure: function(form, o)
{
if (onFinish)
onFinish();
loadMask.hide();
myDesktopApp.errorMsg('Error '+o.result.error);
}
});
}
},
/*
* panel config
*/
init : function(config)
{
this.isFile = config.panelType == 'file'? true : false;
this.isTimeTable = config.panelType == 'timetable'? true : false;
// file / time table / catalog settings
if (this.isFile)
{
var title = 'File';
var items = [
{ boxLabel: 'ASCII', name: 'filefrmt', inputValue: 'ASCII', checked: true,
listeners:
{
change: function (cb, nv, ov) {
if (nv) Ext.getCmp('tf').show();
else Ext.getCmp('tf').hide();
}
}
},
{ boxLabel: 'netCDF 0) {
this.nextSibling().show();
}
if (this.getValue().indexOf('d') > 0) {
this.nextSibling().hide();
}
}
}
},
dayStart,
{
fieldLabel : 'define max time length',
name : 'timelength',
value: 'auto'
}],
listeners :
{
hide : function() {
this.items.getAt(1).hide();
}
}
};
var timeFormat = Ext.create('Ext.form.FieldSet', {
id: timeFormatId,
title: 'Time Settings',
hidden : !this.isFile,
items : [
{
xtype: 'radiogroup',
fieldLabel: 'Time Format',
labelWidth: 90,
cls: 'x-check-group-alt',
defaults : { name : 'timefrmt'},
items: [
{ boxLabel: 'standard