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

Revert "Fix UnionTable getResponseElement"

This reverts commit e309d8aa.
parent e309d8aa
No related branches found
No related tags found
1 merge request!7Revert "Fix UnionTable getResponseElement"
// Copyright (c) 2000-2025 Ericsson Telecom AB Telecom AB //
// Copyright (c) 2000-2023 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,9 +9,10 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
/** private members */
var mViewModel = aViewModel;
var mOptions = aOptions;
//var mRq = mViewModel.getRequest();
var mBinder;
var mResponseDataPaths = [];
var mSelections = []; // mSelections is a list of references to objects, each containing a field named "selection"
var mSelections = []; // mSelectionss is a list of references to objects, each containing a field named "selection"
var mThis = this;
var mEnlistElementName = mOptions.enlistElementName;
if (mEnlistElementName === undefined)
......@@ -21,7 +22,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) {
......@@ -29,7 +30,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
};
this.setBinder = function (aBinder) {
mBinder = aBinder;
mBinder = aBinder;
};
/** public functions - Interface for views */
......@@ -64,7 +65,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
"heading": header[i],
"elementIndex": i
};
}
}
return header;
};
......@@ -72,19 +73,21 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
return mViewModel.getRequestFromPath(mResponseDataPaths[0]).getData.element;
};
this.getResponseElement = function (aFullTableSelection) {
this.getResponseElement = function (aReponseDataPath, aFullTableSelection) {
var lElement;
if (aFullTableSelection.path) {
var pathIdx = 0;
lElement = mViewModel.getResponseElement();
if (lElement != undefined) {
lElement = lElement[aFullTableSelection.path[pathIdx]];
}
if (aFullTableSelection) {
aFullTableSelection.parents = [];
aFullTableSelection.depth = aReponseDataPath.length;
aFullTableSelection.path = aReponseDataPath;
}
if (aReponseDataPath) {
lElement = mViewModel.getResponseElement();
if (lElement != undefined) {
lElement = lElement[aReponseDataPath[0]];
}
if (lElement) {
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) {
var lRq = mViewModel.getRequest()[aReponseDataPath[0]];
for (var i = 1; i < aReponseDataPath.length && lElement; ++i) {
if (lElement.list && lRq.getData.selection && lRq.getData.selection.length > 0) {
if (aFullTableSelection) {
aFullTableSelection.depth--;
......@@ -96,76 +99,67 @@ 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[aFullTableSelection.path[pathIdx]];
lElement = lElement.list[lRq.getData.selection[0]].node.childVals[aReponseDataPath[i]];
} else {
lElement = undefined;
break;
}
} else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
/**/
} else if (lElement.node && lElement.node.childVals) {
aFullTableSelection.path.shift();
aFullTableSelection.depth--;
lElement = lElement.node.childVals[aFullTableSelection.path[pathIdx]];
} else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
// intentionally blank
lElement = lElement.node.childVals[aReponseDataPath[i]];
} else
lElement = {
"error" : "cannot determine node"
};
if (lRq.getData.children) {
lRq = lRq.getData.children[aFullTableSelection.path[pathIdx]];
}
if (lRq.getData.children)
lRq = lRq.getData.children[aReponseDataPath[i]];
}
}
}
}
return lElement;
};
this.getTable = function () {
var pathCopy = mcopy(mResponseDataPaths[0]);
var aFullTableSelection = {
parents: [],
depth: pathCopy.length,
path: pathCopy
};
var response = mThis.getResponseElement(aFullTableSelection);
var aFullTableSelection = {};
var response = mThis.getResponseElement(mResponseDataPaths[0], 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