package org.holoeverywhere.resbuilder; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; 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.holoeverywhere.resbuilder.FileProcesser.FileProcesserException; /** * @goal build * @phase initialize */ public class BuildMojo extends AbstractMojo { private static final FileFilter BUILD_ALL_FILTER = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isFile() && pathname.getName().length() > 5 && pathname.getName().endsWith(".json"); } }; /** * Path to android sdk * * @parameter expression="${android.sdk.path}" * @required */ public File androidSdkPath; /** * @parameter expression="${android.sdk.platform}" default-value="16" * @required */ public int androidSdkVersion; /** * Build all files from all include dirs * * @parameter expression="${holo.resbuilder.buildAll}" default-value="false" */ public boolean buildAll; /** * Dirs for search of input files * * @parameter expression="${holo.resbuilder.includeDirs}" */ public File[] includeDirs; /** * Files for processing * * @parameter expression="${holo.resbuilder.input}" alias="input" */ public String[] inputFiles; /** * Default output dir, if input file don't specify it * * @parameter expression="${holo.resbuilder.outputDir}" * default-value="${basedir}/res" */ public File outputDir; public FileProcesser processer; /** * If true - skip resource build * * @parameter expression="${holo.resbuilder.skip}" default-value="false" */ public boolean skip; /** * Be verbose * * @parameter expression="${holo.resbuilder.verbose}" default-value="true" */ public boolean verbose; @Override public void execute() throws MojoExecutionException, MojoFailureException { if (skip) { getLog().info("Flag 'Skip' is true"); return; } if (buildAll) { if (includeDirs == null || includeDirs.length == 0) { getLog().warn( "BuildAll: You want build all files from all include dirs, but you don't specify any include dir. Nothing to build. Skip."); return; } List<String> list = new ArrayList<String>(); for (File dir : includeDirs) { File[] files = dir.listFiles(BUILD_ALL_FILTER); for (File file : files) { getLog().info("BuildAll: add " + file.getAbsolutePath()); list.add(file.getAbsolutePath()); } } if (inputFiles != null && inputFiles.length > 0) { list.addAll(0, Arrays.asList(inputFiles)); } inputFiles = list.toArray(new String[list.size()]); if (inputFiles.length == 0) { getLog().info("BuildAll: nothing to build"); return; } } if (inputFiles == null || inputFiles.length == 0) { getLog().info("Don't specify input files, skip"); return; } if (!buildAll && includeDirs == null || includeDirs.length == 0) { getLog().warn("Include dirs don't specified"); } if (verbose) { getLog().info(""); getLog().info("Final configuration:"); getLog().info( " # androidSdkPath: " + androidSdkPath); getLog().info(" # androidSdkVersion: " + androidSdkVersion); if (includeDirs == null || includeDirs.length == 0) { getLog().info(" # includeDirs: empty"); } else { getLog().info(" # includeDirs: ["); for (File dir : includeDirs) { getLog().info(" # # " + dir.getAbsolutePath()); } getLog().info(" # ]"); } if (inputFiles == null || inputFiles.length == 0) { getLog().info(" # input: empty"); } else { getLog().info(" # input: ["); for (String input : inputFiles) { getLog().info(" # # " + input); } getLog().info(" # ]"); } getLog().info(" # outputDir: " + outputDir); } try { FileProcesser.process(this); } catch (FileProcesserException e) { throw new MojoFailureException("Error in FileProcesser", e); } } }