blob: 31f51f1e844f029e6d510f4f5369cdea428968ef [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_Chart(p_viewmodel, p_options) {
"use strict";
/** constructor */
var v_viewmodel = p_viewmodel;
var v_options = p_options;
var v_dataPaths = [];
var v_visible = [];
/** public functions - interface for parent */
this.setSelectionToControl = function(p_selection) {};
this.setBinder = function(p_binder) {};
this.setReponseDataPath = function(p_index, p_path) {
v_dataPaths[p_index] = p_path;
};
/** public functions - interface for views */
this.getChartData = function() {
return getDatasetsAndNavigationData();
};
this.toggleSeries = function(index) {
if (v_visible[index] == undefined) {
v_visible[index] = false;
} else {
v_visible[index] = !v_visible[index];
}
};
this.isSeriesVisible = function(index) {
return v_visible[index] == undefined || v_visible[index] == true;
}
/** private functions */
function getTimelineContent(tp, stringContent) {
if (tp == 1) {
return parseInt(stringContent);
} else if (tp == 2) {
return parseFloat(stringContent);
} else if (tp == 3) {
return stringContent == "true";
} else {
return stringContent
}
}
function addTimelineData(data, timeline) {
try {
timeline = JSON.parse(timeline);
if (timeline.x.length != timeline.y.length) {
return false
} else {
for (var i = 0; i < timeline.x.length; ++i) {
data.push([timeline.x[i] * 1000, getTimelineContent(timeline.tp, timeline.y[i])]);
}
return true;
}
} catch (e) {
return false;
}
}
function getDatasetsAndNavigationData() {
var navigationData = {x: {pan: {min: -1, max: 1}, zoom: {min: 1, max: null}}, y: {pan: {min: -1, max: 1}, zoom: {min: 1, max: null}}};
var dataSets = [];
var counter = 0;
for (var i = 0; i < v_dataPaths.length; ++i) {
var response = v_viewmodel.getResponseElement(v_dataPaths[i]);
if (response != undefined) {
var request = v_viewmodel.getRequestFromPath(v_dataPaths[i]);
if (request.getData.timeline != undefined && response.node != undefined) {
var dataSet = getEmptyDataSet(counter, request != undefined ? request.getData.element : "Series" + counter);
if (addTimelineData(dataSet.data, response.node.val)) {
dataSets.push(dataSet);
++counter;
}
} else if (response != undefined && response.list != undefined && request.getData.children != undefined) {
for (var j = 0; j < request.getData.children.length; ++j) {
if (request.getData.children[j].getData.timeline != undefined) {
for (var k = 0; k < response.list.length; ++k) {
if (response.list[k].node.childVals != undefined && response.list[k].node.childVals[j] != undefined) {
var childResponse = response.list[k].node.childVals[j];
var dataSet = getEmptyDataSet(counter, response.list[k].node.val);
if (addTimelineData(dataSet.data, childResponse.node.val)) {
dataSets.push(dataSet);
++counter;
}
}
}
}
}
}
}
}
if (dataSets.length != 0 && dataSets[0].data[0] != undefined) {
navigationData.x.pan.min = dataSets[0].data[0][0] + 1;
navigationData.y.pan.min = dataSets[0].data[0][1] + 1;
}
for (var i = 0; i < dataSets.length; ++i) {
for (var j = 0; j < dataSets[i].data.length; ++j) {
navigationData.x.pan.max = Math.max(navigationData.x.pan.max, dataSets[i].data[j][0] + 1);
navigationData.x.pan.min = Math.min(navigationData.x.pan.min, dataSets[i].data[j][0] - 1);
navigationData.y.pan.max = Math.max(navigationData.y.pan.max, dataSets[i].data[j][1] + 1);
navigationData.y.pan.min = Math.min(navigationData.y.pan.min, dataSets[i].data[j][1] - 1);
}
}
return {
"dataSets": dataSets,
"navigationRanges": navigationData
}
}
function getEmptyDataSet(counter, altLabel) {
var data;
if (v_options.dataSet == undefined || v_options.dataSet[counter] == undefined) {
data = {
"label": altLabel,
"data": [],
"lines": {
"show": v_visible[counter] == undefined || v_visible[counter] == true
}
}
} else {
data = {
"label": v_options.dataSet[counter].label,
"data": [],
"color": v_options.dataSet[counter].color,
"highlightColor": v_options.dataSet[counter].highlightColor,
"lines": {
"show": v_visible[counter] == undefined || v_visible[counter] == true
}
}
}
return data;
}
}
CViewModel_Chart.getHelp = function() {
return "The viewmodel creates the data for a timeseries chart.";
};
CViewModel_Chart.providesInterface = function() {
return ["getChartData", "toggleSeries", "isSeriesVisible"];
};
CViewModel_Chart.getCustomDataSchema = function() {
return {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CViewModel_Chart",
"type": "object",
"properties": {
"dataSet": {
"type": "array",
"format": "tabs",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "If present, it will be used as the label of the data."
},
"color": {
"type": "string",
"description": "If present, it will be used as the color of the data.",
"pattern": "^#(?:[0-9a-fA-F]{3}){1,2}$"
},
"highlightColor": {
"type": "string",
"description": "If present, it will be used as the highlight color of the data.",
"pattern": "^#(?:[0-9a-fA-F]{3}){1,2}$"
}
},
"additionalProperties": false,
"required": ["label"]
}
}
},
"additionalProperties": false
};
};
//# sourceURL=CustomizableApp\ViewModels\ViewModel_Chart.js