package org.jboss.windup.config.query; import java.util.List; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.graph.model.WindupVertexFrame; import com.tinkerpop.blueprints.Predicate; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.FramedGraphQuery; import com.tinkerpop.gremlin.java.GremlinPipeline; import org.jboss.windup.graph.frames.TypeAwareFramedGraphQuery; class QueryTypeCriterion implements QueryFramesCriterion, QueryGremlinCriterion { private final String typeValue; private final Class<? extends WindupVertexFrame> searchedClass; public QueryTypeCriterion(Class<? extends WindupVertexFrame> clazz) { this.searchedClass = clazz; this.typeValue = TypeAwareFramedGraphQuery.getTypeValue(clazz); } @Override public void query(FramedGraphQuery q) { q.has(WindupVertexFrame.TYPE_PROP, typeValue); } /** * Adds a criterion to given pipeline which filters out vertices representing given WindupVertexFrame. */ public static GremlinPipeline<Vertex, Vertex> addPipeFor(GremlinPipeline<Vertex, Vertex> pipeline, Class<? extends WindupVertexFrame> clazz) { pipeline.has(WindupVertexFrame.TYPE_PROP, TypeAwareFramedGraphQuery.getTypeValue(clazz)); return pipeline; } public String toString() { return ".formType(" + searchedClass.getSimpleName() + ")"; } @Override public void query(GraphRewrite event, GremlinPipeline<Vertex, Vertex> pipeline) { pipeline.has(WindupVertexFrame.TYPE_PROP, new Predicate() { @Override public boolean evaluate(Object first, Object second) { @SuppressWarnings("unchecked") List<String> firstList = (List<String>) first; return firstList.contains(second); } }, typeValue); } }