summaryrefslogtreecommitdiffstats
path: root/src/app/modifications/Modifications.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/modifications/Modifications.jsx')
-rw-r--r--src/app/modifications/Modifications.jsx190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/app/modifications/Modifications.jsx b/src/app/modifications/Modifications.jsx
new file mode 100644
index 0000000..f9837e7
--- /dev/null
+++ b/src/app/modifications/Modifications.jsx
@@ -0,0 +1,190 @@
+/*
+ * ============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 React, {Component} from 'react';
+import {GlobalExtConstants} from 'utils/GlobalExtConstants.js';
+import Col from 'react-bootstrap/lib/Col';
+import Row from 'react-bootstrap/lib/Row';
+import Grid from 'react-bootstrap/lib/Grid';
+import Panel from 'react-bootstrap/lib/Panel';
+import * as Excel from 'exceljs/dist/exceljs.min.js';
+import Spinner from 'utils/SpinnerContainer.jsx';
+
+let INVLIST = GlobalExtConstants.INVLIST;
+let OXM = GlobalExtConstants.OXM;
+
+let invList = null;
+
+class Modifications extends Component {
+
+ state = {
+ file:null,
+ enableBusyFeedback: false,
+ enableUploadFeedback: false,
+ showResults: false,
+ errorResults: true
+ };
+
+ constructor(){
+ super();
+ }
+ componentDidMount(){
+ };
+ addValidationError = (baseString, sheetName, row, validationError) => {
+ return baseString += 'Error occurred on worksheet ' + sheetName + ' at Row ' + row + ' '
+ + validationError + '\n';
+ }
+ uploadedFile = (e) => {
+ this.setState({enableUploadFeedback: true,enableBusyFeedback:false,showResults:false,errorResults:false});
+ let reader = new FileReader();
+ let file = e.target.files[0];
+ let wb = new Excel.Workbook();
+ var columnHeaders = [];
+ var jsonPayload = [];
+ reader.onload= () => {
+ const buffer = reader.result;
+ var validationErrors = {};
+ wb.xlsx.load(buffer).then(workbook => {
+ workbook.eachSheet(function(worksheet, sheetId) {
+ worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
+ if(rowNumber === 1){
+ for(var j = 1;j <= row.values.length; j++){
+ columnHeaders[sheetId + '-' + j ] = row.values[j];
+ }
+ }else{
+ var obj = {};
+ obj.properties = {};
+ obj['node-type'] = worksheet.name;
+ for(var j = 1;j <= row.values.length; j++){
+ if(['uri','action'].indexOf(columnHeaders[sheetId + '-' + j ]) > -1){
+ obj[columnHeaders[sheetId + '-' + j ]] = row.values[j];
+ if(!row.values[j] || row.values[j] === ""){
+
+ }else if (columnHeaders[sheetId + '-' + j ] === 'action'
+ && ['DELETE','UPDATE', 'ADD'].indexOf((row.values[j]).toUpperCase()) === -1 ){
+ validationErrors = this.addValidationError(validationErrors,
+ worksheet.name, j, 'Action needs to be DELETE, UPDATE, or ADD');
+ }
+ }else if(columnHeaders[sheetId + '-' + j ] !== 'relationship-list'){
+ obj.properties[columnHeaders[sheetId + '-' + j ]] = row.values[j];
+ }
+ }
+ jsonPayload.push(obj);
+ }
+ console.log("Row " + rowNumber + " = " + JSON.stringify(row.values));
+ });
+ console.log(JSON.stringify(jsonPayload));
+ });
+ this.setState({enableUploadFeedback: false});
+ });
+
+ }
+ if((file.name).endsWith(".xls") || (file.name).endsWith(".xlsx")){
+ reader.readAsArrayBuffer(file);
+ }else{
+ var error = {};
+ error.validationMsg = "Please upload a valid file, valid files are .xslx and .xsl only."
+ triggerError(error);
+ this.setState({enableUploadFeedback: false});
+ }
+ }
+ onFileSubmit = () => {
+ this.setState({enableBusyFeedback:true,showResults:false,errorResults:false});
+ }
+ triggerError = (error) => {
+ console.error('[Modifications.jsx] error : ', JSON.stringify(error));
+ this.setState({
+ enableBusyFeedback: false,
+ showResults: false,
+ errorResults: true
+ });
+ let errMsg = '';
+ if(error.validationMsg){
+ errMsg = error.validationMsg;
+ } else if (error.response) {
+ // The request was made and the server responded with a status code
+ // that falls out of the range of 2xx
+ console.log(error.response.data);
+ console.log(error.response.status);
+ console.log(error.response.headers);
+ if(error.response.status){
+ errMsg += " Code: " + error.response.status;
+ }
+ if(error.response.data){
+ errMsg += " - " + JSON.stringify(error.response.data);
+ }
+ } else if (error.request) {
+ // The request was made but no response was received
+ // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
+ // http.ClientRequest in node.js
+ console.log(error.request);
+ errMsg += " - Request was made but no response received";
+ } else {
+ // Something happened in setting up the request that triggered an Error
+ console.log('Error', error.message);
+ errMsg += " - Unknown error occurred " + error.message;
+ }
+ //Suppress Error Message when 404 results not found occur
+ if(error.response && error.response.status === 404){
+ this.setState({errorMessage:'', errorResults:false});
+ }else{
+ this.setState({errorMessage:errMsg});
+ }
+ }
+ render = () => {
+ return(
+ <div>
+ <div id='modifications'>
+ <header className='addPadding jumbotron my-4'>
+ <h1 className='display-2'>Modifications Page</h1>
+ <p className='lead'>
+ On this page you have the ability to make modifications to the data by uploading a xslx.
+ </p>
+ </header>
+ <Grid fluid={true} className='model-container'>
+ <Spinner loading={this.state.enableUploadFeedback}>
+ <Row>
+ <form className="addPadding" onSubmit={this.onFileSubmit}>
+ <div className="row justify-content-center mb-2">
+ <input onChange={this.uploadedFile} type="file" id="excelFile" accept=".xlsx, .xls"/>
+ <button type="submit" className="btn btn-sm btn-info">Send</button>
+ </div>
+ </form>
+ </Row>
+ </Spinner>
+ <Spinner loading={this.state.enableBusyFeedback}>
+ <Row>
+ <div className={'addPaddingTop alert alert-danger ' +(this.state.errorResults ? 'show' : 'hidden')} role="alert">
+ An error occurred, please try again later. If this issue persists, please contact the system administrator. {this.state.errorMessage}
+ </div>
+ </Row>
+ <Row>
+ <div className={'addPaddingTop alert alert-success ' +(this.state.showResults ? 'show' : 'hidden')} role="alert">
+ The updates were made successfully.
+ </div>
+ </Row>
+ </Spinner>
+ </Grid>
+ </div>
+ </div>
+ );
+ }
+ }
+export default Modifications;