/*- * ============LICENSE_START======================================================= * ONAP POLICY-CLAMP * ================================================================================ * Copyright (C) 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, { forwardRef } from 'react'; import Modal from 'react-bootstrap/Modal'; import styled from 'styled-components'; import Button from 'react-bootstrap/Button'; import Alert from 'react-bootstrap/Alert'; import PolicyService from '../../../api/PolicyService'; import FormGroup from '@material-ui/core/FormGroup'; import Checkbox from '@material-ui/core/Checkbox'; import FormControlLabel from '@material-ui/core/FormControlLabel'; const DivWhiteSpaceStyled = styled.div` white-space: pre; ` const PanelDiv = styled.div` text-align: justify; font-size: ${ props => props.theme.policyEditorFontSize }; background-color: ${ props => props.theme.loopViewerBackgroundColor }; ` export default class PolicyDeploymentEditor extends React.Component { state = { policyData: this.props.policyData, showSuccessAlert: false, showFailAlert: false, checkboxesState: this.createPdpStructure(this.props.policyData), checkboxesInitialState: this.createPdpStructure(this.props.policyData), }; constructor(props, context) { super(props, context); this.handleClose = this.handleClose.bind(this); this.handleUpdatePdpDeployment = this.handleUpdatePdpDeployment.bind(this); this.disableAlert = this.disableAlert.bind(this); this.renderPdpDeploymentCheckboxes = this.renderPdpDeploymentCheckboxes.bind(this); this.createPdpStructure = this.createPdpStructure.bind(this); this.handleCheckboxChange = this.handleCheckboxChange.bind(this); this.createPdpGroupOperations = this.createPdpGroupOperations.bind(this); } handleClose() { this.setState({ show: false }); } disableAlert() { this.setState({ showSuccessAlert: false, showFailAlert: false }); } createPdpGroupOperations(initialStates, newStates) { let commandsArray = []; initialStates.forEach(initElem => { let newStateFound = newStates.find(newElement => newElement.name === initElem.name); if (initElem.value !== newStateFound.value) { let newPdpGroupsArray = newStateFound.name.split("/"); let operation = "POST/"; if (initElem.value) { operation = "DELETE/"; } commandsArray.push(operation + newPdpGroupsArray[0] + "/" + newPdpGroupsArray[1] + "/" + this.state.policyData.name + "/" + this.state.policyData.version); } }); return commandsArray.length > 0 ? { "PdpActions": commandsArray } : undefined; } handleUpdatePdpDeployment() { let operationsList = this.createPdpGroupOperations(this.state.checkboxesInitialState, this.state.checkboxesState); if (typeof (operationsList) !== "undefined") { PolicyService.updatePdpDeployment(operationsList).then(respPdpDeploymentUpdate => { if (typeof (respPdpDeploymentUpdate) === "undefined") { //it indicates a failure this.setState({ showFailAlert: true, showMessage: 'Pdp Deployment update Failure' }); } else { this.setState({ showSuccessAlert: true, showMessage: 'Pdp Deployment Update successful' }); this.props.policiesTableUpdateFunction(); } }) } else { this.setState({ showSuccessAlert: true, showMessage: 'Pdp Deployment: Nothing to change' }); } } createPdpStructure(policyData) { // Create map with data for all group/subgroup where the policy is deployed let infoPdpMap = new Map(); if (typeof policyData.pdpGroupInfo !== "undefined") { policyData["pdpGroupInfo"].forEach(pdpGroupElem => { let pdpGroupName = Object.keys(pdpGroupElem)[0]; pdpGroupElem[pdpGroupName]["pdpSubgroups"].forEach(pdpSubGroupElem => { infoPdpMap.set(pdpGroupName + "/" + pdpSubGroupElem["pdpType"], true); }); }); } // Create the possible values for pdpgroup/subgroup and tick the ones where policy is deployed let pdpStates = []; if (typeof policyData.supportedPdpGroups !== "undefined") { for (const pdpGroup of policyData["supportedPdpGroups"]) { let pdpGroupName = Object.keys(pdpGroup)[0]; for (const pdpSubGroup of Object.values(pdpGroup)[0]) { let fullName = pdpGroupName + "/" + pdpSubGroup; pdpStates.push({ name: fullName, value: infoPdpMap.get(fullName) !== undefined }); } } } return pdpStates; } handleCheckboxChange(event) { const checkboxesArray = this.state.checkboxesState; checkboxesArray.find(element => element.name === event.target.name).value = event.target.checked; this.setState({ checkboxesState: checkboxesArray }); } renderPdpDeploymentCheckboxes() { return this.state.checkboxesState.map(item => { return } label={ item.name }/>; }); } render() { return ( { this.state.showMessage } { this.state.showMessage } { this.renderPdpDeploymentCheckboxes() } ); } }