+ private synchronized void openGraph() {
+ if (graph == null) {
+ graph = janusGraphBuilder.open();
+ }
+ }
+
+ public GraphTraversal<?, ?> hasLabel(GraphTraversal<?, ?> query, Object type) {
+ return query.hasLabel(type);
+ }
+
+
+ @Override
+ public void createDefaultIndexes() {
+ if (isShutdown()) {
+ throw new IllegalStateException("Cannot call storeObjectIndex() after shutdown has been initiated");
+ }
+
+ final String EDGE_IX_NAME = "rel-key-uuid";
+
+ final JanusGraph graph = getGraph();
+ JanusGraphManagement createIndexMgmt = graph.openManagement();
+
+ boolean vertexIndexExists = (createIndexMgmt.getGraphIndex(KEY_PROPERTY_NAME) != null);
+ boolean edgeIndexExists = (createIndexMgmt.getGraphIndex(EDGE_IX_NAME) != null);
+ boolean nodeTypeIndexExists = (createIndexMgmt.getGraphIndex(NODE_TYPE_PROPERTY_NAME) != null);
+
+ if (!vertexIndexExists || !edgeIndexExists) {
+ PropertyKey pk = createIndexMgmt.getOrCreatePropertyKey(KEY_PROPERTY_NAME);
+
+ if (!vertexIndexExists) {
+ LOGGER.info("Create Index " + KEY_PROPERTY_NAME);
+ createIndexMgmt.buildIndex(KEY_PROPERTY_NAME, Vertex.class).addKey(pk).buildCompositeIndex();
+ }
+ if (!edgeIndexExists) {
+ LOGGER.info("Create Index " + EDGE_IX_NAME);
+ createIndexMgmt.buildIndex(EDGE_IX_NAME, Edge.class).addKey(pk).buildCompositeIndex();
+ }
+ createIndexMgmt.commit();
+
+ if (!vertexIndexExists) {
+ awaitIndexCreation(KEY_PROPERTY_NAME);
+ }
+ if (!edgeIndexExists) {
+ awaitIndexCreation(EDGE_IX_NAME);
+ }
+ }
+ else {
+ createIndexMgmt.rollback();
+ LOGGER.info("Index " + KEY_PROPERTY_NAME + " and " + EDGE_IX_NAME + " already exist");
+ }
+
+
+
+ if (!nodeTypeIndexExists) {
+ LOGGER.info("Create Index " + NODE_TYPE_PROPERTY_NAME);
+ createIndexMgmt = graph.openManagement();
+ PropertyKey pk = createIndexMgmt.getOrCreatePropertyKey(NODE_TYPE_PROPERTY_NAME);
+ createIndexMgmt.buildIndex(NODE_TYPE_PROPERTY_NAME, Vertex.class).addKey(pk).buildCompositeIndex();
+ createIndexMgmt.commit();
+ awaitIndexCreation(NODE_TYPE_PROPERTY_NAME);
+ }
+ }