Commit f6fc88d9 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Refactoriza gestión de timeseries

parent 0d225125
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ define([
			this._buildChartData(sourceData);

			this._publish(this._getWidgetInstance('chartDesign').getChannel('SET_PROPS'), {
				chartsData: this.seriesData
				chartsData: this._getChartsDefinitionData()
			});
		},

+121 −19
Original line number Diff line number Diff line
define([
	'app/viewers/views/_TimeSeriesDataManagement'
	, 'dojo/_base/declare'
	'dojo/_base/declare'
	, 'dojo/_base/lang'
], function(
	_TimeSeriesDataManagement
	, declare
	declare
	, lang
) {

	return declare(_TimeSeriesDataManagement, {
	return declare(null, {
		//	summary:
		//		Extensión para la vista de detalle de actividad para el manejo de series temporales.

		constructor: function(args) {

			this.config = {
				emptySeriesData: {
				pathSeparator: '.',
				_timeseriesDefinitionList: [],
				_timeseriesStationList: [],
				_timeseriesDefinitionIndexByPath: {},
				_timeseriesStationIndexByPath: {},
				// TODO renombrar, esqueleto de 'seriesData'
				_emptySeriesData: {
					data: {
						stations: {},
						parameters: {},
@@ -25,7 +29,9 @@ define([
					parameterIndex: {},
					definitionIndex: {}
				},
				pathSeparator: '.'
				// TODO renombrar, definición de datos de timeseries disponibles para consultar
				// por ejemplo, '_chartsDefinitionData'
				seriesData: null
			};

			lang.mixin(this, this.config);
@@ -33,33 +39,106 @@ define([

		_buildChartData: function(sourceData) {

			this._dataList = [];
			this._indexDataList = {};
			this._clear();

			var parsedData = this._parseData(sourceData);
			this._generateTimeSeriesDataFromParsedData(parsedData);
			this._parseData(sourceData);
			this._generateChartsDefinitionDataFromTimeseriesInternalStructures();
		},

		_generateTimeSeriesDataFromParsedData: function(parsedData) {
		_parseData: function(item) {

			var site = item.site,
				measurementsSize = item.measurements.length,
				parameters = [],
				dataList = [];

			for (var n = 0; n < measurementsSize; n++) {
				var measurement = item.measurements[n],
					parameter = measurement.parameter,
					dataDefinition = measurement.dataDefinition,
 					index = this._isInserted(dataList, parameter.path);
 				if (index < 0) {
 					parameter.leaves = 0;
 					parameter.dataDefinitions = [dataDefinition];
 					parameter.unit = measurement.unit.name;

 					parameters.push(parameter);
 					dataList.push(parameter);
 				} else {
 					dataList[index].dataDefinitions.push(dataDefinition);
 				}
			}

			this._clear();
			site.activityId = item.activityId;
			site.leaves = parameters.length;
			dataList.push(site);

			this._addSourceDataToTimeseriesInternalStructures(dataList);
		},

		_isInserted: function(data, itemId) {

 			for (var n = 0; n < data.length; n++) {
 				if (data[n].path === itemId) {
 					return n;
 				}
 			}

 			return -1;
 		},

		_addSourceDataToTimeseriesInternalStructures: function(data) {

			for (var i = 0; i < data.length; i++) {
				var item = data[i],
					itemPath = item.path,
					isStationItem = itemPath.split(this.pathSeparator).length < 3;

				if (isStationItem) {
					this._timeseriesStationList.push(item);
					this._timeseriesStationIndexByPath[itemPath] = this._timeseriesStationList.length - 1;
				} else {
					this._timeseriesDefinitionList.push(item);
					this._timeseriesDefinitionIndexByPath[itemPath] = this._timeseriesDefinitionList.length - 1;
				}
			}
		},

		_timeseriesDefinitionListIsEmpty: function() {

			return !this._timeseriesDefinitionList || this._timeseriesDefinitionList.length === 0;
		},

		_getTimeseriesDefinitionList: function() {

			for (var i = 0; i < parsedData.length; i++) {
				var item = parsedData[i],
			return this._timeseriesDefinitionList;
		},

		_generateChartsDefinitionDataFromTimeseriesInternalStructures: function() {

			for (var i = 0; i < this._timeseriesDefinitionList.length; i++) {
				var item = this._timeseriesDefinitionList[i],
					path = item.path;

				this._insertItemInDataChart(path);
			}
		},

		// TODO renombrar
		_insertItemInDataChart: function(path) {

			if (this._indexDataList[path] === undefined || path.split(this.pathSeparator).length < 3) {
			var itemIndex = this._timeseriesDefinitionIndexByPath[path];

			if (itemIndex === undefined) {
				return false;
			}

			var item = this._dataList[this._indexDataList[path]],
				stationId = this._insertStation(this._dataList[this._indexDataList[this._getParentPath(path)]]),
			var item = this._timeseriesDefinitionList[itemIndex],
				parentPath = this._getParentPath(path),
				parentIndex = this._timeseriesStationIndexByPath[parentPath],
				parentItem = this._timeseriesStationList[parentIndex],

				stationId = this._insertStation(parentItem),
				parameterId = this._insertParameter(item),
				dataDefinitionIds = this._insertDataDefinitions(item);

@@ -75,6 +154,7 @@ define([
			return path.replace(regex, '$1');
		},

		// TODO renombrar
		_insertStation: function(itemStation) {

			if (itemStation && !this.seriesData.data.stations[itemStation.id]) {
@@ -84,6 +164,7 @@ define([
			return itemStation.id;
		},

		// TODO renombrar
		_insertParameter: function(item) {

			var parameter = lang.clone(item);
@@ -95,6 +176,7 @@ define([
			return item.id;
		},

		// TODO renombrar
		_insertDataDefinitions: function(item) {

			var ids = {},
@@ -119,6 +201,7 @@ define([
			return ids;
		},

		// TODO renombrar
		_insertOrUpdateIndex: function(stationId, parameterId, dataDefinitionIds) {

			if (!this.seriesData.stationIndex[stationId]) {
@@ -145,11 +228,30 @@ define([
			}
		},

		_getChartsDefinitionData: function() {

			return this.seriesData;
		},

		_clear: function() {

			this.inherited(arguments);

			this.seriesData = lang.clone(this.emptySeriesData);
			this._clearChartsDefinitionData();
			this._clearTimeseriesInternalStructures();
		},

		_clearChartsDefinitionData: function() {

			this.seriesData = lang.clone(this._emptySeriesData);
		},

		_clearTimeseriesInternalStructures: function() {

			this._timeseriesDefinitionList = [];
			this._timeseriesStationList = [];
			this._timeseriesDefinitionIndexByPath = {};
			this._timeseriesStationIndexByPath = {};
		}
	});
});
+3 −3
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ define([
	, "app/designs/dynamicDualContent/main/FacetsWithDynamicRightContent"
	, "app/designs/list/Controller"
	, "app/designs/list/layout/Layout"
	, 'app/details/views/_ActivityTimeSeriesDataManagement'
	, 'app/viewers/views/_TimeSeriesDataManagement'
	, "app/viewers/views/_TimeSeriesSelectionManagement"
	, "app/redmicConfig"
	, "dojo/_base/declare"
@@ -35,7 +35,7 @@ define([
	, FacetsWithDynamicRightContent
	, ListController
	, ListLayout
	, _ActivityTimeSeriesDataManagement
	, _TimeSeriesDataManagement
	, _TimeSeriesSelectionManagement
	, redmicConfig
	, declare
@@ -58,7 +58,7 @@ define([
	, ListTemplate
){
	return declare([
		EmbeddedContentSelectionInTopbar, _ActivityTimeSeriesDataManagement, _TimeSeriesSelectionManagement
		EmbeddedContentSelectionInTopbar, _TimeSeriesDataManagement, _TimeSeriesSelectionManagement
	], {
		//	summary:
		//		Vista de ChartsView.
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ define([
				activityTarget: redmicConfig.services.activity,

				intervalValue: '1q',
				_dataList: [],
				//_dataList: [],
				_pathSeparator: '.',
				_idData: null,
				embeddedButtons: {
+10 −68
Original line number Diff line number Diff line
define([
	'app/redmicConfig'
	, 'app/details/views/_ActivityTimeSeriesDataManagement'
	, "dojo/_base/declare"
	, "dojo/_base/lang"
	, "dojo/aspect"
@@ -9,6 +10,7 @@ define([
	, "redmic/modules/search/FacetsImpl"
], function(
	redmicConfig
	, _ActivityTimeSeriesDataManagement
	, declare
	, lang
	, aspect
@@ -18,7 +20,7 @@ define([
	, FacetsImpl
) {

	return declare([_Filter, _Store], {
	return declare([_Filter, _Store, _ActivityTimeSeriesDataManagement], {
		//	summary:
		//		Extensión para la vista de timeSeries para el manejo de datos.
		//	description:
@@ -31,8 +33,6 @@ define([
				dataViewActions: {},
				_listDataReturnFields: redmicConfig.returnFields.timeSeriesStationsList,
				_mapReturnFields: redmicConfig.returnFields.timeSeriesStationsMap,
				_dataList: [],
				_indexDataList: {},
				_getListDataDfd: null
			};

@@ -81,7 +81,7 @@ define([

			this._prepareDataToInject(data.features);
			if (currentEmbeddedContentKey === embeddedListKey) {
				this._injectDataToList(data.features);
				this._injectDataToList();
			} else {
				this._injectDataToMap(data);
			}
@@ -95,20 +95,19 @@ define([

		_itemAvailable: function(response) {

			var dataToInject = this._parseData(response.data.properties);
			this._parseData(response.data.properties);

			this._publish(this.browserPopup.getChannel("SHOW"));

			this._emitEvt('INJECT_DATA', {
				data: dataToInject,
				data: this._getTimeseriesDefinitionList(),
				target: this.browserPopupTarget
			});
		},

		_prepareDataToInject: function(features) {

			this._dataList = [];
			this._indexDataList = {};
			this._clearTimeseriesInternalStructures();

			for (var i = 0; i < features.length; i++) {
				this._parseData(features[i].properties);
@@ -123,66 +122,14 @@ define([
			});
		},

		_injectDataToList: function(features) {
		_injectDataToList: function() {

			this._emitEvt('INJECT_DATA', {
				data: lang.clone(this._dataList),
				data: lang.clone(this._getTimeseriesDefinitionList()),
				target: this.browserTarget
			});
		},

		_parseData: function(item) {

			var site = item.site,
				measurementsSize = item.measurements.length,
				parameters = [],
				dataList = [];

			for (var n = 0; n < measurementsSize; n++) {
				var measurement = item.measurements[n],
					parameter = measurement.parameter,
					dataDefinition = measurement.dataDefinition,
 					index = this._isInserted(dataList, parameter.path);
 				if (index < 0) {
 					parameter.leaves = 0;
 					parameter.dataDefinitions = [dataDefinition];
 					parameter.unit = measurement.unit.name;

 					parameters.push(parameter);
 					dataList.push(parameter);
 				} else {
 					dataList[index].dataDefinitions.push(dataDefinition);
 				}
			}

			site.activityId = item.activityId;
			site.leaves = parameters.length;

			dataList.push(site);
			this._addToDataList(dataList);

			return dataList;
		},

		_isInserted: function(data, itemId) {

 			for (var n = 0; n < data.length; n++) {
 				if (data[n].path === itemId) {
 					return n;
 				}
 			}

 			return -1;
 		},

		_addToDataList: function(data) {

			for (var i = 0; i < data.length; i++) {
				this._dataList.push(data[i]);
				this._indexDataList[data[i].path] = this._dataList.length - 1;
			}
		},

		_getMapData: function() {

			this._emitEvt('ADD_TO_QUERY', {
@@ -198,7 +145,7 @@ define([
				return;
			}

			if (this._dataListIsEmpty()) {
			if (this._timeseriesDefinitionListIsEmpty()) {
				this._getListDataDfd = new Deferred();
				this._getListData();
			} else {
@@ -206,11 +153,6 @@ define([
			}
		},

		_dataListIsEmpty: function() {

			return !this._dataList || this._dataList.length === 0;
		},

		_getListData: function() {

			this._emitEvt('ADD_TO_QUERY', {
Loading