2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.operations.impl.util;
23 import org.janusgraph.core.JanusGraphEdge;
24 import org.janusgraph.core.JanusGraph;
25 import org.janusgraph.core.JanusGraphVertex;
26 import org.apache.tinkerpop.gremlin.structure.Edge;
27 import org.apache.tinkerpop.gremlin.structure.Element;
28 import org.apache.tinkerpop.gremlin.structure.Property;
29 import org.apache.tinkerpop.gremlin.structure.Vertex;
30 import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
31 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
32 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
33 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
36 import java.util.Map.Entry;
37 //import com.tinkerpop.blueprints.Direction;
38 //import com.tinkerpop.blueprints.Edge;
39 //import com.tinkerpop.blueprints.Vertex;
40 //import com.tinkerpop.blueprints.util.ElementHelper;
42 public class PrintGraph {
44 public void printGraphVertices(JanusGraph graph) {
46 Iterable<JanusGraphVertex> vertices = graph.query().vertices();
48 if (vertices != null) {
49 Iterator<JanusGraphVertex> iterator = vertices.iterator();
50 while (iterator.hasNext()) {
51 Vertex vertex = iterator.next();
53 // System.out.println(vertex);
54 // System.out.println(ElementHelper.getProperties(vertex));
55 // System.out.println("=======================================");
63 public void printGraphEdges(JanusGraph graph) {
65 Iterable<JanusGraphEdge> vertices = graph.query().edges();
67 if (vertices != null) {
68 Iterator<JanusGraphEdge> iterator = vertices.iterator();
69 while (iterator.hasNext()) {
70 Edge edge = iterator.next();
72 // System.out.println(edge);
73 // System.out.println("edge=" + edge.getLabel() + ",
74 // properties="+ ElementHelper.getProperties(edge));
75 // System.out.println("edge=" + edge.label() + ", properties="+
76 // getProperties(edge));
77 // System.out.println("=======================================");
85 public String buildGraphForWebgraphWiz(JanusGraph graph) {
87 StringBuilder builder = new StringBuilder();
88 builder.append("digraph finite_state_machine {\n");
89 builder.append("rankdir=LR;\n");
90 builder.append("size=\"15,10\" \n");
91 // node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
92 // node [shape = circle];
94 Iterable<JanusGraphVertex> vertices = graph.query().vertices();
96 if (vertices != null) {
97 Iterator<JanusGraphVertex> iterator = vertices.iterator();
98 while (iterator.hasNext()) {
99 Vertex vertex = iterator.next();
101 // System.out.println(vertex);
102 // System.out.println(ElementHelper.getProperties(vertex));
103 // System.out.println(getProperties(vertex));
104 // System.out.println("=======================================");
106 Map<String, Object> properties = getProperties(vertex);
108 String nodeLabel = (String) properties.get(GraphPropertiesDictionary.LABEL.getProperty());
110 String color = getColorByNodeType(nodeLabel);
112 String uid = getNodeIdByLabel(nodeLabel, properties);
114 // System.out.println("uid=" + uid);
116 String nodeRecord = buildNodeRecord(uid, color, properties);
118 // System.out.println(nodeRecord);
120 builder.append(nodeRecord);
122 // if (nodeLabel.equals(NodeTypeEnum.Category)) {
126 // } else (nodeLabel.equals(NodeTypeEnum.User)) {
134 Iterable<JanusGraphEdge> edges = graph.query().edges();
137 Iterator<JanusGraphEdge> iterator = edges.iterator();
138 while (iterator.hasNext()) {
139 Edge edge = iterator.next();
141 // Vertex vertexFrom = edge.getVertex(Direction.OUT);
142 // Vertex vertexTo = edge.getVertex(Direction.IN);
143 Vertex vertexFrom = edge.outVertex();
144 Vertex vertexTo = edge.inVertex();
147 // getNodeIdByLabel((String)vertexFrom.getProperty(GraphPropertiesDictionary.LABEL.getProperty()),
148 // ElementHelper.getProperties(vertexFrom));
150 // getNodeIdByLabel((String)vertexTo.getProperty(GraphPropertiesDictionary.LABEL.getProperty()),
151 // ElementHelper.getProperties(vertexTo));
152 String fromUid = getNodeIdByLabel(vertexFrom.value(GraphPropertiesDictionary.LABEL.getProperty()),
153 getProperties(vertexFrom));
154 String toUid = getNodeIdByLabel(vertexTo.value(GraphPropertiesDictionary.LABEL.getProperty()),
155 getProperties(vertexTo));
157 // String edgeLabel = edge.getLabel();
158 String edgeLabel = edge.label();
160 // String edgeRecord = buildEdgeRecord(fromUid, toUid,
161 // edgeLabel, ElementHelper.getProperties(edge));
162 String edgeRecord = buildEdgeRecord(fromUid, toUid, edgeLabel, getProperties(edge));
164 builder.append(edgeRecord);
166 // System.out.println(edge);
167 // System.out.println("edge=" + edge.getLabel() + ",
169 // + ElementHelper.getProperties(edge));
170 // System.out.println("edge=" + edge.label() + ", properties="
171 // + getProperties(edge));
172 // System.out.println("=======================================");
177 builder.append(" } ");
179 return builder.toString();
183 // LR_0 [ style = "bold" color = "red" shape = "Mrecord" label =
184 // "hello\nworld | { name | apache } | { version | 1.0 } | { uid |
185 // apache.1.0 } | { state| CERTIFIED } |{ b |{c|<here> d|e}| f}| g | h"
188 // LR_0 -> LR_2 [ label = "SS(B)" ];
189 // LR_0 -> LR_1 [ label = "SS(S)" ];
190 // LR_1 -> LR_3 [ label = "S($end)" ];
191 // LR_2 -> LR_6 [ label = "SS(b)" ];
192 // LR_2 -> LR_5 [ label = "SS(a)" ];
193 // LR_2 -> LR_4 [ label = "S(A)" ];
194 // LR_5 -> LR_7 [ label = "S(b)" ];
195 // LR_5 -> LR_5 [ label = "S(a)" ];
196 // LR_6 -> LR_6 [ label = "S(b)" ];
197 // LR_6 -> LR_5 [ label = "S(a)" ];
198 // LR_7 -> LR_8 [ label = "S(b)" ];
199 // LR_7 -> LR_5 [ label = "S(a)" ];
200 // LR_8 -> LR_6 [ label = "S(b)" ];
201 // LR_8 -> LR_5 [ label = "S(a)" ];
203 private String buildEdgeRecord(String fromUid, String toUid, String edgeLabel, Map<String, Object> properties) {
205 StringBuilder builder = new StringBuilder();
206 // LR_0 -> LR_2 [ label = "SS(B)" ];
208 String generatedProps = generateStringFromProperties(properties);
210 String color = getEdgeColorByLabel(edgeLabel);
212 builder.append("\"" + fromUid + "\"" + " -> " + "\"" + toUid + "\"" + " [ color = " + color + " label = \""
213 + edgeLabel + "(" + generatedProps + ")\"" + " ] " + "\n");
215 return builder.toString();
218 private String getEdgeColorByLabel(String edgeLabel) {
220 GraphEdgeLabels edgeLabelEnum = GraphEdgeLabels.getByName(edgeLabel);
222 String color = "black";
224 switch (edgeLabelEnum) {
239 private String generateStringFromProperties(Map<String, Object> properties) {
241 StringBuilder builder = new StringBuilder();
243 if (properties != null) {
244 for (Entry<String, Object> entry : properties.entrySet()) {
245 String key = entry.getKey();
246 String value = entry.getValue().toString();
247 builder.append(key + "=" + value + "__");
250 return builder.toString();
254 private String buildNodeRecord(String uid, String color, Map<String, Object> properties) {
256 StringBuilder builder = new StringBuilder();
258 builder.append("\"" + uid + "\"" + " [ ");
259 builder.append("style = \"bold\" ");
260 builder.append(" color = \"" + color + "\"");
261 builder.append("shape = \"Mrecord\" ");
264 int maxKeyLength = 0;
265 for (Entry<String, Object> entry1 : properties.entrySet()) {
266 String key = entry1.getKey();
267 int keyLength = key.length();
268 if (keyLength > maxKeyLength) {
269 maxKeyLength = keyLength;
273 boolean first = true;
274 for (Entry<String, Object> entry : properties.entrySet()) {
276 String key = entry.getKey();
277 String value = entry.getValue().toString();
279 if (key.equals(GraphPropertiesDictionary.CONSTRAINTS.getProperty())) {
280 value = value.replaceAll("[^\\w\\s]", "_");
283 key = padKey(key, maxKeyLength);
290 label += " { " + key + " | " + value + " } ";
293 builder.append("label = \"" + label + "\" ");
294 builder.append(" ] ");
296 // LR_0 [ style = "bold" color = "red" shape = "Mrecord" label =
297 // "hello\nworld | { name | apache } | { version | 1.0 } | { uid |
298 // apache.1.0 } | { state| CERTIFIED } |{ b |{c|<here> d|e}| f}| g | h"
301 builder.append(" \n ");
302 return builder.toString();
305 private String getNodeIdByLabel(String nodeLabel, Map<String, Object> properties) {
307 NodeTypeEnum typeEnum = NodeTypeEnum.getByName(nodeLabel);
313 uid = (String) properties.get(GraphPropertiesDictionary.USERID.getProperty());
315 case ServiceCategory:
316 case ResourceCategory:
318 uid = (String) properties.get(GraphPropertiesDictionary.NAME.getProperty());
322 uid = (String) properties.get(GraphPropertiesDictionary.UNIQUE_ID.getProperty());
329 private String getColorByNodeType(String nodeLabel) {
331 NodeTypeEnum typeEnum = NodeTypeEnum.getByName(nodeLabel);
333 String color = "red";
335 case ServiceCategory:
338 case ResourceCategory:
342 color = "forestgreen";
348 color = "lightgreen";
356 case RelationshipType:
357 color = "darkorchid";
362 case RequirementImpl:
363 // color = "forestgreen";
380 private String padKey(String key, int maxKeyLength) {
382 int len = key.length();
383 for (int i = len; i < maxKeyLength; i++) {
390 public int getNumberOfVertices(JanusGraph graph) {
392 Iterable<JanusGraphVertex> vertices = graph.query().vertices();
394 if (vertices != null) {
395 Iterator<JanusGraphVertex> iterator = vertices.iterator();
396 while (iterator.hasNext()) {
397 Vertex vertex = iterator.next();
404 public Set<String> getVerticesSet(JanusGraph janusGraph) {
406 Set<String> set = new HashSet<>();
408 Iterable<JanusGraphVertex> vertices = janusGraph.query().vertices();
410 if (vertices != null) {
411 Iterator<JanusGraphVertex> iterator = vertices.iterator();
412 while (iterator.hasNext()) {
413 Vertex vertex = iterator.next();
415 // System.out.println(vertex);
416 // System.out.println(ElementHelper.getProperties(vertex));
417 // System.out.println(getProperties(vertex));
418 // System.out.println("=======================================");
420 // Map<String, Object> properties =
421 // ElementHelper.getProperties(vertex);
422 Map<String, Object> properties = getProperties(vertex);
424 String nodeLabel = (String) properties.get(GraphPropertiesDictionary.LABEL.getProperty());
426 String uid = getNodeIdByLabel(nodeLabel, properties);
436 public Map<String, Object> getProperties(Element element) {
438 Map<String, Object> result = null;
440 if (element.keys() != null && element.keys().size() > 0) {
441 Map<String, Property> propertyMap = ElementHelper.propertyMap(element,
442 element.keys().toArray(new String[element.keys().size()]));
443 result = new HashMap<>();
445 for (Entry<String, Property> entry : propertyMap.entrySet()) {
446 String key = entry.getKey();
447 Object value = entry.getValue().value();
449 result.put(key, value);