package org.jboss.windup.graph.model; import org.jboss.windup.graph.model.resource.FileModel; import com.tinkerpop.blueprints.Vertex; 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; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import java.util.Collections; /** * Refers to a specific portion of a File and contains a reference to the code involved. */ @TypeValue(FileLocationModel.TYPE) public interface FileLocationModel extends FileReferenceModel, ToFileModelTransformable { String TYPE = "fileLocationModel"; String LINE_NUMBER = "lineNumber"; String LENGTH = "length"; String COLUMN_NUMBER = "startPosition"; String SOURCE_SNIPPIT = "referenceSourceSnippit"; /** * Set the line number at which this {@link FileLocationModel} should appear in the designated {@link FileModel}. */ @Property(LINE_NUMBER) void setLineNumber(int lineNumber); /** * Get the line number at which this {@link FileLocationModel} should appear in the designated {@link FileModel}. */ @Property(LINE_NUMBER) int getLineNumber(); /** * Set the column number at which this {@link FileLocationModel} should appear in the designated {@link FileModel}. */ @Property(COLUMN_NUMBER) void setColumnNumber(int startPosition); /** * Get the column number at which this {@link FileLocationModel} should appear in the designated {@link FileModel}. */ @Property(COLUMN_NUMBER) int getColumnNumber(); /** * Set the length of content for which this {@link FileLocationModel} should cover in the designated {@link FileModel} . */ @Property(LENGTH) void setLength(int length); /** * Get the length of content for which this {@link FileLocationModel} should cover in the designated {@link FileModel} . */ @Property(LENGTH) int getLength(); /** * Gets the snippit referenced by this {@link FileLocationModel}. */ @Property(SOURCE_SNIPPIT) void setSourceSnippit(String source); /** * Sets the snippit referenced by this {@link FileLocationModel}. */ @Property(SOURCE_SNIPPIT) String getSourceSnippit(); /** * Gets a human readable description of the location in the file */ @JavaHandler String getDescription(); @Override @JavaHandler Iterable<FileModel> transformToFileModel(); abstract class Impl implements FileLocationModel, JavaHandlerContext<Vertex> { private static final int MAX_DESC_WIDTH = 90; @Override public String getDescription() { if (null == getSourceSnippit()) return ""; return StringEscapeUtils.escapeHtml4( StringUtils.substringBefore(StringUtils.abbreviate(getSourceSnippit().trim(), MAX_DESC_WIDTH), "\n")); } @Override public Iterable<FileModel> transformToFileModel() { return Collections.singleton(getFile()); } } }