package org.jboss.windup.reporting.model; import com.thinkaurelius.titan.core.TitanGraph; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.util.wrappers.event.EventGraph; import com.tinkerpop.frames.Adjacency; import com.tinkerpop.frames.FramedGraph; import com.tinkerpop.frames.modules.javahandler.JavaHandler; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; import org.jboss.windup.graph.IndexType; import org.jboss.windup.graph.Indexed; import org.jboss.windup.graph.model.WindupVertexFrame; import com.tinkerpop.frames.Property; import com.tinkerpop.frames.modules.typedgraph.TypeValue; import org.jboss.windup.reporting.category.IssueCategory; import org.jboss.windup.reporting.category.IssueCategoryModel; import org.jboss.windup.reporting.category.IssueCategoryRegistry; /** * Aggregates the common properties of all the items generating effort for the Application. * * @author <a href="mailto:mbriskar@gmail.com">Matej Briskar</a> */ @TypeValue(EffortReportModel.TYPE) public interface EffortReportModel extends WindupVertexFrame { String TYPE = "EffortReportModel"; String TYPE_PREFIX = TYPE + ":"; String EFFORT = "EffortReportModelEffort"; // don't use the prefix as we can't name the index with special characters String ISSUE_CATEGORY = TYPE_PREFIX + "issueCategory"; /** * Set the effort weight (E.g. How difficult is it to fix the issue?) */ @Property(EFFORT) void setEffort(int effort); /** * Get the effort weight (E.g. How difficult is it to fix the issue?) */ @Property(EFFORT) @Indexed(value = IndexType.SEARCH, dataType = Integer.class) int getEffort(); /** * Contains a the id of the {@link IssueCategory} (for example, mandatory or potential). */ @Adjacency(label = ISSUE_CATEGORY, direction = Direction.OUT) void setIssueCategory(IssueCategoryModel issueCategory); /** * Contains a the id of the {@link IssueCategory} (for example, mandatory or potential). */ @JavaHandler IssueCategoryModel getIssueCategory(); abstract class Impl implements EffortReportModel, JavaHandlerContext<Vertex> { @Override public IssueCategoryModel getIssueCategory() { Iterable<Vertex> categoryVertices = it().getVertices(Direction.OUT, ISSUE_CATEGORY); IssueCategoryModel result; if (categoryVertices.iterator().hasNext()) { result = frame(categoryVertices.iterator().next()); } else { result = IssueCategoryRegistry.loadFromGraph((FramedGraph<EventGraph<TitanGraph>>)g(), IssueCategoryRegistry.DEFAULT); } return result; } } }