Merge "Added docs directory and index file for traversal"
[aai/traversal.git] / aai-traversal / src / main / java / org / onap / aai / rest / search / GremlinServerImpl.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 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
10  *
11  *    http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  *
20  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21  */
22 package org.onap.aai.rest.search;
23
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Vector;
27
28 import org.apache.tinkerpop.gremlin.driver.Client;
29 import org.apache.tinkerpop.gremlin.driver.Cluster;
30 import org.apache.tinkerpop.gremlin.driver.ResultSet;
31 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
32 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
33
34 import org.onap.aai.util.AAIConfig;
35
36 public class GremlinServerImpl extends GenericQueryProcessor {
37
38         
39         protected GremlinServerImpl(Builder builder) {
40                 super(builder);
41         }
42         
43         
44         @Override
45         protected GraphTraversal<?,?> runQuery(String query, Map<String, Object> params) {
46
47                 //must force them into ids because of serialization issue with 
48                 //tinkerpop-3.0.1-incubating
49                 query += ".id()";
50         String rebindGraph = AAIConfig.get("aai.server.rebind", "g");
51
52         if(!"g".equals(rebindGraph)){
53                 query = query.replaceFirst("g\\.V\\(", rebindGraph + ".V(");
54                 }
55         
56                 Cluster cluster = gremlinServerSingleton.getCluster();
57                 Client client = cluster.connect();
58
59                 ResultSet results = client.submit(query, params);
60                 
61
62                 List<Object> vIds = new Vector<>();
63                 results.stream().forEach(x -> {
64                         Object obj = x.getObject();
65                         vIds.add(obj);
66                 });
67                 
68                 client.close();
69                 
70                 if (vIds.isEmpty()) {
71                         return __.start();
72                 } else {
73                         return this.dbEngine.asAdmin().getTraversalSource().V(vIds.toArray());
74                 }
75         }
76         
77 }