package org.jboss.windup.rules.apps.maven.dao; import java.util.Iterator; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.WindupVertexFrame; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.rules.apps.java.model.project.MavenProjectModel; import org.jboss.windup.rules.apps.xml.model.XmlFileModel; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.gremlin.java.GremlinPipeline; /** * Contains methods for searching and deleting {@link MavenProjectModel}s. */ public class MavenProjectService extends GraphService<MavenProjectModel> { public MavenProjectService(GraphContext context) { super(context, MavenProjectModel.class); } public MavenProjectModel createMavenStub(String groupId, String artifactId, String version) { MavenProjectModel facet = create(); facet.setMavenIdentifier(generateMavenKey(groupId, artifactId, version)); facet.setGroupId(groupId); facet.setArtifactId(artifactId); facet.setVersion(version); return facet; } /** * Find all {@link MavenProjectModel}s that match the given groupId, artifactId, and version. Note that this could potentially return multiple * projects if multiple projects are in the original application with the same GAV. */ public Iterable<MavenProjectModel> findByGroupArtifactVersion(String groupId, String artifactId, String version) { String key = generateMavenKey(groupId, artifactId, version); Iterable<MavenProjectModel> facet = this.findAllByProperty(MavenProjectModel.MAVEN_IDENTIFIER, key); return facet; } protected String generateMavenKey(String groupId, String artifactId, String version) { return groupId + ":" + artifactId + ":" + version; } public boolean isMavenConfiguration(XmlFileModel resource) { return (new GremlinPipeline<Vertex, Vertex>(resource.asVertex())).in("xmlFacet").as("facet") .has(WindupVertexFrame.TYPE_PROP, this.getTypeValueForSearch()).back("facet") .iterator().hasNext(); } public MavenProjectModel getMavenConfigurationFromResource(XmlFileModel resource) { @SuppressWarnings("unchecked") Iterator<Vertex> v = (Iterator<Vertex>) (new GremlinPipeline<Vertex, Vertex>(resource.asVertex())) .in("xmlFacet").as("facet") .has(WindupVertexFrame.TYPE_PROP, this.getTypeValueForSearch()).back("facet") .iterator(); if (v.hasNext()) { return getGraphContext().getFramed().frame(v.next(), this.getType()); } return null; } }