/** * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.aai.serialization.engines.query;/*- * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= */ // //package org.onap.aai.serialization.engines.query; // //import java.util.List; //import java.util.regex.Matcher; //import java.util.regex.Pattern; // //import org.apache.commons.collections.IteratorUtils; // //import org.onap.aai.db.AAIProperties; //import org.onap.aai.query.builder.QueryBuilder; //import org.onap.aai.serialization.engines.TransactionalGraphEngine; //import com.tinkerpop.blueprints.Direction; //import com.tinkerpop.blueprints.Graph; //import com.tinkerpop.blueprints.TransactionalGraph; //import com.tinkerpop.blueprints.Vertex; //import com.tinkerpop.gremlin.groovy.Gremlin; //import com.tinkerpop.gremlin.java.GremlinPipeline; //import com.tinkerpop.pipes.Pipe; //import com.tinkerpop.pipes.util.iterators.SingleIterator; // //public class GremlinQueryEngine extends QueryEngine { // // public GremlinQueryEngine (TransactionalGraphEngine engine) { // super(engine); // // } // // // @Override // public List executeQuery(TransactionalGraph g, QueryBuilder query) { // List result = null; // Vertex start = query.getStart(); // if (start != null) { // result = this.executeQuery(start, (String)query.getQuery()); // } else { // result = this.processGremlinQuery((String)query.getQuery()); // } // return result; // // } // // @Override // public List executeParentQuery(TransactionalGraph g, QueryBuilder query) { // // List result = null; // Vertex start = query.getStart(); // if (start != null) { // result = this.executeQuery(start, (String)query.getParentQuery()); // } else { // result = this.processGremlinQuery((String)query.getParentQuery()); // } // return result; // } // // private List executeQuery(Vertex startVertex, String query) { // // return this.processGremlinQuery(startVertex, "_()" + query); // // } // // @Override // public List findParents(Vertex start) { // // String findAllParents = ".as('x').inE.has('isParent', true).outV" // + ".loop('x'){it.object.inE.has('isParent',true).count()==1}{true}"; // // List results = this.executeQuery(start, findAllParents); // results.add(0, start); // return results; // // } // // @Override // public List findChildren(Vertex start) { // String findAllChildren = ".as('x').outE.has('isParent', true).inV" // + ".loop('x'){it.object.outE.has('isParent', true).count() >= 1}{true}"; // // List results = this.executeQuery(start, findAllChildren); // results.add(0, start); // return results; // // } // // @Override // public List findDeletable(Vertex start) { // String findAllChildren = ".as('x').outE.or(_().has('isParent', true), _().has('hasDelTarget', true)).inV" // + ".loop('x'){it.object.outE.or(_().has('isParent', true), _().has('hasDelTarget', true)).count() >= 1}{true}"; // // List results = this.executeQuery(start, findAllChildren); // results.add(0, start); // return results; // } // private List processGremlinQuery(String query) { // // Pattern firstHasSet = Pattern.compile("^(\\.has\\(.*?\\))(\\.has\\(.*?\\))*(?!\\.has)"); // Pattern p = Pattern.compile("\\.has\\('(.*?)',\\s?'(.*?)'\\)"); // Matcher m = firstHasSet.matcher(query); // List results = null; // GremlinPipeline pipe = new GremlinPipeline<>(dbEngine.getGraph()); // if (m.find()) { // String hasSet = m.group(); // query = query.replace(m.group(0), ""); // m = p.matcher(hasSet); // pipe.V(); // while (m.find()) { // pipe.has(m.group(1), m.group(2)); // } // results = processGremlinQuery(pipe.toList(), "_()" + query); // } // // return results; // // } // private List processGremlinQuery(Vertex startVertex, String query) { // // Pipe pipe = Gremlin.compile(query); // pipe.setStarts(new SingleIterator(startVertex)); // // return (List)IteratorUtils.toList(pipe.iterator()); // } // private List processGremlinQuery(List list, String query) { // // Pipe pipe = Gremlin.compile(query); // // pipe.setStarts(list); // // return (List)IteratorUtils.toList(pipe.iterator()); // } // // // @Override // public List findRelatedVertices(Vertex start, Direction direction, String label, String nodeType) { // String findRelatedVertices = "_()"; // switch (direction) { // case OUT: // findRelatedVertices += ".out('" + label + "')"; // break; // case IN: // findRelatedVertices += ".in('" + label + "')"; // break; // case BOTH: // findRelatedVertices += ".both('" + label + "')"; // break; // default: // break; // } // findRelatedVertices += ".has('" + AAIProperties.NODE_TYPE + "', '" + nodeType + "').dedup()"; // List results = this.executeQuery(start, findRelatedVertices); // results.add(0, start); // return results; // } // //} //