package org.jboss.windup.reporting.model.source; import java.io.IOException; import com.tinkerpop.frames.Incidence; import org.apache.commons.io.IOUtils; import org.jboss.windup.graph.model.ProjectModel; import org.jboss.windup.reporting.model.ReportFileModel; import org.jboss.windup.reporting.model.ReportModel; import org.jboss.windup.util.exception.WindupException; 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; /** * Represents a report on a application source code file (eg, .java file, or .xml file). */ @TypeValue(SourceReportModel.TYPE) public interface SourceReportModel extends ReportModel { String TYPE = "SourceReportModel"; String SOURCE_REPORT_TO_SOURCE_FILE_MODEL = "sourceReportSourceFileModel"; String SOURCE_TYPE = "sourceType"; String SOURCE_REPORT_TO_PROJECT_MODEL = "sourceReportToProjectModel"; /** * Indicates the type of source code (for example, "java" or "xml"). */ @Property(SOURCE_TYPE) void setSourceType(String sourceType); /** * Indicates the type of source code (for example, "java" or "xml"). */ @Property(SOURCE_TYPE) String getSourceType(); /** * Contains a link to the source file. */ @Adjacency(label = SOURCE_REPORT_TO_SOURCE_FILE_MODEL, direction = Direction.OUT) void setSourceFileModel(ReportFileModel fileModel); /** * Contains a link to the source file. */ @Adjacency(label = SOURCE_REPORT_TO_SOURCE_FILE_MODEL, direction = Direction.OUT) ReportFileModel getSourceFileModel(); /** * Gets the source file contents. */ @JavaHandler String getSourceBody(); /** * Contains all {@link ProjectModel}s that contain this file, including any duplicate {@link ProjectModel}s. */ @Incidence(label = SOURCE_REPORT_TO_PROJECT_MODEL, direction = Direction.OUT) Iterable<SourceReportToProjectEdgeModel> getProjectEdges(); /** * Contains all {@link ProjectModel}s that contain this file, including any duplicate {@link ProjectModel}s. */ @Incidence(label = SOURCE_REPORT_TO_PROJECT_MODEL, direction = Direction.OUT) SourceReportToProjectEdgeModel addProjectModel(ProjectModel projectModel); abstract class Impl implements SourceReportModel, JavaHandlerContext<Vertex> { @Override public String getSourceBody() { try { return IOUtils.toString(getSourceFileModel().asInputStream()); } catch (IOException e) { throw new WindupException("Failed to read source file: \"" + getSourceFileModel().getFilePath() + "\" due to: " + e.getMessage(), e); } } } }