PlotRequestObject.js 12.8 KB
/**
 * Project      : AMDA-NG
 * Name         : PlotRequestObject.js
 * @class   amdaPlotObj.PlotRequestObject
 * @extends amdaModel.AmdaTimeObject
 * @brief   Plot Request Business Object Definition 
 * @author  Benjamin Renard
 * @version $Id: PlotTabObject.js benjamin $
 ******************************************************************************
 *    FT Id     :   Date   : Name - Description
 ******************************************************************************
 *	:           :22/07/2015: BRE  - file creation
 *	             20/03/2020: BRE  - full rework
 */
 
 		
Ext.define('amdaPlotObj.PlotRequestObject', {
	extend: 'amdaModel.AmdaTimeObject',
	idProperty: 'id',
	
	requires: [
	           'amdaPlotObj.PlotObjectConfig',
	           'amdaPlotObj.PlotPanelObject',
	           'amdaPlotObj.PlotLayoutVerticalObject',
	           'amdaPlotObj.PlotLayoutAutoObject',
	           'amdaPlotObj.PlotLayoutManualObject'
	],
	
	fields : [
              {name: 'tab-index', type: 'int', defaultValue: 0, persist: false},
              {name: 'tab-title', type: 'string', defaultValue: '', persist: false},
              {name: 'multi-selected', type: 'boolean', defaultValue: false, persist: false},

              {name: 'file-format', type: 'string'},
              {name: 'file-output', type: 'string'},
              {name: 'file-prefix', type: 'string'},
              {name: 'one-file-per-interval', type: 'boolean'},

	      {name: 'tree-full-view', type: 'boolean'},
	      {name: 'page-node-state', type: 'int', defaultValue: 2}, //0 : collapsed, 1 : expanded, 2 : not set 
	      {name: 'panels-node-state', type: 'int', defaultValue: 2},  //0 : collapsed, 1 : expanded, 2 : not set

	      {name: 'page-title-text', type: 'string'},
              {name: 'page-title-color', type: 'string'},
              {name: 'page-title-position', type: 'string'},
              {name: 'page-title-alignment', type: 'string'},
              {name: 'page-title-font-activated', type: 'boolean'},
              {name: 'page-title-font-name', type: 'string'},
              {name: 'page-title-font-size', type: 'int'},
              {name: 'page-title-font-bold', type: 'boolean'},
              {name: 'page-title-font-italic', type: 'boolean'},
              {name: 'page-margins-activated', type: 'boolean'},
              {name: 'page-margin-x', type: 'float'},
              {name: 'page-margin-y', type: 'float'},
              {name: 'page-mode', type: 'string'},
              {name: 'page-orientation', type: 'string'},
              {name: 'page-dimension', type: 'string'},
              {name: 'page-superpose-mode', type: 'boolean'},
              {name: 'page-font-activated', type: 'boolean'},
              {name: 'page-font-name', type: 'string'},
              {name: 'page-font-size', type: 'int'},
              {name: 'page-font-bold', type: 'boolean'},
              {name: 'page-font-italic', type: 'boolean'},
              {name: 'page-layout-type', type: 'string'},
              {name: 'page-layout-object', type: 'auto', defaultValue: null},
              {name: 'last-panel-id', type: 'int', defaultValue: 0}
    ],
    
    associations : [
              {
            	  type : 'hasMany', 
            	  model : 'amdaPlotObj.PlotPanelObject',
            	  name  : 'panels'
              }
    ],
    
    constructor: function(){
        var me = this;
        me.callParent(arguments);
        if ((arguments.length > 0) && arguments[0])
        {
        	if (arguments[0].panels)
        		me.loadPanels(arguments[0].panels);
        	if (arguments[0]['page-layout-object'])
        		me.loadLayoutObject(arguments[0]['page-layout-object']);
        }
        else
        {
        	//new object, set default fields values
        	me.setDefaultValues();
        }
        this.dirty = false;
    },
    
    loadPanels: function(panels)
    {
       this.panels().loadData(panels);
       this.updatePanelIndex();
    },
    
    loadLayoutObject: function(layout)
    {
    	this.set('page-layout-object', this.createLayoutByType(this.get('page-layout-type'), layout));
    	if (this.get('page-layout-object') != null)
    		this.get('page-layout-object').dirty = false;
    },
    
    createNewPanel: function() {
    	this.set('last-panel-id', this.get('last-panel-id') + 1);
    	var recs = this.panels().add({id : this.get('last-panel-id')});
    	recs[0].setDefaultValues();
    	this.dirty = true;
    	this.updatePanelIndex();
		return recs[0];
    },
    
    removePanelById: function(panelId) {
    	//Retrieve panel record
    	var panelRecord = this.panels().getById(panelId);
    	if (panelRecord == null)
    		return false;
    	this.panels().remove(panelRecord);
    	this.dirty = true;
    	this.updatePanelIndex();
    	return true;
    },
    
    updatePanelIndex: function() {
    	this.panels().each(function(panel, index) {
    		panel.set('panel-index', index);
    	});
    },
    
    createLayoutByType : function(layoutType, data)
    {
    	//Create layout object in relation with the type
    	switch (layoutType)
    	{
    	case 'vertical' :
    		return new amdaPlotObj.PlotLayoutVerticalObject(data);
    	case 'auto' :
    		return new amdaPlotObj.PlotLayoutAutoObject(data);
    	case 'manual' :
    		return new amdaPlotObj.PlotLayoutManualObject(data);
     	default :
     		return null;
    	}
    },
    
    setLayout: function(layoutType)
    {
    	if (layoutType == this.get('page-layout-type'))
    		return;
    	
    	this.set('page-layout-type', layoutType);
    	this.set('page-layout-object', this.createLayoutByType(layoutType));
    },
    
    setDefaultValues: function()
    {
        this.set('file-format', amdaPlotObj.PlotObjectConfig.defaultValues.file.format);
        this.set('file-output', amdaPlotObj.PlotObjectConfig.defaultValues.file.output);
        this.set('file-prefix', '');
        this.set('one-file-per-interval', amdaPlotObj.PlotObjectConfig.defaultValues.file.oneFilePerInterval);
        this.set('name', '');

    	this.set('tree-full-view', amdaPlotObj.PlotObjectConfig.defaultValues.tree.fullView);
    	
    	this.set('page-title-text', '');
    	this.set('page-title-color', amdaPlotObj.PlotObjectConfig.defaultValues.page.title.color);
    	this.set('page-title-position', amdaPlotObj.PlotObjectConfig.defaultValues.page.title.position);
    	this.set('page-title-alignment', amdaPlotObj.PlotObjectConfig.defaultValues.page.title.alignment);
    	
    	this.set('page-title-font-activated', false);
    	this.set('page-title-font-name', amdaPlotObj.PlotObjectConfig.defaultValues.page.font.name);
    	this.set('page-title-font-size', amdaPlotObj.PlotObjectConfig.defaultValues.page.font.size);
    	this.set('page-title-font-bold', false);
    	this.set('page-title-font-italic', false);
    	
    	this.set('page-margins-activated', false);
    	this.set('page-margin-x', amdaPlotObj.PlotObjectConfig.defaultValues.page.xMargin);
    	this.set('page-margin-y', amdaPlotObj.PlotObjectConfig.defaultValues.page.yMargin);
    	this.set('page-mode', amdaPlotObj.PlotObjectConfig.defaultValues.page.mode);
    	this.set('page-orientation', amdaPlotObj.PlotObjectConfig.defaultValues.page.orientation);
    	this.set('page-dimension', amdaPlotObj.PlotObjectConfig.defaultValues.page.dimension);
    	this.set('page-superpose-mode', false);
    	this.set('page-font-activated', false);
    	this.set('page-font-name', amdaPlotObj.PlotObjectConfig.defaultValues.page.font.name);
    	this.set('page-font-size', amdaPlotObj.PlotObjectConfig.defaultValues.page.font.size);
    	this.set('page-font-bold', false);
    	this.set('page-font-italic', false);
    	
    	this.setLayout(amdaPlotObj.PlotObjectConfig.defaultValues.page.layout.type);
    },
    
    getPageShortInfo : function()
    {
    	var dimension = amdaPlotObj.PlotObjectConfig.getValueByKey(amdaPlotObj.PlotObjectConfig.availablePageDimensions, this.get('page-dimension'));
		var orientation = amdaPlotObj.PlotObjectConfig.getValueByKey(amdaPlotObj.PlotObjectConfig.availablePageOrientations, this.get('page-orientation'));
		
		var info = dimension+', '+orientation;
		if (this.get('page-superpose-mode'))
			info += ', Epoch superposed mode';
		return info;
    },
    
    getLayoutShortInfo : function()
    {
    	var type = amdaPlotObj.PlotObjectConfig.getValueByKey(amdaPlotObj.PlotObjectConfig.availablePageLayouts, this.get('page-layout-type'));
		return type;
    },
    
    isDirty : function()
    {
    	if (this.dirty)
    		return true;
    	
    	if (this.get('page-layout-object') != null)
    		if (this.get('page-layout-object').dirty)
    			return true;
    	
    	var d = false;
    	this.panels().each(function (panel, index) {
    		if (panel.isDirty())
    			d = true;
    	});
    	return d;
    },
    
    getJsonValues : function() 
    {
    	var requestValues  = new Object();

        requestValues['nodeType'] = 'request';
        requestValues['leaf'] = true;
    	
    	requestValues['id'] = this.get('id');
        requestValues['tab-index'] = this.get('tab-index');
        requestValues['tab-title'] = this.get('tab-title');
        requestValues['name'] = this.get('name');

        requestValues['file-format'] = this.get('file-format');
        requestValues['file-output'] = this.get('file-output');
        requestValues['file-prefix'] = this.get('file-prefix');
        requestValues['one-file-per-interval'] = this.get('one-file-per-interval');

    	requestValues['tree-full-view'] = this.get('tree-full-view');
    	requestValues['page-node-state'] = this.get('page-node-state');
    	requestValues['panels-node-state'] = this.get('panels-node-state');

    	requestValues['page-title-text'] = this.get('page-title-text');
    	requestValues['page-title-color'] = this.get('page-title-color');
    	requestValues['page-title-position'] = this.get('page-title-position');
    	requestValues['page-title-alignment'] = this.get('page-title-alignment');
    	requestValues['page-title-font-activated'] = this.get('page-title-font-activated');
    	requestValues['page-title-font-name'] = this.get('page-title-font-name');
    	requestValues['page-title-font-size'] = this.get('page-title-font-size');
    	requestValues['page-title-font-bold'] = this.get('page-title-font-bold');
    	requestValues['page-title-font-italic'] = this.get('page-title-font-italic');
    	requestValues['page-margins-activated'] = this.get('page-margins-activated');
    	requestValues['page-margin-x'] = this.get('page-margin-x');
    	requestValues['page-margin-y'] = this.get('page-margin-y');
    	requestValues['page-mode'] = this.get('page-mode');
    	requestValues['page-orientation'] = this.get('page-orientation');
    	requestValues['page-dimension'] = this.get('page-dimension');
    	requestValues['page-superpose-mode'] = this.get('page-superpose-mode');
    	requestValues['page-font-activated'] = this.get('page-font-activated');
    	requestValues['page-font-name'] = this.get('page-font-name');
    	requestValues['page-font-size'] = this.get('page-font-size');
    	requestValues['page-font-bold'] = this.get('page-font-bold');
    	requestValues['page-font-italic'] = this.get('page-font-italic');
    	
    	requestValues['timesrc'] =  this.get('timesrc');       
        // if there's at least one timeTable name into 'timeTables' collection
        if (this.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.get('timeTables') && this.get('timeTables').length){
            // get complete timeTables collection
            var timeTables = this.get('timeTables');	    
            // init an empty array for timeTables
            requestValues['timeTables'] = [];
            // for each interval record
            Ext.Array.each(timeTables, function(item, index, all){
            	if (!item.$className) {
            		requestValues['timeTables'][index] = {timeTableName : item.timeTableName, id : item.id};
            	}
            	// get Json simplified value 
            	else {
            		requestValues['timeTables'][index] = item.getJsonValues();
            	}
            });            
        } else {
        	requestValues['startDate'] = this.get('startDate');	
            requestValues['stopDate'] = this.get('stopDate'); 
            requestValues['durationDay'] = this.get('durationDay');
            requestValues['durationHour'] = this.get('durationHour');
            requestValues['durationMin'] = this.get('durationMin');
            requestValues['durationSec'] = this.get('durationSec');
        }
    	
    	requestValues['page-layout-type'] = this.get('page-layout-type');
    	if (this.get('page-layout-object') != null)
    		requestValues['page-layout-object'] = this.get('page-layout-object').getJsonValues();
    	
    	requestValues['panels'] = [];
    	
    	this.panels().each(function (panel, index) {
    		requestValues['panels'][index] = panel.getJsonValues();
    	});
    	
    	requestValues['last-panel-id'] = this.get('last-panel-id');
    	
    	return requestValues;
    }
});