Author: sshyrkov
Date: Tue Nov 20 18:09:35 2007
New Revision: 19235

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19235&repname=
=3Djahia
Log:
Added simultaneous support for inclusion and excluson patterns

Modified:
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/utils/zip/Fil=
teredDirectoryWalker.java

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/utils/z=
ip/FilteredDirectoryWalker.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/utils/zip/FilteredDirectoryWalker.java=
&rev=3D19235&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/utils/zip/Fil=
teredDirectoryWalker.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/utils/zip/Fil=
teredDirectoryWalker.java Tue Nov 20 18:09:35 2007
@@ -18,6 +18,7 @@
 package org.jahia.utils.zip;
 =

 import java.io.File;
+import java.io.FileFilter;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -27,46 +28,54 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOCase;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
 =

 /**
  * Utility class for zipping a directory tree content considering path
- * inclusion/exclusion filters.
+ * inclusion/exclusion filters. Exclusing always takes precedence over
+ * inclusion.
  * =

  * @author Sergiy Shyrkov
  */
 public class FilteredDirectoryWalker extends DirectoryWalker {
 =

-    private static class PathFilter extends WildcardFileFilter {
+    private static class PathFilter implements FileFilter {
 =

-        private boolean doExclusion;
+        private String[] includeWildcards;
 =

-        private String[] wildcards;
+        private String[] excludeWildcards;
 =

-        public PathFilter(String[] wildcards, boolean doExclusion) {
-            super(wildcards);
-            this.wildcards =3D wildcards;
-            this.doExclusion =3D doExclusion;
+        public PathFilter(String[] includeWildcards, String[] excludeWildc=
ards) {
+            super();
+            this.includeWildcards =3D includeWildcards;
+            this.excludeWildcards =3D excludeWildcards;
+        }
+
+        private static boolean matches(String path, String wildcard) {
+            return FilenameUtils
+                    .wildcardMatch(path, wildcard, IOCase.SENSITIVE);
         }
 =

-        @Override
         public boolean accept(File file) {
-            if (!doExclusion && file.isDirectory())
+            if (file.isDirectory())
                 return true;
 =

+            boolean accept =3D false;
             String path =3D file.getPath();
-            boolean accept =3D doExclusion;
-            for (int i =3D 0; i < wildcards.length; i++) {
-                boolean matches =3D FilenameUtils.wildcardMatch(path,
-                        wildcards[i], IOCase.SENSITIVE);
-                if (doExclusion) {
-                    if (matches) {
-                        accept =3D false;
+            if (includeWildcards.length > 0) {
+                for (String wildcard : includeWildcards) {
+                    if (matches(path, wildcard)) {
+                        accept =3D true;
                         break;
                     }
-                } else {
-                    if (matches) {
-                        accept =3D true;
+                }
+            } else {
+                accept =3D true;
+            }
+
+            if (accept && excludeWildcards.length > 0) {
+                for (String wildcard : excludeWildcards) {
+                    if (matches(path, wildcard)) {
+                        accept =3D false;
                         break;
                     }
                 }
@@ -75,6 +84,8 @@
         }
     }
 =

+    private static final String[] EMPTY_ARRAY =3D {};
+
     private static String[] convertPatterns(File baseDir, String[] pathPat=
terns) {
         String[] convertedPatterns =3D new String[pathPatterns.length];
         for (int i =3D 0; i < pathPatterns.length; i++) {
@@ -92,25 +103,24 @@
 =

     private File startDirectory;
 =

-    public FilteredDirectoryWalker(File startDirectory,
-            List<String> pathPatterns) {
-        this(startDirectory, pathPatterns, false);
+    /**
+     * Initializes an instance of this class to include all resources under
+     * <code>startDirectory</code>.
+     * =

+     * @param startDirectory
+     */
+    public FilteredDirectoryWalker(File startDirectory) {
+        this(startDirectory, null, null);
     }
 =

     public FilteredDirectoryWalker(File startDirectory,
-            List<String> pathPatterns, boolean doExcludeFiltering) {
-        this(startDirectory, pathPatterns.toArray(new String[pathPatterns
-                .size()]), doExcludeFiltering);
-    }
-
-    public FilteredDirectoryWalker(File startDirectory, String[] pathPatte=
rns) {
-        this(startDirectory, pathPatterns, false);
-    }
-
-    public FilteredDirectoryWalker(File startDirectory, String[] pathPatte=
rns,
-            boolean doExcludeFiltering) {
-        super(new PathFilter(convertPatterns(startDirectory, pathPatterns),
-                doExcludeFiltering), -1);
+            String[] includePathPatterns, String[] excludePathPatterns) {
+        super(new PathFilter(
+                convertPatterns(startDirectory,
+                        includePathPatterns !=3D null ? includePathPatterns
+                                : EMPTY_ARRAY), convertPatterns(startDirec=
tory,
+                        excludePathPatterns !=3D null ? excludePathPatterns
+                                : EMPTY_ARRAY)), -1);
         this.startDirectory =3D startDirectory;
     }
 =


_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to