package org.jboss.windup.reporting.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import org.jboss.windup.graph.Indexed; import org.jboss.windup.graph.MapInAdjacentVertices; import org.jboss.windup.graph.model.WindupVertexFrame; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.Adjacency; import com.tinkerpop.frames.Property; import com.tinkerpop.frames.modules.javahandler.JavaHandler; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; import com.tinkerpop.frames.modules.typedgraph.TypeValue; /** * Provides the base object for all reports. * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @TypeValue("Report") public interface ReportModel extends WindupVertexFrame { String CHILD_REPORT = "childReport"; String RELATED_RESOURCES = "relatedResources"; String PARENT_REPORT = "parentReport"; String TEMPLATE_TYPE = "templateType"; String TEMPLATE_PATH = "templatePath"; String REPORT_FILENAME = "reportFilename"; String REPORT_ICON_CLASS = "reportIconClass"; String REPORT_NAME = "reportName"; String DESCRIPTION = "reportDescription"; /** * The name of the report (for example, 'ClassLoader Report' or 'EJB Report') */ @Property(REPORT_NAME) void setReportName(String reportName); /** * The name of the report (for example, 'ClassLoader Report' or 'EJB Report') */ @Property(REPORT_NAME) String getReportName(); /** * Contains a full-text description of the report. */ @Property(DESCRIPTION) void setDescription(String description); /** * Contains a full-text description of the report. */ @Property(DESCRIPTION) String getDescription(); /** * The filename of the report on disk (useful for other reports that need to link to this one) */ @Property(REPORT_FILENAME) void setReportFilename(String reportFilename); /** * The filename of the report on disk (useful for other reports that need to link to this one) */ @Property(REPORT_FILENAME) String getReportFilename(); /** * The path to the template that produced this report (for example, /reports/blacklist.ftl) */ @Indexed @Property(TEMPLATE_PATH) void setTemplatePath(String templatePath); /** * The path to the template that produced this report (for example, /reports/blacklist.ftl) */ @Property(TEMPLATE_PATH) String getTemplatePath(); /** * The templating technology used to produce this report (for example, freemarker) * * @param templateType */ @Property(TEMPLATE_TYPE) void setTemplateType(TemplateType templateType); @Property(TEMPLATE_TYPE) TemplateType getTemplateType(); /** * CSS Class for the Report Icon * @return */ @Property(REPORT_ICON_CLASS) String getReportIconClass(); /** * CSS Class for the Report Icon * @param reportName */ @Property(REPORT_ICON_CLASS) void setReportIconClass(String reportName); /** * The parent report... this could be the root (index) or another level of summary report. */ @Adjacency(label = PARENT_REPORT, direction = Direction.IN) ReportModel getParentReport(); @Adjacency(label = PARENT_REPORT, direction = Direction.IN) void setParentReport(ReportModel parent); /** * The graph objects that took part in producing this report */ @MapInAdjacentVertices(label = RELATED_RESOURCES) void setRelatedResource(Map<String, WindupVertexFrame> wvf); @MapInAdjacentVertices(label = RELATED_RESOURCES) Map<String, WindupVertexFrame> getRelatedResources(); /** * Provides a list of child reports referenced by this report */ @Adjacency(label = CHILD_REPORT, direction = Direction.OUT) Iterable<ReportModel> getChildReports(); @Adjacency(label = CHILD_REPORT, direction = Direction.OUT) void addChildReport(final ReportModel reportResource); /** * Get all ReportModels that should be displayed in the path to this report. */ @JavaHandler List<ReportModel> getAllParentsInReversedOrder(); abstract class Impl implements ReportModel, JavaHandlerContext<Vertex> { public List<ReportModel> getAllParentsInReversedOrder() { List<ReportModel> reports = new ArrayList<>(); ReportModel currentReport = this; reports.add(this); while (currentReport.getParentReport() != null) { reports.add(currentReport.getParentReport()); currentReport = currentReport.getParentReport(); } Collections.reverse(reports); return reports; } } }