blob: 1937485b089836989e880000c1578255903ca640 [file] [log] [blame]
ash742683a83e2a2020-01-31 15:40:15 +00001/*-
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
23import React from 'react'
24import Button from 'react-bootstrap/Button';
25import Modal from 'react-bootstrap/Modal';
26import Form from 'react-bootstrap/Form';
27import Row from 'react-bootstrap/Row';
28import Col from 'react-bootstrap/Col';
29import styled from 'styled-components';
30import Alert from 'react-bootstrap/Alert';
sebdetaa486be2020-02-18 02:00:11 -080031import PolicyToscaService from '../../../api/PolicyToscaService';
ash742683a83e2a2020-01-31 15:40:15 +000032
33const ModalStyled = styled(Modal)`
34 background-color: transparent;
35`
36export default class UploadToscaPolicyModal extends React.Component {
37 constructor(props, context) {
38 super(props, context);
39
sebdetaa486be2020-02-18 02:00:11 -080040 this.handleCreateFromToscaPolicyModel = this.handleCreateFromToscaPolicyModel.bind(this);
ash742683a83e2a2020-01-31 15:40:15 +000041 this.handleClose = this.handleClose.bind(this);
ash742683a83e2a2020-01-31 15:40:15 +000042 this.fileSelectedHandler = this.fileSelectedHandler.bind(this);
43 this.state = {
44 show: true,
45 selectedFile: '',
ash742683a83e2a2020-01-31 15:40:15 +000046 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;
sebdetaa486be2020-02-18 02:00:11 -080056 let reader = new FileReader();
Ashwin Sharma393bbb52020-02-27 17:24:52 +000057 this.setState({policyModelTosca: '' });
ash742683a83e2a2020-01-31 15:40:15 +000058 reader.onload = function(e) {
sebdetaa486be2020-02-18 02:00:11 -080059 scope.setState({ policyModelTosca: reader.result});
ash742683a83e2a2020-01-31 15:40:15 +000060 };
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
sebdetaa486be2020-02-18 02:00:11 -080072 handleCreateFromToscaPolicyModel(e) {
73 e.preventDefault();
Ashwin Sharma393bbb52020-02-27 17:24:52 +000074 if(this.state.policyModelTosca) {
75 PolicyToscaService.createPolicyModelFromToscaModel(this.state.policyModelTosca).then(resp => {
ash742683a83e2a2020-01-31 15:40:15 +000076 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
ash742683a83e2a2020-01-31 15:40:15 +000087 render() {
88 return (
89 <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
90 <Modal.Header closeButton>
sebdetaa486be2020-02-18 02:00:11 -080091 <Modal.Title>Upload Tosca Model</Modal.Title>
ash742683a83e2a2020-01-31 15:40:15 +000092 </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>
ash742683a83e2a2020-01-31 15:40:15 +0000102 </Col>
103 </Form.Group>
104 </Modal.Body>
105 <Modal.Footer>
106 {!this.state.apiResponseStatus?<Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>:""}
sebdetaa486be2020-02-18 02:00:11 -0800107 {!this.state.apiResponseStatus?<Button disabled={!this.state.selectedFile.name || this.state.upldBtnClicked} variant="primary" type="submit" onClick={this.handleCreateFromToscaPolicyModel.bind(this)}>Create</Button>:""}
ash742683a83e2a2020-01-31 15:40:15 +0000108 {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}