package org.jboss.windup.rules.apps.javaee.service;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.model.ProjectModel;
import org.jboss.windup.graph.model.WindupVertexFrame;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.rules.apps.java.model.JavaClassModel;
import org.jboss.windup.rules.apps.javaee.model.JaxRSWebServiceModel;
import com.thinkaurelius.titan.core.attribute.Text;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.gremlin.java.GremlinPipeline;
/**
* Provides methods for creating, updating, and deleting {@link JaxRSWebServiceModelService} vertices.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class JaxRSWebServiceModelService extends GraphService<JaxRSWebServiceModel>
{
public JaxRSWebServiceModelService(GraphContext context)
{
super(context, JaxRSWebServiceModel.class);
}
public JaxRSWebServiceModel getOrCreate(ProjectModel application, String path, JavaClassModel implementationClass)
{
GremlinPipeline<Vertex, Vertex> pipeline;
if (implementationClass == null)
{
pipeline = new GremlinPipeline<>(getGraphContext().getGraph());
pipeline.V();
pipeline.has(WindupVertexFrame.TYPE_PROP, JaxRSWebServiceModel.TYPE);
}
else
{
pipeline = new GremlinPipeline<>(implementationClass.asVertex());
pipeline.out(JaxRSWebServiceModel.JAXRS_IMPLEMENTATION_CLASS);
pipeline.has(WindupVertexFrame.TYPE_PROP, Text.CONTAINS, JaxRSWebServiceModel.TYPE);
}
pipeline.has(JaxRSWebServiceModel.PATH, path);
if (pipeline.hasNext())
{
JaxRSWebServiceModel result = frame(pipeline.next());
if (!result.isAssociatedWithApplication(application))
result.addApplication(application);
return result;
}
else
{
JaxRSWebServiceModel jaxWebService = create();
jaxWebService.addApplication(application);
jaxWebService.setPath(path);
jaxWebService.setImplementationClass(implementationClass);
return jaxWebService;
}
}
}