package org.jboss.windup.rules.apps.javaee.service;
import java.util.Collections;
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.JaxWSWebServiceModel;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.gremlin.java.GremlinPipeline;
/**
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class JaxWSWebServiceModelService extends GraphService<JaxWSWebServiceModel>
{
public JaxWSWebServiceModelService(GraphContext context)
{
super(context, JaxWSWebServiceModel.class);
}
public JaxWSWebServiceModel getOrCreate(ProjectModel application, JavaClassModel endpointInterface, JavaClassModel implementationClass)
{
GremlinPipeline<Vertex, Vertex> pipeline = new GremlinPipeline<>(getGraphContext().getGraph());
pipeline.V().has(WindupVertexFrame.TYPE_PROP, JaxWSWebServiceModel.TYPE);
if (endpointInterface != null)
pipeline.as("endpointInterface").out(JaxWSWebServiceModel.JAXWS_INTERFACE).retain(Collections.singleton(endpointInterface.asVertex()))
.back("endpointInterface");
if (implementationClass != null)
pipeline.as("implementationClass").out(JaxWSWebServiceModel.JAXWS_IMPLEMENTATION_CLASS)
.retain(Collections.singleton(implementationClass.asVertex()))
.back("implementationClass");
if (pipeline.hasNext())
{
JaxWSWebServiceModel result = frame(pipeline.next());
if (!result.isAssociatedWithApplication(application))
result.addApplication(application);
return result;
}
else
{
JaxWSWebServiceModel model = create();
model.addApplication(application);
model.setInterface(endpointInterface);
if (implementationClass != null)
{
model.setImplementationClass(implementationClass);
}
return model;
}
}
}