summaryrefslogtreecommitdiffstats
path: root/src/utils/CSV.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/CSV.js')
-rw-r--r--src/utils/CSV.js348
1 files changed, 348 insertions, 0 deletions
diff --git a/src/utils/CSV.js b/src/utils/CSV.js
new file mode 100644
index 0000000..d570ddb
--- /dev/null
+++ b/src/utils/CSV.js
@@ -0,0 +1,348 @@
+/*
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+import {GlobalExtConstants} from './GlobalExtConstants.js';
+let OXM = GlobalExtConstants.OXM;
+
+function camelToDash(str) {
+ return (str.replace(/\W+/g, '-')
+ .replace(/([a-z\d])([A-Z])/g, '$1-$2')).toLowerCase();
+}
+
+function sortColumn(col1, col2) {
+ if (col1.value < col2.value) {
+ return -1;
+ } else if (col1.value > col2.value) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+var buildAttrList = function(inputParam, cols) {
+ // console.log('[getSearchParam] inputParam: ' + inputParam);
+ let searchParam = inputParam;
+
+ if (['PSERVER', 'COMPLEX', 'CLOUDREGION',
+ 'NETWORKPROFILE', 'VIRTUALDATACENTER'].indexOf(inputParam.toUpperCase()) === -1) {
+ searchParam = inputParam.substring(0, inputParam.length - 1);
+ // console.log('[getSearchParam] searchParam: ' + searchParam);
+ }
+ console.log('Before loop included',searchParam);
+ if('CHASSIES'.indexOf(inputParam.toUpperCase()) !== -1){
+ searchParam = inputParam.substring(0, inputParam.length - 2) + 's';
+ }else if(inputParam.substr(inputParam.length - 3) === 'ies'){
+ searchParam = inputParam.substring(0, inputParam.length - 3) + 'y';
+ }else if('COMPLEXES'.indexOf(inputParam.toUpperCase()) !== -1){
+ searchParam = inputParam.substring(0, inputParam.length - 2);
+ }
+ if(inputParam.toUpperCase() === 'PINTERFACES'){
+ searchParam = 'pInterface';
+ }
+ console.log('After loop included',searchParam);
+ if (inputParam.toUpperCase() === 'LINESOFBUSINESS') {
+ searchParam = 'lineOfBusiness';
+ // console.log('[getSearchParam] searchParam: ' + searchParam);
+ }
+
+ // read oxm xml file
+ let oxmFile = JSON.parse(OXM);
+ let javaTypes = oxmFile['xml-bindings']['java-types'][0]['java-type'];
+ // console.log('[buildAttrList] javaTypes:');
+ // console.log(javaTypes);
+
+ let foundIndex = -1;
+ for (let i = 0; i < javaTypes.length && foundIndex === -1; i++) {
+ if (javaTypes[i]['xml-root-element'][0]['$']['name'] === camelToDash(searchParam)) {
+ // console.log(javaTypes[i]);
+ foundIndex = i;
+ }
+ }
+
+ //Adding Quick fix will be get rid of it later
+ console.log('searchParam>>>>>>>stage2:',inputParam);
+ if(foundIndex === -1){
+ for (let i = 0; i < javaTypes.length && foundIndex === -1; i++) {
+ if (javaTypes[i]['xml-root-element'][0]['$']['name'] === camelToDash(inputParam)) {
+ foundIndex = i;
+ }
+ if(foundIndex === -1){
+ if(inputParam.substr(inputParam.length - 1) === 's'){
+ searchParam = inputParam.substring(0, inputParam.length - 1);
+ console.log('searchParam>>>>>>>stage3:',searchParam);
+ }
+ if (javaTypes[i]['xml-root-element'][0]['$']['name'] === camelToDash(searchParam)) {
+ foundIndex = i;
+ }
+ }
+ }
+ }
+
+ // build the column list
+ let columns = cols;
+ if(foundIndex > -1) {
+ //for (let j = 0; j < javaTypes[foundIndex]['java-attributes'][0]['xml-element'].length; j++) {
+ // columns.push({value: javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name']});
+ //}
+ if (javaTypes[foundIndex]['java-attributes']) {
+ let elementLength = 0;
+ if (javaTypes[foundIndex]['java-attributes'][0]['xml-element']) {
+ elementLength = javaTypes[foundIndex]['java-attributes'][0]['xml-element'].length;
+ }
+ for (var j = 0; j < elementLength; j++) {
+ let isPrimitive = JSON.stringify(javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['type']).indexOf('java.lang') > -1;
+ if(isPrimitive) { //add to the list
+ let node = {value: javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name']};
+ columns.push(node);
+ }
+ }
+ }
+ }
+
+ //sort the column list
+ columns.sort(sortColumn);
+
+ // console.log('[buildAttrList] columns:');
+ // console.log(columns);
+
+ return columns;
+}
+
+var multiTypeBuildAttrList = function(nodes) {
+ // read oxm xml file
+ let oxmFile = JSON.parse(OXM);
+ let javaTypes = oxmFile['xml-bindings']['java-types'][0]['java-type'];
+
+ let typeList = new Map();
+
+ nodes.forEach(node => {
+ let searchParam = node['node-type'];
+
+ let foundIndex = -1;
+ for (let i = 0; i < javaTypes.length && foundIndex === -1; i++) {
+ if (javaTypes[i]['xml-root-element'][0]['$']['name'] === camelToDash(searchParam)) {
+ foundIndex = i;
+ if (!typeList.has(searchParam)) {
+
+ let props = [];
+ //for (let j = 0; j < javaTypes[foundIndex]['java-attributes'][0]['xml-element'].length; j++) {
+ //props.push({
+ //value: javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name']
+ //});
+ //}
+ if (javaTypes[foundIndex]['java-attributes']) {
+ let elementLength = 0;
+ if (javaTypes[foundIndex]['java-attributes'][0]['xml-element']) {
+ elementLength = javaTypes[foundIndex]['java-attributes'][0]['xml-element'].length;
+ }
+ for (var j = 0; j < elementLength; j++) {
+ let isPrimitive = JSON.stringify(javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['type']).indexOf('java.lang') > -1;
+ if(isPrimitive) { //add to the list
+ let node = {value: javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name']};
+ props.push(node);
+ }
+ }
+ }
+
+ props.sort(sortColumn);
+ typeList.set(searchParam, props);
+ }
+ }
+ }
+ });
+
+ // console.log('typeList:');
+ // console.log(typeList);
+
+ return typeList;
+}
+
+var buildCSV = function(columns, nodes) {
+ let outputArray = [];
+ outputArray[0] = [];
+
+ for (let i = 0; i < columns.length; i++) {
+ let str = columns[i].value;
+ outputArray[0][str] = columns[i];
+ }
+
+ // console.log('[buildCSV] initial outputArray with columns:');
+ // console.log(outputArray);
+
+ // console.log('[buildCSV] nodes.length:');
+ // console.log(nodes.length);
+
+ let q = 0;
+ for (let j = 1; j < nodes.length + 1; j++) {
+ outputArray[j] = [];
+ for (var k in nodes[q].properties) {
+ if (nodes[q].properties.hasOwnProperty(k)) {
+ let str = k;
+ outputArray[j][str] = nodes[q].properties[k].toString();
+ }
+ }
+ let relative = nodes[q]['related-to'];
+ for(var r = 0; r<relative.length; r++){
+ var relationship = '';
+ var relationshipLabel = '';
+ var nodeType = '';
+ var url = '';
+ for(var k in relative[r]){
+ let relation = k.toString();
+ if(relation === 'relationship-label'){
+ relationshipLabel = relative[r][k].toString().slice(33);
+ }
+ if(relation === 'node-type'){
+ nodeType = relative[r][k].toString();
+ }
+ if(relation === 'url'){
+ url = relative[r][k].toString();
+ }
+ relationship = 'Relationship ' + relationshipLabel + ' ' + nodeType + ' - ' + url;
+ console.log('relationship>>>>>',relationship);
+ }
+ let cnt = r + 1;
+ let str = 'Relationship' + cnt;
+ outputArray[j][str] = relationship;
+ outputArray[0][str] ='Relationship'+cnt;
+ }
+ q++;
+ }
+
+ return outputArray;
+}
+
+var multiTypebuildCSV = function(nodes) {
+ let outputArray = [];
+
+ nodes.forEach(node => {
+ let nodeVal = [];
+ for (var prop in node.properties) {
+ if (node.properties.hasOwnProperty(prop)) {
+ let val = { value: prop + ': ' + node.properties[prop].toString()};
+ // console.log(val);
+ nodeVal.push(val);
+ }
+ }
+ nodeVal.sort(sortColumn);
+ nodeVal.unshift({ value: node['node-type'] }, {value : node.url });
+ let relative = node['related-to'];
+ for(var r = 0; r<relative.length; r++){
+ var relationship = '';
+ var relationshipLabel = '';
+ var nodeType = '';
+ var url = '';
+ for(var k in relative[r]){
+ let relation = k.toString();
+ if(relation === 'relationship-label'){
+ relationshipLabel = relative[r][k].toString().slice(33);
+ }
+ if(relation === 'node-type'){
+ nodeType = relative[r][k].toString();
+ }
+ if(relation === 'url'){
+ url = relative[r][k].toString();
+ }
+ relationship = 'Relationship ' + relationshipLabel + ' ' + nodeType + ' - ' + url;
+ console.log('relationship>>>>>',relationship);
+ }
+ let cnt = r + 1;
+ let val = { value: 'Relationship'+cnt + ': ' + relationship};
+ nodeVal.push(val);
+ }
+ outputArray.push(nodeVal);
+ });
+
+ // console.log(outputArray);
+ return outputArray;
+}
+
+var convertToCSVStr = function(outputArray) {
+ let array = (typeof outputArray !== 'object' ? JSON.parse(outputArray) : outputArray);
+ let str = '';
+ let row = '';
+
+ for (let index in outputArray[0]) {
+ // convert each value to string and comma-separated
+ row += index + ',';
+ }
+ row = row.slice(0, -1);
+ // append Label row with line break
+ str += row + '\r\n';
+
+ for (let i = 1; i < array.length; i++) {
+ let line = '';
+ for (let k in outputArray[0]) {
+ if (outputArray[0].hasOwnProperty(k)) {
+ if (array[i][k]) {
+ line += array[i][k] + ',';
+ } else {
+ line += ',';
+ }
+ }
+ }
+ str += line + '\r\n';
+ }
+ return str;
+}
+
+var multiTypeConvertToCSVStr = function(outputArray) {
+ let array = (typeof outputArray !== 'object' ? JSON.parse(outputArray) : outputArray);
+ let str = '';
+ let max = 0;
+ // find max length of array to determine number of rows to loop through
+ array.forEach(node => {
+ if (node.length > max) {
+ max = node.length;
+ }
+ });
+
+ // console.log('max: ' + max);
+
+ for (let i = 0; i < max; i++) {
+ let line = '';
+ for (let j = 0; j < array.length; j++) {
+ line += array[j][i] ? array[j][i].value + ',' : ',';
+ }
+ str += line + '\r\n';
+ }
+ return str;
+}
+
+var downloadCSV = function(csvStr, filename) {
+ // console.log(csvStr);
+ var a = document.createElement('a');
+ a.setAttribute('style', 'display:none;');
+ document.body.appendChild(a);
+ var blob = new Blob([csvStr], { type: 'text/csv' });
+ var url = window.URL.createObjectURL(blob);
+ a.href = url;
+ a.download = filename + '.csv';
+ a.click();
+}
+export const CSV = {
+ buildAttrList : buildAttrList,
+ multiTypeBuildAttrList : multiTypeBuildAttrList,
+ buildCSV : buildCSV,
+ multiTypebuildCSV : multiTypebuildCSV,
+ convertToCSVStr : convertToCSVStr,
+ multiTypeConvertToCSVStr : multiTypeConvertToCSVStr,
+ downloadCSV : downloadCSV
+};