blob: a81352037a7a4bb039dd76fee14338add8e0d82c [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_DistributionChart(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() {
var data = getDatasetsAndNavigationData();
data.ticks = getTicks();
return data;
};
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 getTicks() {
var list = [];
if (v_options.intervallimits != undefined) {
list = v_options.intervallimits;
} else {
var response = v_viewmodel.getResponseElement(v_dataPaths[0]);
if (response != undefined && response.list != undefined) {
for (var i = 0; i < response.list.length; ++i) {
list[i] = response.list[i].node.val;
}
}
}
var listToReturn = [];
if (list.length > 0) {
listToReturn[0] = [1, "< " + list[0]];
listToReturn[list.length] = [list.length + 1, list[list.length - 1] + " <"];
for (var i = 0; i < list.length - 1; ++i) {
listToReturn[i + 1] = [i + 2, list[i] + " - " + list[i + 1]];
}
}
return listToReturn;
}
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 dataPathIndexOfValue = 0;
if (v_options.intervallimits == undefined && v_dataPaths.length > 1) {
dataPathIndexOfValue = 1;
}
var counter = 0;
var response = v_viewmodel.getResponseElement(v_dataPaths[dataPathIndexOfValue]);
if (response != undefined && response.list != undefined) {
var request = v_viewmodel.getRequestFromPath(v_dataPaths[dataPathIndexOfValue]);
var dataSet = getEmptyDataSet(counter, request != undefined ? request.getData.element : "Series" + counter);
for (var j = 0; j < response.list.length; ++j) {
dataSet.data.push([j + 1, response.list[j].node.val]);
}
dataSets.push(dataSet);
}
for (var i = 0; i < dataSets.length; ++i) {
navigationData.x.pan.max = Math.max(navigationData.x.pan.max, dataSets[i].data.length + 1);
for (var j = 0; j < dataSets[i].data.length; ++j) {
navigationData.y.pan.max = Math.max(navigationData.y.pan.max, dataSets[i].data[j][1] + 1);
}
dataSets[i].bars.barWidth = 0.8 / dataSets.length;
}
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": false
},
"bars": {
"show": v_visible[counter] == undefined || v_visible[counter] == true,
"barWidth": 0
}
}
} else {
data = {
"label": v_options.dataSet[counter].label,
"data": [],
"color": v_options.dataSet[counter].color,
"highlightColor": v_options.dataSet[counter].highlightColor,
"lines": {
"show": false
},
"bars": {
"show": v_visible[counter] == undefined || v_visible[counter] == true,
"barWidth": 0
}
}
}
return data;
}
}
CViewModel_DistributionChart.getHelp = function() {
return "The viewmodel creates the data and labels for a distribution chart.\n" +
"Both the labels and values can come from a dataElement.\n" +
"If the custom data does not contain the intervallimits, the first data connection will be used to determine them.";
};
CViewModel_DistributionChart.providesInterface = function() {
return ["getChartData", "toggleSeries", "isSeriesVisible"];
};
CViewModel_DistributionChart.getCustomDataSchema = function() {
return {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CViewModel_DistributionChart",
"type": "object",
"properties": {
"intervallimits": {
"description": "The predefined values for the interval limits of the distribution chart.",
"type": "array",
"format": "table",
"items": {
"type": "number",
"title": "limit"
}
},
"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_DistributionChart.js