package org.jboss.windup.reporting.model;
import java.util.Map;
import org.jboss.windup.graph.MapInAdjacentProperties;
import org.jboss.windup.graph.model.ProjectModel;
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;
/**
* These reports are directly associated with an application, and that application's project model.
* These can include things like an Application Overview report (with various hints, etc)
* as well as more specific reports (hibernate reports, ejb reports, classloading reports, etc).
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
@TypeValue(ApplicationReportModel.TYPE)
public interface ApplicationReportModel extends ReportModel
{
String DISPLAY_IN_APPLICATION_REPORT_INDEX = "displayInApplicationReportIndex";
String DISPLAY_IN_GLOBAL_APPLICATION_INDEX = "displayInGlobalApplicationIndex";
String TYPE = "ApplicationReport";
String REPORT_LINES = "reportLines";
String REPORT_TO_PROJECT_MODEL = "reportToProjectModel";
String REPORT_PRIORITY = "reportPriority";
String MAIN_APPLICATION_REPORT = "mainApplicationModel";
/**
* Provides a link to the Navigation Index that is used for this particular report
*/
@Adjacency(label = ApplicationReportIndexModel.APPLICATION_REPORT_INDEX_TO_REPORT_MODEL, direction = Direction.IN)
void setApplicationReportIndexModel(ApplicationReportIndexModel navIndex);
/**
* Provides a link to the Navigation Index that is used for this particular report. If there is more than one (for example, in the case of a
* single report used both globally and associated with an application), then return the one associated with an app.
*/
@JavaHandler
ApplicationReportIndexModel getApplicationReportIndexModel();
/**
* This can be used to determine a reports location in a navigation bar. The primary purpose is sorting.
*/
@Property(REPORT_PRIORITY)
int getReportPriority();
/**
* This can be used to determine a reports location in a navigation bar. The primary purpose is sorting.
*/
@Property(REPORT_PRIORITY)
void setReportPriority(int priority);
/**
* Indicates that this report should also be attached to the global application index.
*/
@Property(DISPLAY_IN_GLOBAL_APPLICATION_INDEX)
void setDisplayInGlobalApplicationIndex(Boolean displayInGlobalApplicationIndex);
/**
* Indicates that this report should also be attached to the global application index.
*/
@Property(DISPLAY_IN_GLOBAL_APPLICATION_INDEX)
Boolean getDisplayInGlobalApplicationIndex();
/**
* Indicates whether to display this report in the navigation index for the current application. Examples are migration issues, EJBs ...
*/
@Property(DISPLAY_IN_APPLICATION_REPORT_INDEX)
Boolean getDisplayInApplicationReportIndex();
/**
* Indicates whether to display this report in the navigation index for the current application. Examples are migration issues, EJBs ...
*/
@Property(DISPLAY_IN_APPLICATION_REPORT_INDEX)
void setDisplayInApplicationReportIndex(Boolean displayInIndex);
/**
* Indicates whether or not this is the main report for the application. This boolean flag means this report will be referenced from all the
* filemodels within application. Only one report per application must have this set to true.
*/
@Property(MAIN_APPLICATION_REPORT)
Boolean isMainApplicationReport();
/**
* Indicates whether or not this is the main report for the application. This boolean flag means this report will be referenced from all the
* filemodels within application. Only one report per application must have this set to true.
*/
@Property(MAIN_APPLICATION_REPORT)
void setMainApplicationReport(Boolean mainApplicationReport);
/**
* Application notes allow custom text to be added
*/
@Adjacency(label = REPORT_LINES, direction = Direction.OUT)
Iterable<OverviewReportLineMessageModel> getApplicationReportLines();
/**
* Application notes allow custom text to be added
*/
@Adjacency(label = REPORT_LINES, direction = Direction.OUT)
void addApplicationReportLine(OverviewReportLineMessageModel line);
/**
* The ProjectModel associated with this Application Report.
*/
@Adjacency(label = REPORT_TO_PROJECT_MODEL, direction = Direction.OUT)
ProjectModel getProjectModel();
/**
* The ProjectModel associated with this Application Report.
*/
@Adjacency(label = REPORT_TO_PROJECT_MODEL, direction = Direction.OUT)
void setProjectModel(ProjectModel projectModel);
/**
* Contains report properties
*/
@MapInAdjacentProperties(label = "reportProperties")
Map<String, String> getReportProperties();
/**
* Contains report properties
*/
@MapInAdjacentProperties(label = "reportProperties")
void setReportProperties(Map<String, String> map);
abstract class Impl implements ApplicationReportModel, JavaHandlerContext<Vertex>
{
@Override
public ApplicationReportIndexModel getApplicationReportIndexModel()
{
ApplicationReportIndexModel result = null;
for (Vertex v : it().getVertices(Direction.IN, ApplicationReportIndexModel.APPLICATION_REPORT_INDEX_TO_REPORT_MODEL))
{
ApplicationReportIndexModel model = frame(v, ApplicationReportIndexModel.class);
if (result == null)
result = model;
else if (!result.getProjectModels().iterator().hasNext() && model.getProjectModels().iterator().hasNext())
result = model;
}
return result;
}
}
}