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