/* * * Copyright 2016 RIFT.IO Inc * * 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 {Tab, Tabs, TabList, TabPanel} from 'react-tabs'; import RecordViewStore from '../recordViewer/recordViewStore.js'; import Button from 'widgets/button/rw.button.js'; import './nsConfigPrimitives.scss'; import TextInput from 'widgets/form_controls/textInput.jsx'; import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx'; class NsrConfigPrimitives extends React.Component { constructor(props) { super(props); this.state = {}; this.state.vnfrMap = null; this.state.nsConfigPrimitives = null; } componentWillReceiveProps(props) { let vnfrs = props.data['vnfrs']; let vnfrMap = {}; let nsConfigPrimitives = []; let vnfList = []; if (vnfrs && !this.state.nsConfigPrimitives) { vnfrs.map((vnfr) => { let vnfrConfigPrimitive = {}; vnfrConfigPrimitive.name = vnfr['short-name']; vnfrConfigPrimitive['vnfr-id-ref'] = vnfr['id']; //input references let configPrimitives = vnfr['vnf-configuration']['service-primitive']; //input references by key let vnfrConfigPrimitives = {} if (configPrimitives) { let vnfPrimitiveList = []; configPrimitives.map((configPrimitive) => { vnfrConfigPrimitives[configPrimitive.name] = configPrimitive; vnfPrimitiveList.push({ name: configPrimitive.name, parameter: configPrimitive.parameter }) }); vnfrConfigPrimitive['service-primitives'] = vnfrConfigPrimitives; vnfrMap[vnfr['member-vnf-index-ref']] = vnfrConfigPrimitive; } }); //nsr service-primitives props.data['service-primitive'] && props.data['service-primitive'].map((nsConfigPrimitive, nsConfigPrimitiveIndex) => { //Add optional field to group. Necessary for driving state. let optionalizedNsConfigPrimitiveGroup = nsConfigPrimitive['parameter-group'] && nsConfigPrimitive['parameter-group'].map((parameterGroup)=>{ if(parameterGroup && parameterGroup.mandatory != "true") { parameterGroup.optionalChecked = true; }; return parameterGroup; }); let nscp = { name: nsConfigPrimitive.name, 'nsr_id_ref': props.data.id, 'parameter': nsConfigPrimitive.parameter, 'parameter-group': optionalizedNsConfigPrimitiveGroup, 'vnf-primitive-group':[] } nsConfigPrimitive['vnf-primitive-group'] && nsConfigPrimitive['vnf-primitive-group'].map((vnfPrimitiveGroup, vnfPrimitiveGroupIndex) => { let vnfMap = vnfrMap[vnfPrimitiveGroup['member-vnf-index-ref']]; let vnfGroup = {}; vnfGroup.name = vnfMap.name; vnfGroup['member-vnf-index-ref'] = vnfPrimitiveGroup['member-vnf-index-ref']; vnfGroup['vnfr-id-ref'] = vnfMap['vnfr-id-ref']; vnfGroup.inputs = []; vnfPrimitiveGroup.primitive.map((primitive, primitiveIndex) => { console.log(primitive); primitive.index = primitiveIndex; primitive.parameter = []; vnfMap['service-primitives'][primitive.name].parameter.map(function(p) { p.index = primitiveIndex; let paramCopy = p; paramCopy.value = undefined; primitive.parameter.push(paramCopy); }); vnfGroup.inputs.push(primitive); }); nscp['vnf-primitive-group'].push(vnfGroup); }); nsConfigPrimitives.push(nscp); }); this.setState({ vnfrMap: vnfrMap, data: props.data, nsConfigPrimitives: nsConfigPrimitives }); } } handleParamChange = (parameterIndex, vnfPrimitiveIndex, vnfListIndex, nsConfigPrimitiveIndex, event) => { let nsConfigPrimitives = this.state.nsConfigPrimitives; nsConfigPrimitives[nsConfigPrimitiveIndex]['vnf-primitive-group'][vnfListIndex]['inputs'][vnfPrimitiveIndex]['parameter'][parameterIndex]['value'] = event.target.value; this.setState({ nsConfigPrimitives: nsConfigPrimitives }); } handleNsParamChange = (parameterIndex, nsConfigPrimitiveIndex, event) => { let nsConfigPrimitives = this.state.nsConfigPrimitives; nsConfigPrimitives[nsConfigPrimitiveIndex]['parameter'][parameterIndex]['value'] = event.target.value; this.setState({ nsConfigPrimitives: nsConfigPrimitives }); } handleNsParamGroupParamChange = (parameterIndex, parameterGroupIndex, nsConfigPrimitiveIndex, event) => { let nsConfigPrimitives = this.state.nsConfigPrimitives; nsConfigPrimitives[nsConfigPrimitiveIndex]['parameter-group'][parameterGroupIndex]['parameter'][parameterIndex]['value'] = event.target.value; this.setState({ nsConfigPrimitives: nsConfigPrimitives }); } handleExecuteClick = (nsConfigPrimitiveIndex, event) => { var isValid = RecordViewStore.validateInputs({ nsConfigPrimitives: this.state.nsConfigPrimitives, nsConfigPrimitiveIndex: nsConfigPrimitiveIndex }); if(isValid) { RecordViewStore.constructAndTriggerNsConfigPrimitive({ nsConfigPrimitives: this.state.nsConfigPrimitives, nsConfigPrimitiveIndex: nsConfigPrimitiveIndex }); //Need a better way to reset //Reset disabled per TEF request // this.setState({ // nsConfigPrimitives: null // }) } else { this.props.actions.showNotification('Could not execute service config. Please review your parameters'); } } handleOptionalCheck = (parameterGroupIndex, nsConfigPrimitiveIndex, event) => { let nsConfigPrimitives = this.state.nsConfigPrimitives; let optionalChecked = nsConfigPrimitives[nsConfigPrimitiveIndex]['parameter-group'][parameterGroupIndex].optionalChecked; nsConfigPrimitives[nsConfigPrimitiveIndex]['parameter-group'][parameterGroupIndex].optionalChecked = !optionalChecked; console.log(nsConfigPrimitives) this.setState({ nsConfigPrimitives: nsConfigPrimitives }); } constructConfigPrimitiveTabs = (tabList, tabPanels) => { let self = this; let defaultFromRpc = ''; //coded here for dev purposes let mandatoryFieldValue = 'true'; if (self.state.vnfrMap) { this.state.nsConfigPrimitives && this.state.nsConfigPrimitives.map((nsConfigPrimitive, nsConfigPrimitiveIndex) => { tabList.push( {nsConfigPrimitive.name} ); tabPanels.push( (

{nsConfigPrimitive.name}

* required
{nsConfigPrimitive['parameter'] && nsConfigPrimitive['parameter'].map((parameter, parameterIndex) => { let optionalField = ''; let displayField = ''; let defaultValue = parameter['default-value'] || ''; let isFieldHidden = (parameter['hidden'] && parameter['hidden'] == 'true') || false; let isFieldReadOnly = (parameter['read-only'] && parameter['read-only'] == 'true') || false; if (parameter.mandatory == mandatoryFieldValue) { optionalField = * } if (isFieldReadOnly) { displayField = ( ) } else { displayField = ; } return (
    {
  • {displayField}
  • }
) })} {nsConfigPrimitive['parameter-group'] && nsConfigPrimitive['parameter-group'].map((parameterGroup, parameterGroupIndex) => { let optionalField = ''; let overlayGroup = null; let isOptionalGroup = parameterGroup.mandatory != mandatoryFieldValue; let optionalChecked = parameterGroup.optionalChecked; let inputIsDiabled = (!optionalChecked && isOptionalGroup); if (isOptionalGroup) { optionalField = ; // overlayGroup =
} return (

{parameterGroup.name} {optionalField}

{overlayGroup}
  • {parameterGroup['parameter'] && parameterGroup['parameter'].map((parameter, parameterIndex) => { let optionalField = ''; let displayField = ''; let defaultValue = parameter['default-value'] || ''; let isFieldHidden = (parameter['hidden'] && parameter['hidden'] == 'true') || false; let isFieldReadOnly = (parameter['read-only'] && parameter['read-only'] == 'true') || false; if (parameter.mandatory == mandatoryFieldValue) { optionalField = * } if (isFieldReadOnly) { displayField =
    {parameter.value || defaultValue}
    } else { displayField = } if (parameter.mandatory == mandatoryFieldValue) { optionalField = * } return (
      {
    • }
    ) })}
); })} {nsConfigPrimitive['vnf-primitive-group'] && nsConfigPrimitive['vnf-primitive-group'].map((vnfGroup, vnfGroupIndex) => { return (

{vnfGroup.name}

{vnfGroup.inputs.map((inputGroup, inputGroupIndex) => { return (

{inputGroup.name}

    { inputGroup.parameter.map((input, inputIndex) => { let optionalField = ''; let displayField = ''; let defaultValue = input['default-value'] || ''; let isFieldHidden = (input['hidden'] && input['hidden'] == 'true') || false; let isFieldReadOnly = (input['read-only'] && input['read-only'] == 'true') || false; if (input.mandatory == mandatoryFieldValue) { optionalField = * } if (isFieldReadOnly) { displayField =
    {input.value || defaultValue}
    } else { displayField = } return (
  • {displayField}
  • ) }) }
) })}
) })}