package net.jangaroo.exml.mojo;
import net.jangaroo.exml.config.ExmlConfiguration;
import net.jangaroo.jooc.mvnplugin.JangarooMojo;
import org.apache.maven.model.Build;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginManagement;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* The most abstract EXML Mojo you could imagine.
*/
public abstract class AbstractExmlMojo extends JangarooMojo {
/**
* The Maven project object
*
* @parameter expression="${project}"
* @readonly
*/
private MavenProject project;
/**
* Source directory to scan for files to compile.
*
* @parameter default-value="${basedir}/src/main/joo"
*/
private File sourceDirectory;
/**
* Output directory for all ActionScript3 files generated out of exml components
* @parameter default-value="${project.build.directory}/generated-sources/joo"
*/
private File generatedSourcesDirectory;
/**
* Source directory to scan for test files to compile.
*
* @parameter default-value="${project.build.testSourceDirectory}"
*/
private File testSourceDirectory;
/**
* Output directory for all test ActionScript3 files generated out of exml components
*
* @parameter default-value="${project.build.directory}/generated-test-sources/joo"
*/
private File generatedTestSourcesDirectory;
/**
* The package into which config classes of EXML components are generated.
*
* @parameter
*/
private String configClassPackage;
/**
* @parameter default-value="${plugin}"
*/
private PluginDescriptor pluginDescriptor;
@Override
protected MavenProject getProject() {
return project;
}
public File getSourceDirectory() {
return sourceDirectory;
}
public File getTestSourceDirectory() {
return testSourceDirectory;
}
public File getGeneratedSourcesDirectory() {
return generatedSourcesDirectory;
}
public File getGeneratedTestSourcesDirectory() {
return generatedTestSourcesDirectory;
}
protected ExmlConfiguration createExmlConfiguration(List<File> classPath, List<File> sourcePath, File outputDirectory) throws MojoExecutionException {
if (configClassPackage == null) {
throw new MojoExecutionException("parameter 'configClassPackage' is missing");
}
ExmlConfiguration exmlConfiguration = new ExmlConfiguration();
exmlConfiguration.setConfigClassPackage(configClassPackage);
exmlConfiguration.setClassPath(classPath);
exmlConfiguration.setOutputDirectory(outputDirectory);
try {
exmlConfiguration.setSourcePath(sourcePath);
} catch (IOException e) {
throw new MojoExecutionException("could not determine source directory", e);
}
return exmlConfiguration;
}
protected boolean hasExmlConfiguration() {
for (Object o : getProject().getBuildPlugins()) {
Plugin plugin = (Plugin) o;
if (plugin.getGroupId().equals(pluginDescriptor.getGroupId()) &&
plugin.getArtifactId().equals(pluginDescriptor.getArtifactId())) {
return true;
}
}
Build build = getProject().getOriginalModel().getBuild();
if (build != null) {
PluginManagement pluginManagement = build.getPluginManagement();
if (pluginManagement != null) {
for (Plugin plugin : pluginManagement.getPlugins()) {
if (plugin.getGroupId().equals(pluginDescriptor.getGroupId()) &&
plugin.getArtifactId().equals(pluginDescriptor.getArtifactId())) {
return true;
}
}
}
}
return false;
}
protected boolean isExmlProject() {
for(Object o : getProject().getBuildPlugins()) {
Plugin plugin = (Plugin) o;
if (plugin.getGroupId().equals(pluginDescriptor.getGroupId()) &&
plugin.getArtifactId().equals(pluginDescriptor.getArtifactId())) {
return plugin.isExtensions();
}
}
return false;
}
}