package org.jboss.windup.rules.apps.javaee.service; import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.WindupVertexFrame; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.graph.service.FileService; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.rules.apps.javaee.model.association.VendorSpecificationExtensionModel; import com.thinkaurelius.titan.core.attribute.Text; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.structures.FramedVertexIterable; import com.tinkerpop.gremlin.java.GremlinPipeline; /** * Contains methods for querying, updating, and deleting {@link VendorSpecificationExtensionModel} * * @author <a href="mailto:bradsdavis@gmail.com">Brad Davis</a> * */ public class VendorSpecificationExtensionService extends GraphService<VendorSpecificationExtensionModel> { private static final Logger LOG = Logger.getLogger(VendorSpecificationExtensionService.class.getSimpleName()); final protected FileService fileService; public VendorSpecificationExtensionService(GraphContext context) { super(context, VendorSpecificationExtensionModel.class); fileService = new FileService(this.getGraphContext()); } public Iterable<VendorSpecificationExtensionModel> getVendorSpecificationExtensions(FileModel model) { GremlinPipeline<Vertex, Vertex> pipeline = new GremlinPipeline<>(model.asVertex()); pipeline.out(VendorSpecificationExtensionModel.REF); pipeline.has(WindupVertexFrame.TYPE_PROP, Text.CONTAINS, VendorSpecificationExtensionModel.TYPE); return new FramedVertexIterable<>(getGraphContext().getFramed(), pipeline, VendorSpecificationExtensionModel.class); } /** * Makes the file model a vendor extension, and references a local file (if exists) * * @param model * @param localFileName */ public VendorSpecificationExtensionModel associateAsVendorExtension(FileModel model, String localFileName) { String pathToDescriptor = model.getFilePath(); pathToDescriptor = StringUtils.removeEnd(pathToDescriptor, model.getFileName()); pathToDescriptor += localFileName; // now look up the FileModel specificationFile = fileService.getUniqueByProperty(FileModel.FILE_PATH, pathToDescriptor); VendorSpecificationExtensionModel extension = addTypeToModel(model); if (specificationFile == null) { LOG.warning("File not found: " + pathToDescriptor); } else { // now associate current model with vendorspecificationextension extension.setSpecificationFile(specificationFile); } return extension; } }