Upload Tosca Model changes to remove policy model type parsing from UI.
[clamp.git] / ui-react / src / components / dialogs / Tosca / UploadToscaPolicyModal.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END============================================
19  * ===================================================================
20  *
21  */
22
23 import React from 'react'
24 import Button from 'react-bootstrap/Button';
25 import Modal from 'react-bootstrap/Modal';
26 import Form from 'react-bootstrap/Form';
27 import Row from 'react-bootstrap/Row';
28 import Col from 'react-bootstrap/Col';
29 import styled from 'styled-components';
30 import Alert from 'react-bootstrap/Alert';
31 import PolicyToscaService from '../../../api/PolicyToscaService';
32
33 const ModalStyled = styled(Modal)`
34         background-color: transparent;
35 `
36 export default class UploadToscaPolicyModal extends React.Component {
37         constructor(props, context) {
38                 super(props, context);
39
40                 this.handleCreateFromToscaPolicyModel = this.handleCreateFromToscaPolicyModel.bind(this);
41                 this.handleClose = this.handleClose.bind(this);
42                 this.fileSelectedHandler = this.fileSelectedHandler.bind(this);
43                 this.state = {
44                                 show: true,
45                                 selectedFile: '',
46                                 policyModelTosca: [],
47                                 apiResponseStatus: '',
48                                 apiResponseMessage: '',
49                                 upldBtnClicked: false
50                         };
51                 }
52
53                 fileSelectedHandler = (event) => {
54                                 if (event.target.files && event.target.files[0]) {
55                                         const scope = this;
56                                     let reader = new FileReader();
57                                         this.setState({policyModelTosca: '' });
58                                         reader.onload = function(e) {
59                                             scope.setState({ policyModelTosca:  reader.result});
60                                         };
61                                         console.log("Filename is", event.target.files[0]);
62                                         reader.readAsText(event.target.files[0]);
63                                 }
64                                 this.setState({selectedFile: event.target.files[0]});
65                 };
66
67         handleClose() {
68                 this.setState({ show: false });
69                 this.props.history.push('/');
70         }
71
72         handleCreateFromToscaPolicyModel(e) {
73         e.preventDefault();
74                 if(this.state.policyModelTosca) {
75                 PolicyToscaService.createPolicyModelFromToscaModel(this.state.policyModelTosca).then(resp => {
76                         if(resp.status === 200) {
77                         this.setState({apiResponseStatus: resp.status, apiResponseMessage: resp.message, upldBtnClicked: true});
78                 } else {
79                         this.setState({apiResponseStatus: 500, apiResponseMessage: resp, upldBtnClicked: true});
80                 }
81         });
82         } else {
83                 this.setState({apiResponse: 500, apiResponseMessage: 'Parameters are missing', upldBtnClicked: true});
84         }
85 }
86
87         render() {
88                 return (
89                         <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
90                                 <Modal.Header closeButton>
91                                         <Modal.Title>Upload Tosca Model</Modal.Title>
92                                 </Modal.Header>
93                                 <Modal.Body>
94                                         <Form.Group as={Row} controlId="formPlaintextEmail">
95                                                 <Col sm="10">
96                                                 <input style={{display: 'none'}} type="file" name="file" accept=".yaml" onChange={this.fileSelectedHandler}
97                                                         ref={fileInput => this.fileInput = fileInput}/>
98                                                 <button onClick={() => this.fileInput.click()}>Pick Tosca File</button>
99                                                         <Alert variant="secondary">
100                                                                 <p>{this.state.selectedFile.name}</p>
101                                                         </Alert>
102                                                 </Col>
103                                         </Form.Group>
104                                 </Modal.Body>
105                                 <Modal.Footer>
106                                         {!this.state.apiResponseStatus?<Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>:""}
107                                   {!this.state.apiResponseStatus?<Button disabled={!this.state.selectedFile.name || this.state.upldBtnClicked} variant="primary" type="submit" onClick={this.handleCreateFromToscaPolicyModel.bind(this)}>Create</Button>:""}
108                                         {this.state.apiResponseStatus?<Alert variant={this.state.apiResponseStatus === 200?"success":"danger"}>
109                                                         <p>{this.state.apiResponseMessage}</p>
110                                                                 <Button onClick={this.handleClose} variant={this.state.apiResponseStatus === 200?"outline-success":"danger"}>
111                                                                         Exit
112                                                                 </Button>
113                                                 </Alert>:""}
114                                 </Modal.Footer>
115                         </ModalStyled>
116                 );
117         }
118 }