Add check to maven pom.xml for verifying integrity of ui-react-lib
[clamp.git] / ui-react / src / components / dialogs / OperationalPolicy / OperationalPolicyModal.js
index 6db38fd..77dce16 100644 (file)
@@ -25,6 +25,7 @@ import React from 'react'
 import Button from 'react-bootstrap/Button';
 import Modal from 'react-bootstrap/Modal';
 import styled from 'styled-components';
+import LoopCache from '../../../api/LoopCache';
 import LoopService from '../../../api/LoopService';
 import JSONEditor from '@json-editor/json-editor';
 
@@ -37,7 +38,7 @@ export default class OperationalPolicyModal extends React.Component {
        state = {
                show: true,
                loopCache: this.props.loopCache,
-               jsonEditor: null,
+               jsonEditor: null
        };
 
        constructor(props, context) {
@@ -45,6 +46,7 @@ export default class OperationalPolicyModal extends React.Component {
                this.handleClose = this.handleClose.bind(this);
                this.handleSave = this.handleSave.bind(this);
                this.renderJsonEditor = this.renderJsonEditor.bind(this);
+               this.handleRefresh = this.handleRefresh.bind(this);
                this.setDefaultJsonEditorOptions();
        }
 
@@ -54,7 +56,7 @@ export default class OperationalPolicyModal extends React.Component {
 
                if (errors.length !== 0) {
                        console.error("Errors detected during config policy data validation ", errors);
-                       alert(errors);
+                       this.props.showFailAlert(errors);
                }
                else {
                        console.info("NO validation errors found in config policy data");
@@ -77,23 +79,23 @@ export default class OperationalPolicyModal extends React.Component {
        }
 
        setDefaultJsonEditorOptions() {
-               JSONEditor.defaults.options.theme = 'bootstrap4';
-               // JSONEditor.defaults.options.iconlib = 'bootstrap2';
-
-               JSONEditor.defaults.options.object_layout = 'grid';
-               JSONEditor.defaults.options.disable_properties = true;
-               JSONEditor.defaults.options.disable_edit_json = false;
-               JSONEditor.defaults.options.disable_array_reorder = true;
-               JSONEditor.defaults.options.disable_array_delete_last_row = true;
-               JSONEditor.defaults.options.disable_array_delete_all_rows = false;
-               JSONEditor.defaults.options.array_controls_top=true;
-               JSONEditor.defaults.options.show_errors = 'always';
-               JSONEditor.defaults.options.keep_oneof_values=false;
-               JSONEditor.defaults.options.ajax=true;
-               JSONEditor.defaults.options.collapsed=true;
-               //JSONEditor.defaults.options.template = 'default';
+               JSONEditor.defaults.themes.myBootstrap4 = JSONEditor.defaults.themes.bootstrap4.extend({
+                       getTab: function(text,tabId) {
+                               var liel = document.createElement('li');
+                               liel.classList.add('nav-item');
+                               var ael = document.createElement("a");
+                               ael.classList.add("nav-link");
+                               ael.setAttribute("style",'padding:10px;max-width:160px;');
+                               ael.setAttribute("href", "#" + tabId);
+                               ael.setAttribute('data-toggle', 'tab');
+                               text.setAttribute("style",'word-wrap:break-word;');
+                               ael.appendChild(text);
+                               liel.appendChild(ael);
+                               return liel;
+                       }
+               });
        }
-       
+
        renderJsonEditor() {
                console.debug("Rendering OperationalPolicyModal");
                var schema_json = this.state.loopCache.getOperationalPolicyJsonSchema();
@@ -102,17 +104,50 @@ export default class OperationalPolicyModal extends React.Component {
                        console.error("NO Operational policy schema found");
                        return;
                }
-               var operationalPoliciesData = this.state.loopCache.getOperationalPolicies();
+               var operationalPoliciesData = this.state.loopCache.getOperationalPoliciesNoJsonSchema();
 
                this.setState({
+                               jsonEditor: new JSONEditor(document.getElementById("editor"),
+                                       {
+                                           schema: schema_json.schema,
+                                           startval: operationalPoliciesData,
+                                           theme: 'myBootstrap4',
+                        object_layout: 'grid',
+                        disable_properties: true,
+                        disable_edit_json: false,
+                        disable_array_reorder: true,
+                        disable_array_delete_last_row: true,
+                        disable_array_delete_all_rows: false,
+                        array_controls_top: true,
+                        show_errors: 'always',
+                        keep_oneof_values: false,
+                        collapsed:true
+                                       })
+                       })
+       }
+
+       handleRefresh() {
+               LoopService.refreshOperationalPolicyJson(this.state.loopCache.getLoopName(), this.state.loopCache.getOperationalPolicies()[0]).then(data => {
+                       var newLoopCache =  new LoopCache(data);
+                       var schema_json = newLoopCache.getOperationalPolicyJsonSchema();
+                       var operationalPoliciesData = newLoopCache.getOperationalPoliciesNoJsonSchema();
+                       document.getElementById("editor").innerHTML = "";
+                       this.setState({
+                               loopCache: newLoopCache,
                                jsonEditor: new JSONEditor(document.getElementById("editor"),
                                        { schema: schema_json.schema, startval: operationalPoliciesData })
                        })
+                       this.props.updateLoopFunction(data);
+                       
+               })
+               .catch(error => {
+                       console.error("Error while refreshing the Operational Policy Json Representation");
+               });
        }
 
        render() {
                return (
-                       <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
+                       <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
                                <Modal.Header closeButton>
                                        <Modal.Title>Operational policies</Modal.Title>
                                </Modal.Header>
@@ -123,10 +158,13 @@ export default class OperationalPolicyModal extends React.Component {
                                <Modal.Footer>
                                        <Button variant="secondary" onClick={this.handleClose}>
                                                Close
-                   </Button>
+                                       </Button>
+                                       <Button variant="secondary" onClick={this.handleRefresh}>
+                                               Refresh
+                                       </Button>
                                        <Button variant="primary" onClick={this.handleSave}>
                                                Save Changes
-                   </Button>
+                                       </Button>
                                </Modal.Footer>
                        </ModalStyled>