package org.jboss.windup.rules.apps.java.model;
import org.jboss.windup.graph.Indexed;
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.graph.model.resource.SourceFileModel;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.frames.Adjacency;
import com.tinkerpop.frames.Property;
import com.tinkerpop.frames.modules.typedgraph.TypeValue;
/**
*
* This represents Java source code as an abstract concept. This is useful for things that are not strictly ".java" source code, but are semantically
* very similar to Java source code. Generally files like this will have a 1-to-1 relationship with a generated .java file, but we may only have
* access to the original source at runtime.
*
* An example of this would be a JSP file, although there could be others.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
@TypeValue(AbstractJavaSourceModel.TYPE)
public interface AbstractJavaSourceModel extends FileModel, SourceFileModel
{
String TYPE = "AbstractJavaSourceModel";
String PACKAGE_NAME = "packageName";
String JAVA_CLASS_MODEL = "javaClass";
String ROOT_SOURCE_FOLDER = "rootSourceFolder";
/**
* This is the "root" directory for this source file.
*
* For example, if you have a file at "/project/src/main/java/org/example/Foo.java" then this would point the directory "/project/src/main/java".
*
*/
@Adjacency(label = ROOT_SOURCE_FOLDER, direction = Direction.OUT)
FileModel getRootSourceFolder();
/**
* This is the "root" directory for this source file.
*
* For example, if you have a file at "/project/src/main/java/org/example/Foo.java" then this would point the directory "/project/src/main/java".
*
*/
@Adjacency(label = ROOT_SOURCE_FOLDER, direction = Direction.OUT)
void setRootSourceFolder(FileModel fileModel);
/**
* Contains the Java package name
*/
@Indexed
@Property(PACKAGE_NAME)
String getPackageName();
/**
* Contains the Java package name
*/
@Property(PACKAGE_NAME)
void setPackageName(String packageName);
/**
* Lists the {@link JavaClassModel}s contained within this source file
*/
@Adjacency(label = JAVA_CLASS_MODEL, direction = Direction.OUT)
Iterable<JavaClassModel> getJavaClasses();
/**
* Lists the {@link JavaClassModel}s contained within this source file
*/
@Adjacency(label = JAVA_CLASS_MODEL, direction = Direction.OUT)
void addJavaClass(JavaClassModel javaClassModel);
}