summaryrefslogtreecommitdiffstats
path: root/src/app/specializedSearch/SpecializedSearch.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/specializedSearch/SpecializedSearch.jsx')
-rw-r--r--src/app/specializedSearch/SpecializedSearch.jsx266
1 files changed, 266 insertions, 0 deletions
diff --git a/src/app/specializedSearch/SpecializedSearch.jsx b/src/app/specializedSearch/SpecializedSearch.jsx
new file mode 100644
index 0000000..91a45be
--- /dev/null
+++ b/src/app/specializedSearch/SpecializedSearch.jsx
@@ -0,0 +1,266 @@
+/*
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-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, {Component} from 'react';
+import Filter from 'generic-components/filter/Filter.jsx';
+import {GlobalExtConstants} from 'utils/GlobalExtConstants.js';
+import Col from 'react-bootstrap/lib/Col';
+import Row from 'react-bootstrap/lib/Row';
+import Grid from 'react-bootstrap/lib/Grid';
+import Panel from 'react-bootstrap/lib/Panel';
+import BootstrapSwitchButton from 'bootstrap-switch-button-react';
+
+let INVLIST = GlobalExtConstants.INVLIST;
+let OXM = GlobalExtConstants.OXM;
+
+let invList = null;
+let APERTURE_SERVICE = JSON.parse(sessionStorage.getItem(GlobalExtConstants.ENVIRONMENT + 'APERTURE_SERVICE'));
+
+class SpecializedSearch extends Component {
+
+ state = {
+ data: [],
+ filterList: [],
+ filterSelected: '',
+ filterDisplay: 'Select Filter',
+ filterTypeDisplay: 'Filter Type',
+ errorMsg: '',
+ showFilter:false,
+ filterMessage:[],
+ filterValue:'',
+ filterSelectedList:[],
+ isRunEnable:true,
+ enableRealTime: JSON.parse(sessionStorage.getItem(GlobalExtConstants.ENVIRONMENT + 'ENABLE_ANALYSIS'))
+ };
+
+ constructor(){
+ super();
+ APERTURE_SERVICE=JSON.parse(sessionStorage.getItem(GlobalExtConstants.ENVIRONMENT + 'APERTURE_SERVICE'));
+ }
+ componentDidMount(){
+
+ if(this.state.filterSelected === ''){
+ const invKeys = Object.keys(INVLIST.INVENTORYLIST);
+ invKeys.sort().map((item,i) => {
+ if(i === 0 && this.state.filterSelected === ''){
+ this.setState(
+ { filterSelected: INVLIST.INVENTORYLIST[item].modelPath,filterDisplay:'Select Filter',filterTypeDisplay:'Filter Type'},
+ function(){this.populateFilteringOptions();}.bind(this));
+ }
+ });
+ }
+ };
+ isContaining(nameKey, listArray){
+ var found = false;
+ listArray.map((lists) => {
+ if(lists.id === nameKey){
+ console.log('foundName key in list',lists.id);
+ found = true;
+ }
+ });
+ return found;
+ };
+ radioButtonSelectedHandler(event) {
+ console.log('radio button clicked');
+ this.setState(
+ { filterSelected: event.target.value,filterList:[],filterSelectedList:[],filterDisplay:'Select Filter',filterTypeDisplay:'Filter Type',filterMessage:[]},
+ function(){this.populateFilteringOptions();}.bind(this)
+ );
+ };
+ camelToDash = (str) => {
+ return (str.replace(/\W+/g, '-')
+ .replace(/([a-z\d])([A-Z])/g, '$1-$2')).toLowerCase();
+ }
+ populateFilteringOptions = () => {
+
+ let result = JSON.parse(OXM);
+ let arrayOfTypes = result['xml-bindings']['java-types'][0]['java-type'];
+ console.log('arrayOfTypes ', arrayOfTypes);
+ let foundIndex = -1;
+ let searchParam = this.state.filterSelected;
+ if(['PSERVER', 'COMPLEX', 'CLOUDREGION', 'NETWORKPROFILE', 'VIRTUALDATACENTER'].indexOf(this.state.filterSelected.toUpperCase()) === -1){
+ searchParam = this.state.filterSelected.substring(0, this.state.filterSelected.length - 1);
+ }
+ if('CHASSIES'.indexOf(this.state.filterSelected.toUpperCase()) !== -1){
+ searchParam = this.state.filterSelected.substring(0, this.state.filterSelected.length - 2) + 's';
+ }else if(this.state.filterSelected.substr(this.state.filterSelected.length - 3) === 'ies'){
+ searchParam = this.state.filterSelected.substring(0, this.state.filterSelected.length - 3) + 'y';
+ }else if('COMPLEXES'.indexOf(this.state.filterSelected.toUpperCase()) !== -1){
+ searchParam = this.state.filterSelected.substring(0, this.state.filterSelected.length - 2);
+ }
+ if(searchParam === 'PINTERFACE'){
+ searchParam = 'pInterface';
+ }
+ if(this.state.filterSelected.toUpperCase() === 'LINESOFBUSINESS'){
+ searchParam = 'lineOfBusiness';
+ }
+ console.log('searchParam Node type',searchParam);
+ for (var i = 0; i < arrayOfTypes.length && foundIndex === -1; i++) {
+ if (arrayOfTypes[i]['xml-root-element'][0]['$']['name'] === this.camelToDash(searchParam)) {
+ console.log(arrayOfTypes[i]);
+ foundIndex = i;
+ }
+ }
+ var tempState = this.state;
+ tempState.filterList = [];
+ if(foundIndex !== -1){
+ tempState.errorMsg = '';
+ //build the filter list
+ if (arrayOfTypes[foundIndex]['java-attributes']) {
+ let elementLength = 0;
+ if (arrayOfTypes[foundIndex]['java-attributes'][0]['xml-element']) {
+ elementLength = arrayOfTypes[foundIndex]['java-attributes'][0]['xml-element'].length;
+ }
+ for (var j = 0; j < elementLength; j++) {
+ let isPrimitive = JSON.stringify(arrayOfTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['type']).indexOf('java.lang') > -1;
+ if(isPrimitive) { //add to the list
+ let node = {value: arrayOfTypes[foundIndex]['java-attributes'][0]['xml-element'][j]['$']['name']};
+ tempState.filterList.push(node);
+ }
+ }
+ }
+
+ //sort the filter list
+ tempState.filterList = tempState.filterList.sort(function(filter1, filter2) {
+ if ( filter1.value < filter2.value ){
+ return -1;
+ }else if( filter1.value > filter2.value ){
+ return 1;
+ }else{
+ return 0;
+ }
+ });
+ }
+ this.setState(tempState);
+ console.log('tempState.filterList ' + JSON.stringify(tempState.filterList));
+ };
+ initialUpdateOfFilter = (filter) => {
+ this.setState(
+ { filterSelected: filter,filterDisplay:'Select Filter',filterTypeDisplay:'Filter Type'},
+ function(){this.populateFilteringOptions();}.bind(this)
+ );
+ };
+ toggleRealTimeAnalysisCallback=(checked)=>{
+ console.log('toggleRealTimeAnalysisCallback>>>>',checked);
+ sessionStorage.setItem(GlobalExtConstants.ENVIRONMENT + 'ENABLE_ANALYSIS', !checked);
+
+ this.setState({ enableRealTime: !checked,
+ filterList:[],
+ filterSelectedList:[],
+ filterDisplay:'Select Filter',
+ filterTypeDisplay:'Filter Type',
+ filterMessage:[],
+ errorMsg: "",
+ filterMessage: [],
+ filterValue: "",
+ isRunEnable: true,
+ showFilter: false},function(){this.populateFilteringOptions();}.bind(this));
+ }
+ render(){
+ var toggelRealtimeAnalysis = '';
+ if(APERTURE_SERVICE){
+ toggelRealtimeAnalysis = <div className='toggleSwitch'><BootstrapSwitchButton
+ checked={!this.state.enableRealTime}
+ onlabel='Real Time'
+ onstyle='danger'
+ offlabel='Analysis'
+ offstyle='success'
+ style='w-100 mx-3'
+ onChange={(checked) => {
+ this.toggleRealTimeAnalysisCallback(checked);
+ }}
+ /></div>
+ }
+ let pagetitle = '';
+ if(this.state.filterSelected !== ''){
+ pagetitle = INVLIST.INVENTORYLIST[this.state.filterSelected.replace(/\s/g,'').toUpperCase()].display;
+ }
+ const invKeys = Object.keys(INVLIST.INVENTORYLIST);
+ invList = invKeys.sort().map((item,i) => {
+ let checkedStatus = INVLIST.INVENTORYLIST[item].modelPath === this.state.filterSelected;
+ if(i === 0 && this.state.filterSelected === ''){
+ checkedStatus = true;
+ }
+ let selectedClass = 'leftNavSelection';
+ if(checkedStatus){
+ selectedClass = 'leftNavSelected ';
+ }
+ return (
+ <div key={INVLIST.INVENTORYLIST[item].display} className={'form-row ' + selectedClass}>
+ <label role='radio' className='radio'>
+ <input type='radio' name='optionsRadios' className='optionsRadios'
+ value={INVLIST.INVENTORYLIST[item].modelPath}
+ checked={checkedStatus}
+ onChange={(event)=> this.radioButtonSelectedHandler(event)}/>
+ <i className='skin'></i>
+ <span>{INVLIST.INVENTORYLIST[item].display}</span>
+ </label>
+ </div>
+ );
+ });
+
+ return(
+ <div>
+ {toggelRealtimeAnalysis}
+ <div id='specialSearch'>
+ <header className='addPadding jumbotron my-4'>
+ <h1 className='display-2'>Network Element Specialized Search</h1>
+ <p className='lead'>
+ On this page you have the ability to build a set of query criteria per network element type and run a query. Simply choose the network element type from the radio buttons, build your filters, and run.
+ </p>
+ </header>
+ </div>
+ <div className='addPadding'>
+ <Row className='show-grid' style={{margin: '0px'}}>
+ <Col md={3} className='leftNavSelection'>
+ <header>List of Network Element Types</header>
+ <form id='filters' name='myForm'>
+ <fieldset role='radiogroup' aria-labelledby='radiolabel1' className='leftNavSelection'>
+ {invList}
+ </fieldset>
+ </form>
+ </Col>
+ <Col md={9} className='mainSectionSelection'>
+ <Panel bsStyle='primary'>
+ <Panel.Heading>
+ <Panel.Title componentClass='h3'>Filter Section : {pagetitle} </Panel.Title>
+ </Panel.Heading>
+ <Panel.Body>
+ <Filter key='specializedSearch'
+ nodeType={this.state.filterSelected}
+ filterList={this.state.filterList}
+ filterDisplay={this.state.filterDisplay}
+ filterTypeDisplay={this.state.filterTypeDisplay}
+ isRunEnable={this.state.isRunEnable}
+ filterMessage={this.state.filterMessage}
+ filterSelectedList={this.state.filterSelectedList}
+ isFilterEnable={true}
+ errorMsg={this.state.errorMsg}
+ enableRealTime={this.state.enableRealTime}/>
+ </Panel.Body>
+ </Panel>
+ </Col>
+ </Row>
+ </div>
+ </div>
+ );
+ }
+}
+export default SpecializedSearch;