diff options
Diffstat (limited to 'src/generic-components/graph/NodeFactory.js')
-rw-r--r-- | src/generic-components/graph/NodeFactory.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/generic-components/graph/NodeFactory.js b/src/generic-components/graph/NodeFactory.js new file mode 100644 index 0000000..6dced1d --- /dev/null +++ b/src/generic-components/graph/NodeFactory.js @@ -0,0 +1,115 @@ +/* + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +import React from 'react'; + +import NodeVisualElementConstants from './NodeVisualElementConstants.js'; +import NodeVisualElementFactory from './NodeVisualElementFactory.js'; + +class NodeFactory { + + constructor() { + this.graphMeta = {}; + this.visualElementFactory = new NodeVisualElementFactory(); + + this.setNodeMeta = this.setNodeMeta.bind(this); + } + + setNodeMeta(metaObject) { + this.graphMeta = metaObject; + this.visualElementFactory.setVisualElementMeta(metaObject); + } + + buildNode(nodeType, nodeProps) { + + let translate = `translate( + ${nodeProps.renderProps.x}, + ${nodeProps.renderProps.y})`; + let finalProps = { + ...nodeProps.renderProps, + className: this.graphMeta.aaiEntityNodeDescriptors[nodeType].class, + transform: translate + }; + + let nodeVisualElementsData = this.extractVisualElementArrayFromMeta( + nodeType); + let nodeVisualElements = undefined; + if (nodeVisualElementsData) { + nodeVisualElements = []; + nodeVisualElementsData.map((elementData, index) => { + if (elementData.type === NodeVisualElementConstants.BUTTON) { + if (nodeProps.buttons) { + let isButtonSelected = true; + elementData = { + ...elementData, + isSelected: isButtonSelected + }; + } + } + nodeVisualElements.push( + this.visualElementFactory.buildVisualElement(nodeProps.meta, + elementData.type, elementData, index)); + }); + //Draw overlay only if the node is validated + if (nodeProps.meta.nodeMeta.nodeValidated) { + + if (nodeProps.meta.nodeMeta.nodeIssue) { + let warningOverlayProps = { + name: NodeVisualElementConstants.ICON_WARNING, + }; + nodeVisualElements.push( + this.visualElementFactory.buildVisualElement(nodeProps, + NodeVisualElementConstants.ICON, warningOverlayProps, + nodeVisualElementsData.length + 1)); + } else { + let tickOverlayProps = { + name: NodeVisualElementConstants.ICON_TICK, + }; + nodeVisualElements.push( + this.visualElementFactory.buildVisualElement(nodeProps, + NodeVisualElementConstants.ICON, tickOverlayProps, + nodeVisualElementsData.length + 1)); + } + } + } + + if (nodeVisualElements) { + return React.createElement('g', finalProps, nodeVisualElements); + } + + return React.createElement('g', finalProps); + } + + extractVisualElementArrayFromMeta(nodeClassName) { + let nodeVisualElements = undefined; + if (this.graphMeta.aaiEntityNodeDescriptors) { + nodeVisualElements = + this.graphMeta.aaiEntityNodeDescriptors[nodeClassName].visualElements; + } + return nodeVisualElements; + } +} + +export default NodeFactory; |