blob: accec4cc50fff9442e5b2be0db0a1d616008bfd4 [file] [log] [blame]
// Copyright (c) 2000-2019 Ericsson Telecom AB 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 DSHelpToRequest_full(aHelp)
{
//mlog("aHelp: ", aHelp);
//mlog("aHelp JSON: ",JSON.stringify(aHelp, null, 2));
//mlog("Requests.ExecCtrl: ", Requests.ExecCtrl);
var aParentIndexes = [];
//for (var i =3; i < 4; i++) // currently only ExecCtrl
var lHelp=JSON.parse(JSON.stringify(aHelp));
if (lHelp.sources)
{
for (var i = 0; i < lHelp.sources.length; i++)
{
PreprocessHelpList(lHelp.sources[i].dataElements, lHelp.sources[i].source, lHelp.sources[i].dataElements, aParentIndexes);
}
}
var lReq = [];
aParentIndexes = [];
if (lHelp.sources)
{
for (var i = 0; i < lHelp.sources.length; i++)
{
HelpListToRequestList(lReq, lHelp.sources[i].dataElements, lHelp.sources[i].source, lHelp.sources[i].dataElements, aParentIndexes);
}
}
//mlog("lReq: ", lReq);
//mlog("lReq JSON: ",JSON.stringify(lReq, null, 2));
return lReq;
//return JSON.stringify(lReq, null, 2);
}
// children root index of child at current level
function PreprocessHelpList(aHelpList, aSourceName, aHelpListTop, aParentIndexes)
{
var tempParentIndexes = JSON.stringify(aParentIndexes, null, 2); // TODO replace it
for (var i = 0; i < aHelpList.length; i++)
{
aParentIndexes = JSON.parse(tempParentIndexes);
if (aHelpList[i].children != undefined)
{
aParentIndexes[aParentIndexes.length] = i;
PreprocessHelpList(aHelpList[i].children, aSourceName, aHelpListTop, aParentIndexes);
}
CalcParamsOrInsertParents(aHelpList[i].dataElement, aHelpListTop, aParentIndexes, i,false);
}
}
function HelpListToRequestList(aOutReq, aHelpList, aSourceName, aHelpListTop, aParentIndexes)
{
var tempParentIndexes = JSON.stringify(aParentIndexes, null, 2); // TODO replace it
for (var i = 0; i < aHelpList.length; i++)
{
aParentIndexes = JSON.parse(tempParentIndexes);
var idx = aOutReq.length;
var lReq = [];
if (aHelpList[i].children != undefined)
{
aParentIndexes[aParentIndexes.length] = i;
HelpListToRequestList(lReq, aHelpList[i].children, aSourceName, aHelpListTop, aParentIndexes);
}
aOutReq[idx] = {};
aOutReq[idx].getData = {
source: aSourceName,
element: aHelpList[i].dataElement.name,
selection: null,
params: CalcParamsOrInsertParents(aHelpList[i].dataElement, aHelpListTop, aParentIndexes, i, true),
children: lReq
};
}
}
function CalcParamsOrInsertParents(aDataElement, aHelpListTop, aParentIndexes, aCurrentIndex, aCalcParams)
{
//mlog("*** CalcParamsOrInsertParents processing: ", aDataElement);
var lParameters = [];
var lParams = [];
if (aDataElement.parameters != undefined)
{
lParameters = aDataElement.parameters;
for (var i = 0; i < lParameters.length; i++)
{
//mlog("processing parameter #",JSON.parse(JSON.stringify(i)),": ", JSON.parse(JSON.stringify(lParameters[i].name)));
lParams[i]= {};
lParams[i].paramName = lParameters[i].name;
if (lParameters[i].typeDescriptor.reference != undefined)
{
var lLevel=0;
//if (aCalcParams == true)
// mlog("\\\\\\\\\\searching for", lParameters[i].typeDescriptor.reference.typeName);
var lNestingLevel = GetReferenceNestingLevel(lParameters[i].typeDescriptor.reference.typeName, aHelpListTop, lLevel, aParentIndexes);
if (aCalcParams === false)
{
if (lNestingLevel === -1)
{
//mlog("ELEMENT NOT FOUND IN PARENT TREE: ",lParameters[i].typeDescriptor.reference.typeName);
lLevel = 0;
var lParentIndexes = [];
//mlog("\\\\\\\\\\searching globally for", lParameters[i].typeDescriptor.reference.typeName);
//mlog("******searching in: ", aHelpListTop);
lNestingLevel = GetReferenceNestingLevelFromFullBranch(lParameters[i].typeDescriptor.reference.typeName, aHelpListTop, lLevel, lParentIndexes);
//mlog("*****lParentIndexes calculated:", lParentIndexes, " nesting level: ", lNestingLevel);
if (lNestingLevel === -1)
{
mlog("!!!!THIS SHOULD NEVER HAPPEN2!!!! dataelement: ", aDataElement);
}
else
{
InsertParents(aCurrentIndex,aParentIndexes,lParentIndexes,aHelpListTop);
}
}
}
else
{
if (lNestingLevel === -1)
{
mlog("!!!!THIS SHOULD NEVER HAPPEN!!!! dataelement: ", aDataElement);
}
lParams[i].paramValue= "%Parent"+lNestingLevel+"%";
//mlog("paramValue of ", lParams[i].paramName, ": ",lParams[i].paramValue)
}
}
if (lParameters[i].typeDescriptor.valueType != undefined && aCalcParams === true)
{
lParams[i].paramValue= lParameters[i].exampleValue;
}
}
}
return lParams;
}
function GetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpCurrent, aLevel)
{
if (aParentIndexesCurrent.length === aLevel)
{
return aHelpCurrent[aCurrentIndex];
}
++aLevel;
return GetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpCurrent[aParentIndexesCurrent[aLevel-1]].children, aLevel);
}
function SetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpCurrent, aLevel, aElementToSet)
{
if (aParentIndexesCurrent.length === aLevel)
{
aHelpCurrent[aCurrentIndex] = aElementToSet;
}
else
{
++aLevel;
SetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpCurrent[aParentIndexesCurrent[aLevel-1]].children, aLevel, aElementToSet);
}
}
function InsertParents(aCurrentIndex, aParentIndexesCurrent, aParentIndexesSource, aHelpListTop)
{
//mlog("*********InsertParents*************");
//mlog("aCurrentIndex: ", aCurrentIndex)
//mlog("aParentIndexesCurrent: ", aParentIndexesCurrent)
//mlog("aParentIndexesSource: ", aParentIndexesSource)
//mlog("aHelpListTop: ", JSON.parse(JSON.stringify(aHelpListTop,null,2)));
var lLevel = 0;
var lCurrentElement = GetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpListTop, lLevel);
//mlog("current element: ", lCurrentElement);
var lSourceBranch = [];
lLevel = 0;
GetSourceBranch(aParentIndexesSource, aHelpListTop, lSourceBranch, lLevel, lCurrentElement);
//mlog("sourceBranch: ", lSourceBranch);
//lCurrentElement = lSourceBranch[0];
lLevel = 0;
SetCurrentElement(aCurrentIndex, aParentIndexesCurrent, aHelpListTop, lLevel, lSourceBranch[0]);
//mlog("aHelpListTopAfter: ", JSON.parse(JSON.stringify(aHelpListTop)));
}
function GetSourceBranch(aParentIndexesSource, aHelpListTop, aSourceBranch, aLevel, aCurrentElement)
{
if (aParentIndexesSource.length === aLevel)
{
aSourceBranch[0] = aCurrentElement;
}
else
{
aSourceBranch[0] = JSON.parse(JSON.stringify(aHelpListTop[aParentIndexesSource[aLevel]]));
aSourceBranch[0].children = [];
++aLevel;
GetSourceBranch(aParentIndexesSource, aHelpListTop[aParentIndexesSource[aLevel-1]].children, aSourceBranch[0].children, aLevel, aCurrentElement);
}
}
function GetReferenceNestingLevel(aTypeName, aCurrentBranch, aLevel, aParentIndexes)
{
//mlog("\\\\\\\\\\\\ searchin' in: ", aCurrentBranch, aParentIndexes);
var lRetVal=-1;
var i = aParentIndexes[aLevel];
if (aCurrentBranch[i] != undefined)
{
//mlog("---------aCurrentBranch[i].dataElement.typeDescriptor.typeName / aTypeName", aCurrentBranch[i].dataElement.typeDescriptor.typeName, "/", aTypeName, aLevel);
if (aCurrentBranch[i].dataElement.typeDescriptor != undefined && aCurrentBranch[i].dataElement.typeDescriptor.typeName === aTypeName)
{
lRetVal = aLevel;
}
else if (aCurrentBranch[i].children != undefined)
{
lRetVal = GetReferenceNestingLevel(aTypeName, aCurrentBranch[i].children, aLevel+1, aParentIndexes);
}
}
//mlog("///////////returning: ", lRetVal);
return lRetVal;
}
function GetReferenceNestingLevelFromFullBranch(aTypeName, aCurrentBranch, aLevel, aParentIndexes)
{
//mlog("**********************GetReferenceNestingLevelFromFullBranch*******************")
//mlog("aCurrentBranch: ",aCurrentBranch);
var lRetVal = -1;
for (var i = 0; i < aCurrentBranch.length; i++)
{
aParentIndexes[aLevel] = i;
if (aCurrentBranch[i] != undefined)
{
//mlog("currentBranch[", i,"]=",aCurrentBranch[i]);
//mlog("-------typeName: ",aCurrentBranch[i].dataElement.typeDescriptor.typeName, ":", aTypeName);
if (aCurrentBranch[i].dataElement.typeDescriptor != undefined && aCurrentBranch[i].dataElement.typeDescriptor.typeName === aTypeName)
{
lRetVal = aLevel;
return lRetVal;
}
if (aCurrentBranch[i].children != undefined)
{
++aLevel;
lRetVal = GetReferenceNestingLevelFromFullBranch(aTypeName, aCurrentBranch[i].children, aLevel, aParentIndexes);
if (lRetVal !== -1)
{
return lRetVal;
} else {
--aLevel;
aParentIndexes.pop();
}
}
}
}
return lRetVal;
}