diff options
Diffstat (limited to 'src/utils/ExportExcel.js')
-rw-r--r-- | src/utils/ExportExcel.js | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/src/utils/ExportExcel.js b/src/utils/ExportExcel.js new file mode 100644 index 0000000..7a4b096 --- /dev/null +++ b/src/utils/ExportExcel.js @@ -0,0 +1,394 @@ +/* + * ============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'; +import * as Excel from 'exceljs/dist/exceljs.min.js'; + +let OXM = GlobalExtConstants.OXM; +let EXCELCELLS = GlobalExtConstants.EXCELCELLS; +let DOWNLOAD_ALL = GlobalExtConstants.DOWNLOAD_ALL; +let INVLIST = GlobalExtConstants.INVLIST; + +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, sortBy) { + // console.log('[getSearchParam] inputParam: ' + inputParam); + let searchParam = inputParam; + + if (['PSERVER', 'COMPLEX', 'CLOUDREGION', + 'NETWORKPROFILE', 'VIRTUALDATACENTER','VNFC'].indexOf(inputParam.toUpperCase()) === -1) { + searchParam = inputParam.substring(0, inputParam.length - 1); + // console.log('[getSearchParam] searchParam: ' + 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'; + } + 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; + let requiredColumn = []; + 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; + let reqObj = JSON.stringify(javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['required']); + let description=''; + if(javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['xml-properties'] && javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['xml-properties'][0]['xml-property'][0]['$']['name']=='description'){ + description= javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['xml-properties'][0]['xml-property'][0]['$']['value']; + } + let node = {value: javaTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name'],description: description}; + if(isPrimitive) { //add to the list + columns.push(node); + } + if(reqObj && reqObj.indexOf('true') > -1){ + requiredColumn.push(node); + } + } + } + } + + //sort the column list + columns.sort(sortColumn); + //Sort column with requiredColumn + if(sortBy === 'required'){ + for(var c=0; c< columns.length; c++){ + if(requiredColumn.indexOf(columns[c]) === -1){ + requiredColumn.push(columns[c]); + } + } + } + if(sortBy && (sortBy === 'required' || sortBy === 'mandatory')){ + columns = requiredColumn; + } + // console.log('[buildAttrList] columns:'); + // console.log(columns); + + return columns; +} +var getDescriptionForNodes= function (){ + var invKeys = Object.keys(INVLIST.INVENTORYLIST); + let oxmFile = JSON.parse(OXM); + let javaTypes = oxmFile['xml-bindings']['java-types'][0]['java-type']; + let nodeDescriptionObj={}; + let invList = invKeys.map(item => { + for (let i = 0; i < javaTypes.length; i++) { + if(javaTypes[i]['$']['name'].toLowerCase() === camelToDash(INVLIST.INVENTORYLIST[item].modelPath).toLowerCase()) { + if(javaTypes[i]['xml-properties'] !== undefined && javaTypes[i]['xml-properties'][0]['xml-property'] && javaTypes[i]['xml-properties'][0]['xml-property'][0]['$']['name']==='description'){ + nodeDescriptionObj[INVLIST.INVENTORYLIST[item].modelPath]=javaTypes[i]['xml-properties'][0]['xml-property'][0]['$']['value']; + }else{ + nodeDescriptionObj[INVLIST.INVENTORYLIST[item].modelPath]=''; + } + } + } + return nodeDescriptionObj; + }); + return invList; +} + +var generateExcels = function(nodeResults,dslQuery) { + console.log('inside generateExcels>>>>>'); + //Creating New Workbook + var workbook = new Excel.Workbook(); + var nodesType = []; + var worksheet; + var columnsJsonObj = {} + var columnsList = [] + columnsJsonObj.columns = columnsList; + var nodesLength = nodeResults.length; + console.log('nodeResults.length.......',nodesLength); + for(var n=0;n<nodesLength;n++){ + //Creating Sheet for that particular WorkBook + let nodeTypeVal = nodeResults[n]["node-type"]; + let url = nodeResults[n]["url"]; + let columns = []; + let buildColumns = []; + if(nodesType.indexOf(nodeTypeVal) == -1){ + nodesType.push(nodeTypeVal); + worksheet = workbook.addWorksheet(nodeTypeVal,{properties: {showGridLines: true}}); + buildColumns = buildAttrList(nodeTypeVal, [], 'required'); + if(dslQuery){ + let tempDslQuery= dslQuery+','; + let nodeTypeProperties =''; + let plainNodes =''; + var nodePatternwithProp = generateRegexForDsl(nodeTypeVal); + var nodeRegularExp = new RegExp(nodePatternwithProp, 'g'); + plainNodes = tempDslQuery.match(nodeRegularExp); + console.log('plainNodes model Gallery null>>>>>*',plainNodes); + if(plainNodes){ + let propertiesPattern ="\\{.*?\\}"; + var propRegularExp = new RegExp(propertiesPattern, 'g'); + nodeTypeProperties = plainNodes[0].match(propRegularExp); + console.log('nodeTypeProperties model Gallery>>>>>*',nodeTypeProperties); + nodeTypeProperties = nodeTypeProperties[0].slice(1,-1).replace(/\'/g,'').toLowerCase().split(','); + for(var z=0;z<buildColumns.length;z++){ + if(nodeTypeProperties.indexOf(buildColumns[z].value.toLowerCase()) !== -1){ + columns.push(buildColumns[z]); + } + } + console.log('on condition table columns>>>>',columns); + }else{ + columns=buildColumns; + } + }else{ + columns=buildColumns; + } + columns.push({value: 'uri'}); + columns.push({value: 'relationship-list'}); + var column = { + [nodeTypeVal] : columns + } + columnsJsonObj.columns.push(column); + if (!worksheet.columns) { + worksheet.columns = Object.keys(columns).map((k) => ({ header: columns[k].value, key: columns[k].value, width:15})) + } + }else{ + worksheet = workbook.getWorksheet(nodeTypeVal); + let col = columnsJsonObj.columns; + for(var c in col){ + if(col[c][nodeTypeVal]){ + columns = col[c][nodeTypeVal]; + } + } + } + var excelCellsHeader = []; + var loop = 0; + var noOfCol = Math.ceil(columns.length/26); + while(loop<noOfCol){ + if(loop === 0){ + for(var j=0; j<EXCELCELLS.length; j++){ + excelCellsHeader.push(EXCELCELLS[j]); + } + }else{ + for(var j=0; j<EXCELCELLS.length; j++){ + excelCellsHeader.push(EXCELCELLS[loop-1]+EXCELCELLS[j]); + } + } + loop++; + } + console.log('excelCellsHeader.......',excelCellsHeader); + console.log('worksheet.columns>>>>',worksheet.columns); + var row = []; + var relativeRow = []; + var rows = []; + for(var x in columns){ + if(nodeResults[n].properties[columns[x].value] !== undefined){ + row.push(nodeResults[n].properties[columns[x].value]); + relativeRow.push(""); + }else{ + row.push(""); + relativeRow.push(""); + } + } + row[row.length-2] = url; + console.log('Push Row after>>>>>>>>>>>',row); + var relationships = []; + if(nodeResults[n]["related-to"]){ + let relative =nodeResults[n]["related-to"]; + var relativeLength = relative.length; + console.log('relativeLength>>>>>>>>>>>',relativeLength); + if(relativeLength>0){ + for(var r = 0; r<relative.length; r++){ + var relationship = ''; + var relationshipLabel = ''; + var nodeType = ''; + var localUrl = ''; + 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'){ + localUrl = relative[r][k].toString(); + } + } + relationship = 'Relationship ' + relationshipLabel + ' ' + nodeType + ' - ' + localUrl; + if(r===0){ + row[row.length-1] = relationship; + rows.push(row); + }else{ + let tempRow = []; + tempRow = [...relativeRow]; // cloning in ES6 Way to avoid deep copy + tempRow[tempRow.length-1] = relationship; + rows.push(tempRow); + } + } + }else{ + rows.push(row); + } + }else{ + rows.push(row); + } + console.log('Rows before pushing>>>>>>>>>>>',rows); + let initMergeCell = (n==0) ? 2: worksheet.rowCount + 1; + worksheet.addRows(rows); + console.log('initMergeCell>>>>>>',initMergeCell); + //worksheet.getColumn(columns.length).values = relationships; + let lastMergeCell = (relativeLength==0)? initMergeCell : initMergeCell + relativeLength - 1; + console.log('lastMergeCell>>>>>>',lastMergeCell); + for(var x=0;x<columns.length-1;x++){ + var cell = excelCellsHeader[x] + initMergeCell +':'+excelCellsHeader[x]+lastMergeCell; + worksheet.mergeCells(cell); + } + } + var workbookName = 'NodesList_'+nodesLength+'_Results.xlsx'; + generateWorkbook(workbook,workbookName); + } + var generateRegexForDsl= function(nodeType){ + var nodePatternwithProp = nodeType+"\\*\\{.*?\\}\\(.*?\\)[\\,|\\>|\\]|\\)]|"+nodeType+"\\*\\(.*?\\)\\{.*?\\}[\\,|\\>|\\]|\\)]|"+nodeType+"\\{.*?\\}\\(.*?\\)[\\,|\\>|\\]|\\)]|"+nodeType+"\\(.*?\\)\\{.*?\\}[\\,|\\>|\\]|\\)]|"+nodeType+"\\{.*?\\}[\\,|\\>|\\]|\\)]|"+nodeType+"\\*\\{.*?\\}[\\,|\\>|\\]|\\)]"; + return nodePatternwithProp; + } + var generateExcelFromTabularView = function(tabledata,tableheaders,workbookName) { + console.log('inside generateExcelFromTabularView>>>>>'); + //Creating New Workbook + var workbook = new Excel.Workbook(); + var worksheet = workbook.addWorksheet('Results',{properties: {showGridLines: true}}); + var columns = []; + if (!worksheet.columns) { + worksheet.columns = Object.keys(tableheaders).map((k) => ({ header: tableheaders[k].name, key: tableheaders[k].name, width:20})) + } + var rows = []; + var row = []; + for(var n=0; n<tabledata.length; n++){ + console.log('TableData<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',tabledata[n]); + row = []; + Object.keys(tableheaders).map((k) => { row.push(tabledata[n][tableheaders[k].name])}); + rows.push(row); + } + worksheet.addRows(rows); + generateWorkbook(workbook,workbookName); + } + var generateExcelFromTabularViewMultiTabs = function(tabData,tabHeaders,workBookName) { + console.log('inside generateExcelFromTabularViewMultiTabs>>>>>'); + //Creating New Workbook + var workbook = new Excel.Workbook(); + Object.keys(tabData).forEach((key,index) => { + var worksheet = workbook.addWorksheet((index+1)+'_'+key,{properties: {showGridLines: true}}); + var columns = []; + var tableData = tabData[key]; + var tableHeaders = tabHeaders[key]; + if (!worksheet.columns) { + worksheet.columns = Object.keys(tableHeaders).map((k) => ({ header: tableHeaders[k].name, key: tableHeaders[k].name, width:20})) + } + var rows = []; + var row = []; + for(var n = 0; n < tableData.length; n++){ + console.log('TableData<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',tableData[n]); + row = []; + Object.keys(tableHeaders).map((k) => { row.push(tableData[n][tableHeaders[k].name])}); + rows.push(row); + } + worksheet.addRows(rows); + }); + generateWorkbook(workbook,workBookName); + } + var generateViolationExcels = function(tabledata,tableheaders) { + generateExcelFromTabularView(tabledata, tableheaders, 'DataIntegrityViolationTable.xlsx'); + } + var generateWorkbook = function(workbook,workbookName){ + console.log('generateWorkbook :',workbookName); + workbook.xlsx.writeBuffer().then(function (data) { + const blob = new Blob([data], + { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const url = window.URL.createObjectURL(blob); + const anchor = document.createElement('a'); + document.body.appendChild(anchor); + anchor.href = url; + anchor.download = workbookName; + anchor.click(); + window.URL.revokeObjectURL(url); + }); + } + + +export const ExportExcel = { + buildAttrList : buildAttrList, + generateExcels : generateExcels, + generateViolationExcels : generateViolationExcels, + generateExcelFromTabularView: generateExcelFromTabularView, + generateExcelFromTabularViewMultiTabs: generateExcelFromTabularViewMultiTabs, + getDescriptionForNodes: getDescriptionForNodes +}; |