package org.jboss.shrinkwrap.resolver.api.maven.embedded;
import java.io.File;
import java.util.List;
import org.apache.maven.model.Model;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.Invoker;
import org.jboss.shrinkwrap.api.Archive;
/**
* @author <a href="mailto:mjobanek@redhat.com">Matous Jobanek</a>
*/
public interface BuiltProject {
/**
* Tries to find an {@link Archive} with a default name.
* <p>
* As a "default archive name" is understood:
* <ul>
* <li>either combination of artifactId + version + packaging suffix</li>
* <li>or a finalName set in <build> section of project's POM file + packaging suffix</li>
* </ul>
* </p>
* If no archive with a corresponding name is found, then {@code null} is returned
*
*
* @return An {@link Archive} with a default name. If no archive is found then null is returned
*/
Archive getDefaultBuiltArchive();
/**
* Returns an instance of {@link BuiltProject} representing module with the given name.
* The name has to equal to the string specified in current project POM file
*
* @param moduleName Name of the required module
* @return An instance of {@link BuiltProject} representing module with the given name.
*/
BuiltProject getModule(String moduleName);
/**
* Returns a list of instances of {@link BuiltProject} representing all modules specified in the POM file.
*
* @return A list of instances of {@link BuiltProject} representing all modules specified in the POM file.
*/
List<BuiltProject> getModules();
/**
* Returns a {@link File} representing a build target directory
*
* @return A {@link File} representing a build target directory
*/
File getTargetDirectory();
/**
* Returns a list of all supported {@link Archive}s found in the first level of the build target directory.
* If no target directory is present then null is returned.
*
* @return A list of all supported {@link Archive}s found in the first level of the build target directory.
* If no target directory is present then null is returned.
*/
List<Archive> getArchives();
/**
* Returns a list of all {@link Archive}s of the given type of {@link Archive} found in the first level of the build
* target directory. If no target directory is present then null is returned.
*
* @param type The required type of {@link Archive}
* @param <A> The required type of {@link Archive}
* @return A list of all {@link Archive}s of the given type of {@link Archive} found in the first level of the build
* target directory. If no target directory is present then null is returned.
*/
<A extends Archive<?>> List<A> getArchives(Class<A> type);
/**
* Returns an instance of {@link Model} representing the set and parsed POM file
*
* @return An instance of {@link Model} representing the set and parsed POM file
*/
Model getModel();
/**
* Returns a log of a Maven build of this project. If no log has been retrieved and set, then null is returned.
* <p>
* NOTE: Please be aware that if you retrieve this instance of {@link BuiltProject} from the EmbeddedMaven
* build and you use the method {@link EmbeddedMaven#withMavenInvokerSet(InvocationRequest, Invoker)} for it,
* then no Maven log is set by default and this method returns {@code null}!
* </p>
*
* @return A log of a Maven build of this project. If no log has been retrieved and set, then null is returned.
*/
String getMavenLog();
/**
* Sets the given log a Maven build for this instance
*
* @param mavenLog The log of a Maven build to be set
*/
void setMavenLog(String mavenLog);
/**
* Returns an exit code of a Maven build set for this instance. Default value is 0
*
* @return An exit code of a Maven build set for this instance. Default value is 0
*/
int getMavenBuildExitCode();
/**
* Sets the given exit code of a Maven build for this instance. Default value is 0
*
* @param mavenBuildExitCode The exit code of a Maven build to be set. Default value is 0
*/
void setMavenBuildExitCode(int mavenBuildExitCode);
}