summaryrefslogtreecommitdiffstats
path: root/src/generic-components/graph/NodeFactory.js
diff options
context:
space:
mode:
authorARULNA <arul.nambi@amdocs.com>2017-06-02 16:27:25 -0400
committerARULNA <arul.nambi@amdocs.com>2017-06-02 16:33:14 -0400
commitca007e933bcd9f63aa77801656ed9dd4142c432c (patch)
treece97ed9df8c4fe48a524f0dc1365ad28acef7c46 /src/generic-components/graph/NodeFactory.js
parent42b788b852f0604748828e9e325e4a0f01152c75 (diff)
Initial coomit for AAI-UI(sparky-fe)
Change-Id: I9f8482824a52bac431c100939899e760c0fa4fdb Signed-off-by: ARULNA <arul.nambi@amdocs.com>
Diffstat (limited to 'src/generic-components/graph/NodeFactory.js')
-rw-r--r--src/generic-components/graph/NodeFactory.js115
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;