From 2df6c083c5baad6ea36154715f7fdfa08bee1c24 Mon Sep 17 00:00:00 2001 From: sebdet Date: Thu, 18 Jul 2019 15:29:45 +0200 Subject: [PATCH] Add data saving Add data saving operation to the configurationPolicyModal and rework of the loopCache class Issue-ID: CLAMP-426 Change-Id: I6ba5880254b15809313f3b809a65ab9e441cab30 Signed-off-by: sebdet --- ui-react/src/api/LoopCache.js | 46 ++++++++++------------ ui-react/src/api/LoopService.js | 28 ++++++++++++- .../ConfigurationPolicyModal.js | 33 +++++++++++++--- 3 files changed, 74 insertions(+), 33 deletions(-) diff --git a/ui-react/src/api/LoopCache.js b/ui-react/src/api/LoopCache.js index 4c8f68c2..b854c7c1 100644 --- a/ui-react/src/api/LoopCache.js +++ b/ui-react/src/api/LoopCache.js @@ -29,13 +29,11 @@ export default class LoopCache { } updateMicroServiceProperties(type, newMsProperties) { - if (newMsProperties["name"] === type) { for (var policy in this.loopJsonCache["microServicePolicies"]) { if (this.loopJsonCache["microServicePolicies"][policy]["name"] === type) { - this.loopJsonCache["microServicePolicies"][policy] = newMsProperties; + this.loopJsonCache["microServicePolicies"][policy]["properties"] = newMsProperties; } } - } } updateGlobalProperties(newGlobalProperties) { @@ -51,49 +49,47 @@ export default class LoopCache { } getOperationalPolicyConfigurationJson() { - return JSON.parse(JSON.stringify(this.loopJsonCache["operationalPolicies"]["0"]["configurationsJson"])); + return this.loopJsonCache["operationalPolicies"]["0"]["configurationsJson"]; } getOperationalPolicies() { - return JSON.parse(JSON.stringify(this.loopJsonCache["operationalPolicies"])); + return this.loopJsonCache["operationalPolicies"]; } getGlobalProperties() { - return JSON.parse(JSON.stringify(this.loopJsonCache["globalPropertiesJson"])); + return this.loopJsonCache["globalPropertiesJson"]; } getDcaeDeploymentProperties() { - return JSON.parse(JSON.stringify(this.loopJsonCache["globalPropertiesJson"]["dcaeDeployParameters"])); + return this.loopJsonCache["globalPropertiesJson"]["dcaeDeployParameters"]; + } + + getMicroServicePolicies() { + return this.loopJsonCache["microServicePolicies"]; } - getMicroServicesJsonForType(type) { - var msProperties = this.loopJsonCache["microServicePolicies"]; + getMicroServiceForName(name) { + var msProperties=this.getMicroServicePolicies(); for (var policy in msProperties) { - if (msProperties[policy]["name"] === type) { - return JSON.parse(JSON.stringify(msProperties[policy])); + if (msProperties[policy]["name"] === name) { + return msProperties[policy]; } } return null; } - getMicroServiceProperties(type) { - var msProperties = this.loopJsonCache["microServicePolicies"]; - for (var policy in msProperties) { - if (msProperties[policy]["name"] === type) { - if (msProperties[policy]["properties"] !== null && msProperties[policy]["properties"] !== undefined) { - return JSON.parse(JSON.stringify(msProperties[policy]["properties"])); - } - } + getMicroServicePropertiesForName(name) { + var msConfig = this.getMicroServiceForName(name); + if (msConfig !== null) { + return msConfig["properties"]; } return null; } - getMicroServiceJsonRepresentationForType(type) { - var msProperties = this.loopJsonCache["microServicePolicies"]; - for (var policy in msProperties) { - if (msProperties[policy]["name"] === type) { - return JSON.parse(JSON.stringify(msProperties[policy]["jsonRepresentation"])); - } + getMicroServiceJsonRepresentationForName(name) { + var msConfig = this.getMicroServiceForName(name); + if (msConfig !== null) { + return msConfig["jsonRepresentation"]; } return null; } diff --git a/ui-react/src/api/LoopService.js b/ui-react/src/api/LoopService.js index fa7cd2e4..020a3bf7 100644 --- a/ui-react/src/api/LoopService.js +++ b/ui-react/src/api/LoopService.js @@ -42,7 +42,7 @@ export default class LoopService { return fetch('/restservices/clds/v2/loop/' + loopName, { method: 'GET', headers: { - "Content-Type": "application/json" + "Content-Type": "application/json", }, credentials: 'same-origin', }) @@ -64,7 +64,7 @@ export default class LoopService { static getSvg(loopName) { return fetch('/restservices/clds/v2/loop/svgRepresentation/' + loopName, { method: 'GET', - credentials: 'same-origin', + credentials: 'same-origin', }) .then(function (response) { console.debug("svgRepresentation response received: ", response.status); @@ -80,4 +80,28 @@ export default class LoopService { return ""; }); } + + static setMicroServiceProperties(loopName, jsonData) { + return fetch('/restservices/clds/v2/loop/updateMicroservicePolicy/' + loopName, { + method: 'POST', + credentials: 'same-origin', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(jsonData), + }) + .then(function (response) { + console.debug("updateMicroservicePolicy response received: ", response.status); + if (response.ok) { + return response.text(); + } else { + console.error("updateMicroservicePolicy query failed"); + return ""; + } + }) + .catch(function (error) { + console.error("updateMicroservicePolicy error received", error); + return ""; + }); + } } diff --git a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js index da2d4230..8178bf47 100644 --- a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js +++ b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js @@ -25,7 +25,7 @@ import React from 'react' import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; import styled from 'styled-components'; - +import LoopService from '../../../api/LoopService'; import JSONEditor from '@json-editor/json-editor'; const ModalStyled = styled(Modal)` @@ -38,17 +38,38 @@ export default class ConfigurationPolicyModal extends React.Component { show: true, loopCache: this.props.loopCache, jsonEditor: null, + componentName: "", }; constructor(props, context) { super(props, context); this.handleClose = this.handleClose.bind(this); + this.handleSave = this.handleSave.bind(this); this.renderJsonEditor = this.renderJsonEditor.bind(this); + this.state.componentName = props.match.params.componentName; + } + + handleSave() { + + var errors = this.state.jsonEditor.validate(); + var editorData = this.state.jsonEditor.getValue(); + + if (errors.length !== 0) { + console.error("Errors detected during config policy data validation ", errors); + } + else { + console.info("NO validation errors found in config policy data"); + this.state.loopCache.updateMicroServiceProperties(this.state.componentName, editorData[0]); + LoopService.setMicroServiceProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getMicroServiceForName(this.state.componentName)); + } + + this.setState({ show: false }); + this.props.history.push('/'); } handleClose() { this.setState({ show: false }); - this.props.history.push('/') + this.props.history.push('/'); } componentDidMount() { @@ -56,11 +77,12 @@ export default class ConfigurationPolicyModal extends React.Component { } renderJsonEditor() { - var toscaModel = this.state.loopCache.getMicroServiceJsonRepresentationForType("TCA_Jbv1z_v1_0_ResourceInstanceName1_tca"); + console.debug("Rendering ConfigurationPolicyModal ", this.state.componentName); + var toscaModel = this.state.loopCache.getMicroServiceJsonRepresentationForName(this.state.componentName); if (toscaModel == null) { return; } - var editorData = this.state.loopCache.getMicroServiceProperties("TCA_Jbv1z_v1_0_ResourceInstanceName1_tca"); + var editorData = this.state.loopCache.getMicroServicePropertiesForName(this.state.componentName); JSONEditor.defaults.options.theme = 'bootstrap4'; //JSONEditor.defaults.options.iconlib = 'bootstrap2'; @@ -76,7 +98,6 @@ export default class ConfigurationPolicyModal extends React.Component { jsonEditor: new JSONEditor(document.getElementById("editor"), { schema: toscaModel.schema, startval: editorData }) }) - } render() { @@ -93,7 +114,7 @@ export default class ConfigurationPolicyModal extends React.Component { - -- 2.16.6