package com.fizzed.stork.maven;
import com.fizzed.stork.core.ArgumentException;
import com.fizzed.stork.launcher.Configuration;
import com.fizzed.stork.launcher.ConfigurationFactory;
import com.fizzed.stork.launcher.FileUtil;
import com.fizzed.stork.launcher.Generator;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
/**
* Maven plugin akin to the "stork-launcher" command-line app but
* directly accesses Java library (negating local install requirements).
*
* @author joelauer
*/
@Mojo(name = "launcher",
defaultPhase = LifecyclePhase.PACKAGE,
threadSafe = true
)
public class LauncherMojo extends AbstractMojo {
/**
* Directory to output generated launchers.
*
* @since 1.2.0
*/
@Parameter(property = "outputDirectory", defaultValue = "${project.build.directory}/stork", required = true)
protected File outputDirectory;
/**
* One or more input directories/files to generate.
*
* @since 1.2.0
*/
@Parameter(property = "inputFiles", defaultValue = "${basedir}/src/main/launchers")
protected String[] inputFiles;
@Parameter( defaultValue = "${project}", readonly = true )
protected MavenProject project;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (this.outputDirectory == null || this.outputDirectory.equals("")) {
getLog().info("Skipping (outputDirectory is empty)");
return;
}
try {
List<File> configFiles = FileUtil.findAllFiles(Arrays.asList(inputFiles), true);
List<Configuration> configs = new ConfigurationFactory().read(configFiles);
int generated = new Generator().generate(configs, outputDirectory);
getLog().info("Created " + generated + " launchers");
} catch (ArgumentException | IOException e) {
throw new MojoExecutionException(e.getMessage(), e);
}
}
}