Author: tchemit Date: 2009-08-22 09:18:39 +0200 (Sat, 22 Aug 2009) New Revision: 545 Added: trunk/src/main/java/org/nuiton/util/PluginIOContext.java Modified: trunk/pom.xml trunk/src/main/java/org/nuiton/util/PluginHelper.java Log: adding PluginIOContext and some usefull methods on it (copyFiles, expandFiles,...) Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2009-08-18 14:57:22 UTC (rev 544) +++ trunk/pom.xml 2009-08-22 07:18:39 UTC (rev 545) @@ -37,7 +37,7 @@ <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> - <version>1.5.5</version> + <version>1.5.15</version> <!--scope>provided</scope--> </dependency> Modified: trunk/src/main/java/org/nuiton/util/PluginHelper.java =================================================================== --- trunk/src/main/java/org/nuiton/util/PluginHelper.java 2009-08-18 14:57:22 UTC (rev 544) +++ trunk/src/main/java/org/nuiton/util/PluginHelper.java 2009-08-22 07:18:39 UTC (rev 545) @@ -32,6 +32,7 @@ import java.io.OutputStreamWriter; import java.nio.channels.FileChannel; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; @@ -41,8 +42,11 @@ import java.util.SortedSet; import java.util.TreeSet; import java.util.Vector; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import org.apache.maven.model.Resource; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.DirectoryScanner; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.io.RawInputStreamFacade; @@ -363,4 +367,105 @@ FileUtils.copyStreamToFile(facade, destFile); } + + public static List<File> getIncludedFiles(File dir, String[] includes, String[] excludes) { + DirectoryScanner ds = new DirectoryScanner(); + List<File> result = new ArrayList<File>(); + ds.setBasedir(dir); + if (includes != null) { + ds.setIncludes(includes); + } + if (excludes != null) { + + ds.setExcludes(excludes); + } + ds.addDefaultExcludes(); + ds.scan(); + for (String file : ds.getIncludedFiles()) { + File in = new File(dir, file); + result.add(in); + } + return result; + } + + public static void copyFiles(File src, File dst, String[] includes, String[] excludes, boolean overwrite) throws IOException { + PluginIOContext c = new PluginIOContext(); + c.setInput(src); + c.setOutput(dst); + copyFiles(c, includes, excludes, overwrite); + } + + public static void copyFiles(PluginIOContext p, String[] includes, String[] excludes, boolean overwrite) throws IOException { + DirectoryScanner ds = new DirectoryScanner(); + + + for (File input : p.getInputs()) { + ds.setBasedir(input); + if (includes != null) { + ds.setIncludes(includes); + } + if (excludes != null) { + + ds.setExcludes(excludes); + } + ds.addDefaultExcludes(); + ds.scan(); + for (String file : ds.getIncludedFiles()) { + File in = new File(input, file); + File out = new File(p.getOutput(), file); + if (overwrite) { + FileUtils.copyFile(in, out); + } else { + FileUtils.copyFileIfModified(in, out); + } + } + } + } + + public static void expandFiles(PluginIOContext p, String[] includes, String[] excludes, String[] zipIncludes, boolean overwrite) throws IOException { + + DirectoryScanner ds = new DirectoryScanner(); + + for (File input : p.getInputs()) { + ds.setBasedir(input); + if (includes != null) { + ds.setIncludes(includes); + } + if (excludes != null) { + + ds.setExcludes(excludes); + } + ds.addDefaultExcludes(); + ds.scan(); + for (String file : ds.getIncludedFiles()) { + File in = new File(input, file); + File out = new File(p.getOutput(), file).getParentFile(); + expandFile(in, out, zipIncludes, overwrite); + } + } + } + + public static void expandFile(File src, File dst, String[] includes, boolean overwrite) throws IOException { +// System.out.println("expandFile src:" + src + " to " + dst); + ZipFile zipFile = new ZipFile(src); + Enumeration<? extends ZipEntry> entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry nextElement = entries.nextElement(); + String name = nextElement.getName(); +// System.out.println("name : " + name); + for (String include : includes) { + if (DirectoryScanner.match(include, name)) { + System.out.println("matching name : " + name + " with pattern " + include); + File dstFile = new File(dst, name); + if (overwrite || !dstFile.exists() || nextElement.getTime() > dstFile.lastModified()) { + System.out.println("will expand : " + name + " to " + dstFile); + InputStream inputStream = zipFile.getInputStream(nextElement); + FileOutputStream outStream = new FileOutputStream(dstFile); + IOUtil.copy(inputStream, outStream, 2048); + } + + } + } + } + } } Added: trunk/src/main/java/org/nuiton/util/PluginIOContext.java =================================================================== --- trunk/src/main/java/org/nuiton/util/PluginIOContext.java (rev 0) +++ trunk/src/main/java/org/nuiton/util/PluginIOContext.java 2009-08-22 07:18:39 UTC (rev 545) @@ -0,0 +1,40 @@ +package org.nuiton.util; + +import java.io.File; + +/** + * Une classe pour définir les entrées-sortie d'un plugin. + * + * En entrée, on peut avoir un ou plusieurs répertoires ({@link #inputs}. + * <p/> + * En sortie, on ne peut avoir qu'un seul répertoire ({@link #output}. + * + * + * @author chemit + * @since 1.0.1 + */ +public class PluginIOContext { + + File[] inputs; + File output; + + public File[] getInputs() { + return inputs; + } + + public File getOutput() { + return output; + } + + public void setInput(File input) { + this.inputs = new File[]{input}; + } + + public void setInputs(File[] inputs) { + this.inputs = inputs; + } + + public void setOutput(File output) { + this.output = output; + } +} Property changes on: trunk/src/main/java/org/nuiton/util/PluginIOContext.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL
participants (1)
-
tchemit@users.nuiton.org