blob: 1aa2c9fc8bd5d9e3de2695236757b4b7f58d4db4 [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_SetupTabs(a_viewmodel, a_options) {
"use strict";
/** constructor */
var m_Binder;
var m_options = a_options;
var m_setupModel = a_viewmodel.getSetupModel();
var m_setupList = a_viewmodel.getSetupList();
var m_hierarchy = m_options.hierarchy;
var m_parentViewmodel = a_viewmodel;
var m_conditionViewmodels = [];
var m_setupName = m_setupModel.getSetup().name;
var m_setupParams = m_setupModel.getSetup().setupParams;
function insertMissingSetups() {
var otherOrganizer = {"displayName": "other", "type": "organizer", "menuElements": []};
var setupsInHierarchy = [];
findAllSetupsInHierarchy(setupsInHierarchy, m_hierarchy.menuElements);
for (var i = 0; i < m_setupList.length; ++i) {
if (setupsInHierarchy.indexOf(m_setupList[i]) == -1)
otherOrganizer.menuElements.push({"setupName": m_setupList[i], "type": "setup"});
}
if (otherOrganizer.menuElements.length > 0)
m_hierarchy.menuElements.push(otherOrganizer);
}
function findAllSetupsInHierarchy(aFoundSetups, aMenuElements) {
for (var i = 0; i < aMenuElements.length; ++i) {
if (aMenuElements[i].setupName != undefined) {
aFoundSetups.push(aMenuElements[i].setupName);
}
if (aMenuElements[i].menuElements != undefined) {
findAllSetupsInHierarchy(aFoundSetups, aMenuElements[i].menuElements);
}
}
}
if (m_options.displayOtherSetups)
insertMissingSetups();
var m_this = this;
/** public functions - interface for parent */
this.setBinder = function(aBinder)
{
m_Binder = aBinder;
};
this.setReponseDataPath = function(aIndex, aPath) {
m_conditionViewmodels[aIndex] = new CViewModel_Condition(m_parentViewmodel, {});
m_conditionViewmodels[aIndex].setReponseDataPath(0, aPath);
};
/** public functions - interface for views */
this.getRecursiveSetups = function(callback)
{
return new CViewmodel_RecursiveSetups(m_this, m_hierarchy.menuElements, m_this.getFullNameOfSetup(m_setupName, m_setupParams), []);
};
/** public functions - interface for subviewmodels */
this.select = function(a_setup, a_setupParams)
{
m_parentViewmodel.loadSetup(a_setup, a_setupParams);
};
this.checkVisibility = function(dataPathIndex) {
if (m_conditionViewmodels[dataPathIndex] != undefined) {
return m_conditionViewmodels[dataPathIndex].getState();
} else {
return true;
}
};
this.getFullNameOfSetup = function(setupName, setupParams) {
var name = setupName;
if (setupParams != undefined) {
name += "_" + JSON.stringify(setupParams);
}
return name;
};
};
function CViewmodel_RecursiveSetups(a_parentViewmodel, a_menuElements, a_selectedSetupName, a_organizerNames) {
"use strict";
var m_setupList = [];
var m_setupNameList = [];
var m_setupParamsList = [];
var m_menuElements = a_menuElements;
var m_selectedIndex = 0;
var m_subViewModels = [];
var m_parentViewmodel = a_parentViewmodel;
var m_selectedSetupName = a_selectedSetupName;
var m_organizerNames = a_organizerNames;
var m_this = this;
var counter = 0;
var selectedElementIsFound = false;
for (var i = 0; i < m_menuElements.length; ++i) {
if (m_menuElements[i].isVisible == undefined || m_parentViewmodel.checkVisibility(m_menuElements[i].isVisible)) {
if (m_selectedSetupName != undefined && m_menuElements[i] && m_selectedSetupName == m_parentViewmodel.getFullNameOfSetup(m_menuElements[i].setupName, m_menuElements[i].setupParams)) {
m_selectedIndex = counter;
localStorage.setItem(getKey(), counter);
selectedElementIsFound = true;
break;
}
++counter;
}
}
counter = 0;
for (var i = 0; i < m_menuElements.length; ++i)
{
if (m_menuElements[i].isVisible == undefined || m_parentViewmodel.checkVisibility(m_menuElements[i].isVisible)) {
if (m_menuElements[i].displayName)
m_setupList[counter] = [m_menuElements[i].displayName];
else
m_setupList[counter] = [m_menuElements[i].setupName];
m_setupNameList[counter] = m_menuElements[i].setupName;
m_setupParamsList[counter] = m_menuElements[i].setupParams;
var setupToSelect;
if (!selectedElementIsFound)
setupToSelect = m_selectedSetupName;
if (m_menuElements[i].menuElements && m_menuElements[i].menuElements.length) {
var organizerPath = mcopy(m_organizerNames);
organizerPath.push(m_menuElements[i].displayName);
m_subViewModels[counter] = new CViewmodel_RecursiveSetups(m_parentViewmodel, m_menuElements[i].menuElements, setupToSelect, organizerPath);
if (m_subViewModels[counter].isSelectedElementFound()) {
m_selectedIndex = counter;
localStorage.setItem(getKey(), counter);
selectedElementIsFound = true;
}
}
++counter;
}
}
this.getSubViewModels = function()
{
return m_subViewModels;
};
this.getselectedSetup = function()
{
var selectedIndex = localStorage.getItem(getKey());
if (selectedIndex == undefined || selectedIndex >= m_setupNameList.length) {
selectedIndex = m_selectedIndex;
}
var selectedSetupName;
if (!m_subViewModels[selectedIndex])
return [m_setupNameList[selectedIndex], m_setupParamsList[selectedIndex]];
else
return m_subViewModels[selectedIndex].getselectedSetup();
};
this.getList = function()
{
return {
selections: [[m_selectedIndex]],
values: [m_setupList]
};
};
this.select = function(a_Index)
{
m_selectedIndex = a_Index;
localStorage.setItem(getKey(), m_selectedIndex);
var selected = m_this.getselectedSetup();
m_parentViewmodel.select(selected[0], selected[1]);
};
this.isSelectedElementFound = function() {
return selectedElementIsFound;
};
function getKey() {
var key = "setupTabSelection";
for (var i = 0; i < m_organizerNames.length; ++i) {
key += "_" + m_organizerNames[i];
}
return key;
}
}
CViewModel_SetupTabs.getHelp = function() {
return "A viewmodel that contains the setup hierarchy.";
};
CViewModel_SetupTabs.providesInterface = function() {
return ["getRecursiveSetups"];
};
CViewModel_SetupTabs.getCustomDataSchema = function() {
return {
"$schema" : "http://json-schema.org/draft-04/schema#",
"definitions": {
"setup": {
"title": "Setup",
"description": "defines a setup",
"type": "object",
"additionalProperties": false,
"properties": {
"displayName": {
"title": "display name",
"description": "the name that is displayed",
"type": "string"
},
"setupName": {
"title": "setup name",
"description": "the name of the setup",
"type": "string"
},
"type": {
"type": "string",
"enum": ["setup"]
},
"isVisible": {
"type": "integer",
"description": "the data path index of a connected request that returns a bool value or contains a filter"
},
"setupParams": {
"type": "object",
"additionalProperties": true,
"properties": {}
}
},
"required": ["setupName", "type"]
},
"organizer": {
"title": "Organizer",
"description": "defines an organizer which can contain additional organizers and setups",
"type": "object",
"additionalProperties": false,
"properties": {
"displayName": {
"title": "display name",
"description": "the name that is displayed",
"type": "string"
},
"type": {
"type": "string",
"enum": ["organizer"]
},
"menuElements": {
"$ref" : "#/definitions/menuElements"
},
"isVisible": {
"type": "integer",
"description": "the data path index of a connected request that returns a bool value or contains a filter"
}
},
"required" : ["displayName", "type"]
},
"menuElements": {
"title": "Menu elements",
"description": "the list of menu elements",
"type": "array",
"format": "tabs",
"items": {
"title": "menu element",
"oneOf" : [
{
"$ref" : "#/definitions/organizer"
},
{
"$ref" : "#/definitions/setup"
}
]
}
}
},
"title": "Setup hierarchy",
"type" : "object",
"additionalProperties" : false,
"properties" : {
"hierarchy": {
"description": "The setup hierarchy.",
"type": "object",
"properties": {
"menuElements" : {
"$ref" : "#/definitions/menuElements"
}
},
"additionalProperties" : false
},
"displayOtherSetups": {
"description": "Whether we want to display the other setups not included in the hierarchy.",
"type": "boolean",
"format": "checkbox",
"default": true
}
}
};
};
//# sourceURL=CustomizableApp\ViewModels\ViewModel_SetupTabs.js