blob: b00e20111d38a1075d96ccfaf956c7f6a81040ff [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 v1.0 which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_ElementRelay(aViewModel, aOptions)
{
"use strict";
/** private members */
var mViewModel;
var mOptions;
var mRq;
var mBinder;
var mReponseDataPaths;
var mSelections = []; // mSelectionss is a list of references to objects, each containing a field named "selection"
/** constructor */
mViewModel = aViewModel;
mRq = mViewModel.getRequest();
mOptions = aOptions;
mReponseDataPaths = [];
/** public functions - Interface for parent */
this.expectedReponseData = function() // TODO: might be put in prototype (without header info)
{
return[{type: "elementRelay"}, {type: "string"}];
};
this.setSelectionToControl = function(aSelection)
{
mSelections.push(aSelection);
};
this.setReponseDataPath = function(aDataPathIndex, aReponseDataPath)
{
mReponseDataPaths[aDataPathIndex] = aReponseDataPath;
};
this.setBinder = function(aBinder)
{
mBinder = aBinder;
};
/** public functions - Interface for views */
this.select = function(aIndex)
{
for (var i = 0; i < mSelections.length; ++i)
mViewModel.select(mSelections[i], aIndex);
mBinder.notifyChange(true);
};
this.getOptions = function()
{
return mOptions;
};
this.getList = function()
{
return prepareResponse(getSimpleDataFromResponseElement);
};
this.getListWithElementInfo = function()
{
return prepareResponse(getDataFromResponseElement);
};
this.setValue = function(aDataPathIndex, aValue, aIndexInList, aLastSelectionIndexes, aDataHasBeenSet, aAdditionalData)
{
mViewModel.setResponseElement(mReponseDataPaths[aDataPathIndex], aValue, aIndexInList, aLastSelectionIndexes, aDataHasBeenSet, aAdditionalData);
};
/** private functions */
function prepareResponse(aGetValueFunction)
{
var lValues = [];
var lSelections = [];
for (var i = 0; i < mReponseDataPaths.length; ++i)
{
lValues[i] = aGetValueFunction(mViewModel.getResponseElement(mReponseDataPaths[i]), mViewModel.getRequestFromPath(mReponseDataPaths[i]));
}
for (var i = 0; i < mSelections.length; ++i)
{
lSelections[i] = mSelections[i] ? mSelections[i].selection : undefined;
}
return {
selections: lSelections,
values: lValues
};
}
function getRow(node)
{
var row = [];
row.push(node.val);
if (node.childVals)
{
var lChildren = [];
for (var j = 0; j < node.childVals.length; ++j)
{
if (node.childVals[j].node)
{
lChildren.push(node.childVals[j].node.val);
}
else if (node.childVals[j].list)
{
var lList = [];
for (var i = 0; i < node.childVals[j].list.length; ++i)
lList.push(node.childVals[j].list[i].node.val);
lChildren.push(lList);
//console.log ("lListVM::", lList);
}
}
row.push(lChildren);
}
return row;
}
function getSimpleDataFromResponseElement(lElement, aRq)
{
var lTable = [];
if (lElement)
{
if (lElement.error)
lTable.push([lElement.error]);
else if (lElement.node)
lTable.push(getRow(lElement.node));
else if (lElement.list)
{
/*if (mSelections[0] && mSelections[0][0] >= lElement.list.length)
mSelections[0][0] = 0;*/
if (mOptions.showOnlySelected != undefined && aRq.getData.selection != undefined) {
if (lElement.list.length > 0) {
if (aRq.getData.selectionValues != undefined) {
lTable.push(getRow(lElement.list[0].node));
} else {
lTable.push(getRow(lElement.list[aRq.getData.selection[0]].node));
}
}
} else {
for (var i = 0; i < lElement.list.length; ++i) {
lTable.push(getRow(lElement.list[i].node));
}
}
}
//else
//console.log("something else lElement: ", lElement)
}
return lTable;
}
function getChildren(node)
{
var lChildren = [];
if (node.childVals)
{
for (var j = 0; j < node.childVals.length; ++j)
{
if (node.childVals[j].node)
{
lChildren.push(node.childVals[j].node.val);
}
else if (node.childVals[j].list)
{
var lList = [];
for (var i = 0; i < node.childVals[j].list.length; ++i)
lList.push(node.childVals[j].list[i].node.val);
lChildren.push(lList);
}
}
}
return lChildren;
}
function getDataFromResponseElement(lElement, aRq)
{
var lData = {};
if (lElement)
{
lData.element = aRq.getData.element;
lData.selection = aRq.getData.selection;
if (lElement.error)
lData.error = lElement.error;
else if (lElement.node)
{
lData.val = lElement.node.val;
lData.isWritable = lElement.node.tp > 0;
lData.children = getChildren(lElement.node, aRq.getData)[1];
}
else if (lElement.list)
{
if (mOptions.showOnlySelected != undefined && aRq.getData.selection != undefined) {
if (lElement.list.length > 0) {
var node;
var lChildList = [];
if (aRq.getData.selectionValues != undefined) {
node = lElement.list[0].node
} else {
node = lElement.list[aRq.getData.selection[0]].node;
}
lData.val = node.val;
if (aRq.getData.children) {
var lChildren = getChildren(node);
if (aRq.getData.children) {
for (var j = 0; j < lChildren.length; ++j) {
lChildList[j] = {
element: aRq.getData.children[j].getData.element,
val:[lChildren[j]],
selection: aRq.getData.children[j].getData.selection
};
}
}
}
lData.children = lChildList;
} else {
lData.val = "";
lData.children = [];
}
} else {
var lList = [];
var lChildList = [];
for (var i = 0; i < lElement.list.length; ++i) {
lList.push(lElement.list[i].node.val);
var lChildren = getChildren(lElement.list[i].node);
if (aRq.getData.children)
{
if (lChildList.length == 0)
{
for (var j = 0; j < lChildren.length; ++j)
{
lChildList[j] = {
element: aRq.getData.children[j].getData.element,
val:[],
selection: aRq.getData.children[j].getData.selection
};
}
}
for (var j = 0; j < lChildren.length; ++j)
{
lChildList[j].val.push(lChildren[j]);
}
}
}
lData.val = lList;
lData.children = lChildList;
}
}
}
return lData;
}
}
CViewModel_ElementRelay.getHelp = function() {
var help = 'Simple interface for views.\n';
help += 'The function getList will return the following structure: {values: [[value, [children], isWritable]], selections: [[]]}\n';
help += 'The function getListWithElementInfo will return the following structure: {values: [{val: "", element: "", isWritable: boolean, selection: [], children: []}], selections: [[]]}\n';
return help;
}
CViewModel_ElementRelay.providesInterface = function() {
return ["setValue", "getListWithElementInfo", "getList", "getOptions", "select"];
};
CViewModel_ElementRelay.getCustomDataSchema = function() {
return {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CViewModel_ElementRelay",
"type": "object",
"properties": {
"showOnlySelected": {
"type": "boolean",
"format": "checkbox",
"description": "whther we only show the selected element from an iterator",
"default": true
}
}
};
};
//# sourceURL=CustomizableApp\ViewModels\ViewModel_ElementRelay.js