/*! * Copyright (C) 2017 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. */ import React from 'react'; import PropTypes from 'prop-types'; import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js'; import i18n from 'nfvo-utils/i18n/i18n.js'; import Form from 'nfvo-components/input/validation/Form.jsx'; import Input from 'nfvo-components/input/validation/Input.jsx'; import GridSection from 'nfvo-components/grid/GridSection.jsx'; import GridItem from 'nfvo-components/grid/GridItem.jsx'; const prefix = 'highAvailabilityAndLoadBalancing/'; const pointers = [ { key: 'failureLoadDistribution', description: 'How is load distributed across live vms in the event of a vm/host failure? please describe' }, { key: 'nkModelImplementation', description: 'Does each VM implement the N+K model for redundancy and failure protection? Please describe.' }, { key: 'architectureChoice', description: 'What architecture is being implemented: ACTIVE-ACTIVE and/or ACTIVE-PASSIVE. ', added: 'Will the arrangement be 1-1 or N-M? Please describe.' }, { key: 'slaRequirements', description: 'Specify application SLA requirements on Cloud platform.' }, { key: 'horizontalScaling', description: 'Is horizontal scaling the preferred solution for HA and resiliency? Please describe.' }, { key: 'loadDistributionMechanism', description: 'Can load be distributed across VMs? If so, are special mechanisms needed to re-balance data across VMs?', added: 'Please describe.' } ]; //TODO check for buttons const TextAreaItem = ({ item, toggle, expanded, genericFieldInfo, dataMap, onQDataChanged }) => (
toggle(item.key)}> {i18n(item.description)} {item.added &&
{i18n(item.added)}
}
onQDataChanged({ [`${prefix}${item.key}`]: val }) } />
); class SoftwareProductComponentLoadBalancingView extends React.Component { static propTypes = { componentId: PropTypes.string.isRequired, softwareProductId: PropTypes.string.isRequired, qdata: PropTypes.object, qschema: PropTypes.object, currentSoftwareProduct: PropTypes.object }; state = { expanded: {} }; render() { let { dataMap, genericFieldInfo, onQDataChanged, isReadOnlyMode } = this.props; return (
{genericFieldInfo && (
this.save()} isReadOnlyMode={isReadOnlyMode} hasButtons={false}> { const selectedIndex = e.target.selectedIndex; const val = e.target.options[selectedIndex] .value; onQDataChanged({ [`${prefix}isComponentMandatory`]: val }); }}> {genericFieldInfo[ `${prefix}isComponentMandatory` ].enum.map(isMan => ( ))} { const selectedIndex = e.target.selectedIndex; const val = e.target.options[selectedIndex] .value; onQDataChanged({ [`${prefix}highAvailabilityMode`]: val }); }}> {genericFieldInfo[ `${prefix}highAvailabilityMode` ].enum.map(hmode => ( ))} {pointers.map(pointer => ( { this.toggle(name); }} /> ))}
)}
); } toggle(name) { let st = this.state.expanded[name] ? true : false; let newState = { ...this.state }; newState.expanded[name] = !st; this.setState(newState); } save() { let { onSubmit, qdata } = this.props; return onSubmit({ qdata }); } } export default SoftwareProductComponentLoadBalancingView;