parser.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. var responseObjects = p5WFS_GetFeature();
  2. var object = responseObjects[0];
  3. console.log('p5WFS_GetFeature', responseObjects);
  4. var nodes = {};
  5. var nodesArray = [];
  6. var links = {};
  7. var linksArray = [];
  8. var instanceTypes = {};
  9. var dragged = false;
  10. const hasTargetArray = node => {
  11. for (const prop in node)
  12. if (node[prop].constructor === Array)
  13. return {array: node[prop], name: prop.split(':').pop().replace(/BI_audit_/, '')};
  14. return false;
  15. }
  16. const getLinks = (array, expansion) => {
  17. if (array != undefined && expansion !== undefined) {
  18. array.forEach(element => {
  19. const rowObject = hasTargetArray(element);
  20. if (rowObject) {
  21. for (let i = rowObject.array.length - 2; i >= 0; i--) {
  22. const target = hasTargetArray(rowObject.array[i]);
  23. const source = hasTargetArray(rowObject.array[i + 1]);
  24. let sourceGroup = source.name;
  25. let targetGroup = target.name;
  26. if (expansion && expansion.type) {
  27. if (sourceGroup === expansion.type)
  28. sourceGroup = source.array[0][expansion.criteria];
  29. if (targetGroup === expansion.type)
  30. targetGroup = target.array[0][expansion.criteria];
  31. }
  32. if (!links.hasOwnProperty(sourceGroup))
  33. links[sourceGroup] = {};
  34. if (links[sourceGroup].hasOwnProperty(targetGroup)) {
  35. links[sourceGroup][targetGroup]++;
  36. } else if (targetGroup) {
  37. links[sourceGroup][targetGroup] = 1;
  38. }
  39. }
  40. }
  41. })
  42. }
  43. };
  44. const getNodes = (array, expansion) => {
  45. if (array != undefined && expansion !== undefined) {
  46. console.log('getNodes akcja', array, expansion);
  47. array.forEach(element => {
  48. const rowObject = hasTargetArray(element);
  49. if (rowObject)
  50. rowObject.array.forEach(objectElement => {
  51. const trackNode = hasTargetArray(objectElement);
  52. if (trackNode) {
  53. let group = trackNode.name;
  54. let expanded = false;
  55. if (expansion && expansion.type && group === expansion.type) {
  56. group = trackNode.array[0][expansion.criteria];
  57. expanded = true;
  58. }
  59. nodes[group] = {expanded: expanded, type: trackNode.name};
  60. instanceTypes[trackNode.array[0].ID] = group;
  61. }
  62. });
  63. });
  64. }
  65. };
  66. const parseNodes = () => {
  67. for (const node in nodes) {
  68. if (nodes.hasOwnProperty(node))
  69. nodesArray.push({name: node, expanded: nodes[node].expanded, type: nodes[node].type});
  70. }
  71. };
  72. const parseLinks = () => {
  73. for (const link in links) {
  74. if (links.hasOwnProperty(link)) {
  75. for (const target in links[link]) {
  76. if (links[link].hasOwnProperty(target)) {
  77. linksArray.push({
  78. source: link,
  79. target: target,
  80. value: links[link][target]
  81. });
  82. }
  83. }
  84. }
  85. }
  86. };
  87. const parseGraph = (expansion) => {
  88. console.log('parseGraph Start');
  89. nodes = {};
  90. links = {};
  91. nodesArray = [];
  92. linksArray = [];
  93. getNodes(responseObjects[0]["default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row"], expansion);
  94. parseNodes();
  95. getLinks(responseObjects[0]["default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row"], expansion);
  96. parseLinks();
  97. dataModel = data = {
  98. nodes: nodesArray,
  99. links: linksArray
  100. };
  101. console.log('parseGraph End', dataModel);
  102. };
  103. const redraw = (expansion) => {
  104. if (dragged)
  105. return dragged = false;
  106. console.log('redrow');
  107. parseGraph(expansion);
  108. draw();
  109. };
  110. parseGraph();