package de.uit.eai.portal;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Execute;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import de.uit.eai.portal.mvn.plugin.SourceTransformer;
@Mojo(name = "merge", aggregator = true)
@Execute(goal = "merge", phase = LifecyclePhase.GENERATE_SOURCES)
public class SourceTranformerMojo extends AbstractMojo {
@Parameter(defaultValue="${project.build.sourceEncoding}")
private String scriptEncoding;
@Parameter(defaultValue = "${basedir}/src/config/")
private File sourceDirectory;
@Parameter(defaultValue = "${project.build.directory}/combined/")
private File outputDirectory;
interface FileProcessor {
void processFile(File file);
}
public void execute() throws MojoExecutionException {
getLog().info("Source Directory:" + sourceDirectory);
getLog().info("Output Directory:" + outputDirectory);
final File outputDir = outputDirectory;
if (!outputDir.exists()) {
outputDir.mkdirs();
}
if (!outputDir.isDirectory()) {
throw new MojoExecutionException("outputDirectory '"
+ outputDirectory + "' cannot be created!");
}
if (!sourceDirectory.isDirectory()) {
getLog().error(
"sourceDirectory '" + sourceDirectory + "' does not exist");
throw new MojoExecutionException("sourceDirectory '"
+ sourceDirectory + "' does not exist");
}
final List<String> errors = new ArrayList<String>();
traverseFiles(sourceDirectory, "xml", new FileProcessor() {
public void processFile(File file) {
try {
String outputFilePath = SourceTransformer
.constructAbsolutePath(outputDir.getAbsolutePath(),
SourceTransformer.getRelativePath(
sourceDirectory, file));
SourceTransformer.RESULT result = new SourceTransformer(scriptEncoding)
.processFile(file.getCanonicalPath(),
outputFilePath);
switch (result) {
case NOT_PORTLET:
getLog().debug(
"File "
+ file
+ " was skipped, as its not a Crud2Go-portlet file");
break;
case UP_TO_DATE:
getLog().debug(
"File " + file
+ " is ignored as target is up to date");
break;
case PORTLET_NO_PROCESSING:
getLog().debug("File " + file + " was copied as is");
break;
case PORTLET_PROCESSING_DONE:
getLog().info("File " + file + " was processed");
break;
}
} catch (IOException e) {
errors.add(MessageFormat.format(
"Error processing file {0}: {1}",
file.getAbsolutePath(), e.getMessage()));
}
}
});
if (!errors.isEmpty()) {
for (String error : errors) {
getLog().error(error);
}
throw new MojoExecutionException(
"There were errors during transformation of portlet configurations");
}
}
public static void traverseFiles(File dir, String pattern,
FileProcessor fileProcessor) {
File listFile[] = dir.listFiles();
if (listFile != null) {
for (File aListFile : listFile) {
if (aListFile.isDirectory()) {
traverseFiles(aListFile, pattern, fileProcessor);
} else {
if (aListFile.getName().endsWith(pattern)) {
fileProcessor.processFile(aListFile);
}
}
}
}
}
}