/*! * 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 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: React.PropTypes.string.isRequired, softwareProductId: React.PropTypes.string.isRequired, qdata: React.PropTypes.object, qschema: React.PropTypes.object, currentSoftwareProduct: React.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;