1 package org.openecomp.sdc.be.components.path.beans;
3 import org.janusgraph.core.PropertyKey;
4 import org.janusgraph.core.JanusGraph;
5 import org.janusgraph.core.JanusGraphQuery;
6 import org.janusgraph.core.schema.ConsistencyModifier;
7 import org.janusgraph.core.schema.JanusGraphIndex;
8 import org.janusgraph.core.schema.JanusGraphManagement;
9 import org.apache.tinkerpop.gremlin.structure.Edge;
10 import org.apache.tinkerpop.gremlin.structure.Vertex;
11 import org.openecomp.sdc.be.dao.graph.datatype.ActionEnum;
12 import org.openecomp.sdc.be.dao.graph.datatype.GraphElementTypeEnum;
13 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
14 import org.openecomp.sdc.be.dao.jsongraph.utils.IdBuilderUtils;
15 import org.openecomp.sdc.be.dao.neo4j.GraphEdgePropertiesDictionary;
16 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
17 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
18 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
19 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
20 import org.openecomp.sdc.be.resources.data.UserData;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 import java.util.ArrayList;
25 import java.util.HashMap;
28 public class JanusGraphTestSetup {
31 private static final Logger logger = LoggerFactory.getLogger(JanusGraphTestSetup.class);
33 private static JanusGraph graph;
35 public static boolean createGraph( JanusGraph graph) {
36 JanusGraphTestSetup.graph = graph;
37 createIndexesAndDefaults();
39 logger.info("** JanusGraph graph created ");
44 private static boolean isVertexExist(Map<String, Object> properties) {
45 JanusGraphQuery query = graph.query();
47 if (properties != null && !properties.isEmpty()) {
48 for (Map.Entry<String, Object> entry : properties.entrySet()) {
49 query = query.has(entry.getKey(), entry.getValue());
52 Iterable<Vertex> vertecies = query.vertices();
53 java.util.Iterator<Vertex> iterator = vertecies.iterator();
54 if (iterator.hasNext()) {
60 private static void createDefaultAdminUser() {
61 createUser(getDefaultUserAdmin());
66 private static void createUser(UserData user) {
67 Map<String, Object> checkedProperties = new HashMap<>();
68 checkedProperties.put(GraphPropertiesDictionary.USERID.getProperty(), user.getUserId());
69 checkedProperties.put(GraphPropertiesDictionary.LABEL.getProperty(), NodeTypeEnum.User.getName());
70 Map<String, Object> properties = null;
71 if (!isVertexExist(checkedProperties)) {
72 Vertex vertex = graph.addVertex();
73 vertex.property(GraphPropertiesDictionary.LABEL.getProperty(), NodeTypeEnum.User.getName());
74 properties = user.toGraphMap();
75 for (Map.Entry<String, Object> entry : properties.entrySet()) {
76 vertex.property(entry.getKey(), entry.getValue());
81 private static UserData getDefaultUserAdmin() {
82 UserData userData = new UserData();
83 userData.setAction(ActionEnum.Create);
84 userData.setElementType(GraphElementTypeEnum.Node);
85 userData.setUserId("jh0003");
86 userData.setEmail("admin@sdc.com");
87 userData.setFirstName("Jimmy");
88 userData.setLastName("Hendrix");
89 userData.setRole("ADMIN");
90 userData.setStatus(UserStatusEnum.ACTIVE.name());
91 userData.setLastLoginTime(0L);
96 private static void createVertexIndixes() {
97 logger.info("** createVertexIndixes started");
99 JanusGraphManagement graphMgt = graph.openManagement();
100 JanusGraphIndex index = null;
101 for (GraphPropertiesDictionary prop : GraphPropertiesDictionary.values()) {
102 PropertyKey propKey = null;
103 if (!graphMgt.containsPropertyKey(prop.getProperty())) {
104 Class<?> clazz = prop.getClazz();
105 if (!ArrayList.class.getName().equals(clazz.getName()) && !HashMap.class.getName().equals(clazz.getName())) {
106 propKey = graphMgt.makePropertyKey(prop.getProperty()).dataType(prop.getClazz()).make();
109 propKey = graphMgt.getPropertyKey(prop.getProperty());
111 if (prop.isIndexed()) {
112 if (!graphMgt.containsGraphIndex(prop.getProperty())) {
113 if (prop.isUnique()) {
114 index = graphMgt.buildIndex(prop.getProperty(), Vertex.class).addKey(propKey).unique().buildCompositeIndex();
116 graphMgt.setConsistency(propKey, ConsistencyModifier.LOCK); // Ensures
122 graphMgt.setConsistency(index, ConsistencyModifier.LOCK); // Ensures
130 graphMgt.buildIndex(prop.getProperty(), Vertex.class).addKey(propKey).buildCompositeIndex();
136 logger.info("** createVertexIndixes ended");
140 private static void createEdgeIndixes() {
141 logger.info("** createEdgeIndixes started");
142 JanusGraphManagement graphMgt = graph.openManagement();
143 for (GraphEdgePropertiesDictionary prop : GraphEdgePropertiesDictionary.values()) {
144 if (!graphMgt.containsGraphIndex(prop.getProperty())) {
145 PropertyKey propKey = graphMgt.makePropertyKey(prop.getProperty()).dataType(prop.getClazz()).make();
146 graphMgt.buildIndex(prop.getProperty(), Edge.class).addKey(propKey).buildCompositeIndex();
151 logger.info("** createEdgeIndixes ended");
154 private static void createIndexesAndDefaults() {
155 createVertexIndixes();
157 createDefaultAdminUser();
158 createRootCatalogVertex();
160 private static void createRootCatalogVertex(){
161 Vertex vertex = graph.addVertex();
162 vertex.property(GraphPropertyEnum.UNIQUE_ID.getProperty(), IdBuilderUtils.generateUniqueId());
163 vertex.property(GraphPropertyEnum.LABEL.getProperty(), VertexTypeEnum.CATALOG_ROOT.getName());