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