Skip to content
Snippets Groups Projects
Commit e309d8aa authored by Eduárd Czimbalmos's avatar Eduárd Czimbalmos
Browse files

Fix UnionTable getResponseElement

parent d9cb9a34
No related branches found
No related tags found
No related merge requests found
// Copyright (c) 2000-2023 Ericsson Telecom AB Telecom AB //
// Copyright (c) 2000-2025 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 //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_UnionTable(aViewModel, aOptions) {
"use strict";
......@@ -9,10 +9,9 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
/** private members */
var mViewModel = aViewModel;
var mOptions = aOptions;
//var mRq = mViewModel.getRequest();
var mBinder;
var mResponseDataPaths = [];
var mSelections = []; // mSelectionss is a list of references to objects, each containing a field named "selection"
var mSelections = []; // mSelections is a list of references to objects, each containing a field named "selection"
var mThis = this;
var mEnlistElementName = mOptions.enlistElementName;
if (mEnlistElementName === undefined)
......@@ -22,7 +21,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
this.setSelectionToControl = function (aSelection) {
/** aSelection is a reference to an object containing a "selection" field */
mSelections.push(aSelection);
mSelections.push(aSelection);
};
this.setReponseDataPath = function (aExpectedReponseDataIndex, aReponseDataPath) {
......@@ -30,7 +29,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
};
this.setBinder = function (aBinder) {
mBinder = aBinder;
mBinder = aBinder;
};
/** public functions - Interface for views */
......@@ -65,7 +64,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
"heading": header[i],
"elementIndex": i
};
}
}
return header;
};
......@@ -73,21 +72,19 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
return mViewModel.getRequestFromPath(mResponseDataPaths[0]).getData.element;
};
this.getResponseElement = function (aReponseDataPath, aFullTableSelection) {
this.getResponseElement = function (aFullTableSelection) {
var lElement;
if (aFullTableSelection) {
aFullTableSelection.parents = [];
aFullTableSelection.depth = aReponseDataPath.length;
aFullTableSelection.path = aReponseDataPath;
}
if (aReponseDataPath) {
lElement = mViewModel.getResponseElement();
if (lElement != undefined) {
lElement = lElement[aReponseDataPath[0]];
}
if (aFullTableSelection.path) {
var pathIdx = 0;
lElement = mViewModel.getResponseElement();
if (lElement != undefined) {
lElement = lElement[aFullTableSelection.path[pathIdx]];
}
if (lElement) {
var lRq = mViewModel.getRequest()[aReponseDataPath[0]];
for (var i = 1; i < aReponseDataPath.length && lElement; ++i) {
var lRq = mViewModel.getRequest()[aFullTableSelection.path[pathIdx]];
// need to select the table data from the path, which is the last two element
for (; pathIdx < aFullTableSelection.path.length - 1 && lElement; ++pathIdx) {
if (lElement.list && lRq.getData.selection && lRq.getData.selection.length > 0) {
if (aFullTableSelection) {
aFullTableSelection.depth--;
......@@ -99,67 +96,76 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
aFullTableSelection.path = aFullTableSelection.path.slice(1);
}
if (lElement.list[lRq.getData.selection[0]] && lElement.list[lRq.getData.selection[0]].node.childVals) {
lElement = lElement.list[lRq.getData.selection[0]].node.childVals[aReponseDataPath[i]];
lElement = lElement.list[lRq.getData.selection[0]].node.childVals[aFullTableSelection.path[pathIdx]];
} else {
lElement = undefined;
break;
}
} else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
/**/
} else if (lElement.node && lElement.node.childVals) {
lElement = lElement.node.childVals[aReponseDataPath[i]];
aFullTableSelection.path.shift();
aFullTableSelection.depth--;
lElement = lElement.node.childVals[aFullTableSelection.path[pathIdx]];
} else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
// intentionally blank
} else
lElement = {
"error" : "cannot determine node"
};
if (lRq.getData.children)
lRq = lRq.getData.children[aReponseDataPath[i]];
if (lRq.getData.children) {
lRq = lRq.getData.children[aFullTableSelection.path[pathIdx]];
}
}
}
}
}
return lElement;
};
this.getTable = function () {
var aFullTableSelection = {};
var response = mThis.getResponseElement(mResponseDataPaths[0], aFullTableSelection);
var pathCopy = mcopy(mResponseDataPaths[0]);
var aFullTableSelection = {
parents: [],
depth: pathCopy.length,
path: pathCopy
};
var response = mThis.getResponseElement(aFullTableSelection);
return {
selection : mSelections[0] ? mSelections[0].selection : undefined,
table : (response === undefined) ? [] : flattenResponseElement(response.list, aFullTableSelection.depth, 0, aFullTableSelection.parents, aFullTableSelection.path.slice(1))
};
};
this.setValue = function() {};
/** private functions */
function flattenResponseElement(arr, limit, depth, parents, path) {
function flattenResponseElement(arr, limit, depth, parents, path) {
if (arr) {
limit = limit || 0;
depth = depth || 0;
parents = parents || [];
path = path || [];
return arr.reduce(function _reduce(flat, toFlatten) {
if (limit === depth && toFlatten.node)
return flat.concat({"val": toFlatten.node.val});
else if (limit === depth && toFlatten.list)
return flat.concat([flattenResponseElement(toFlatten.list, limit, depth, parents, path)].join());
else if (limit === depth + 1 && toFlatten.node) {
if (mEnlistElementName)
return flat.concat([parents.concat([{"val": toFlatten.node.val}].concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)))]);
else
return flat.concat([flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)]);
} else if (Array.isArray(toFlatten))
return flat.concat(flattenResponseElement(toFlatten, limit, depth, parents, path));
else if (toFlatten.node && toFlatten.node.childVals && limit !== depth)
return flat.concat(flattenResponseElement([toFlatten.node.childVals[path[depth]]], limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
else if (toFlatten.node && toFlatten.node.childVals)
return flat.concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
else if (toFlatten.list)
return flat.concat(flattenResponseElement(toFlatten.list, limit, depth, parents, path));
else
console.error("flattenResponseElement met an unexpected condition. Reason: The response object is nonconformant OR not all parents have a selection!");
}, []);
limit = limit || 0;
depth = depth || 0;
parents = parents || [];
path = path || [];
return arr.reduce(function _reduce(flat, toFlatten) {
if (limit === depth && toFlatten.node)
return flat.concat({"val": toFlatten.node.val});
else if (limit === depth && toFlatten.list)
return flat.concat([flattenResponseElement(toFlatten.list, limit, depth, parents, path)].join());
else if (limit === depth + 1 && toFlatten.node) {
if (mEnlistElementName)
return flat.concat([parents.concat([{"val": toFlatten.node.val}].concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)))]);
else
return flat.concat([flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)]);
} else if (Array.isArray(toFlatten))
return flat.concat(flattenResponseElement(toFlatten, limit, depth, parents, path));
else if (toFlatten.node && toFlatten.node.childVals && limit !== depth)
return flat.concat(flattenResponseElement([toFlatten.node.childVals[path[depth]]], limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
else if (toFlatten.node && toFlatten.node.childVals)
return flat.concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
else if (toFlatten.list)
return flat.concat(flattenResponseElement(toFlatten.list, limit, depth, parents, path));
else
console.error("flattenResponseElement met an unexpected condition. Reason: The response object is nonconformant OR not all parents have a selection!");
}, []);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment