git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274060 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -58,6 +58,7 @@ import java.io.File; | |||
| import java.io.IOException; | |||
| import java.util.Vector; | |||
| import org.apache.tools.ant.types.Resource; | |||
| import org.apache.tools.ant.types.ResourceFactory; | |||
| import org.apache.tools.ant.types.selectors.FileSelector; | |||
| import org.apache.tools.ant.types.selectors.SelectorScanner; | |||
| import org.apache.tools.ant.types.selectors.SelectorUtils; | |||
| @@ -151,7 +152,7 @@ import org.apache.tools.ant.util.FileUtils; | |||
| * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> | |||
| * @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a> | |||
| */ | |||
| public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||
| public class DirectoryScanner implements FileScanner, SelectorScanner, ResourceFactory { | |||
| /** | |||
| * Patterns which should be excluded by default. | |||
| @@ -810,27 +811,6 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||
| return files; | |||
| } | |||
| /** | |||
| * Returns the resources of the files which matched at least one | |||
| * of the include patterns and none of the exclude patterns. The | |||
| * names are relative to the base directory. | |||
| * | |||
| * @return resource information for the files which matched at | |||
| * least one of the include patterns and none of the exclude | |||
| * patterns. | |||
| * | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public Resource[] getIncludedFileResources() { | |||
| String[] names = getIncludedFiles(); | |||
| int count = names.length; | |||
| Resource[] resources = new Resource[count]; | |||
| for (int i = 0; i < count; i++) { | |||
| resources[i] = getResource(names[i]); | |||
| } | |||
| return resources; | |||
| } | |||
| /** | |||
| * Returns the names of the files which matched none of the include | |||
| * patterns. The names are relative to the base directory. This involves | |||
| @@ -898,26 +878,6 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||
| return directories; | |||
| } | |||
| /** | |||
| * Returns the resource object for the directories which matched | |||
| * at least one of the include patterns and none of the exclude | |||
| * patterns. The names are relative to the base directory. | |||
| * | |||
| * @return the names of the directories which matched at least one of the | |||
| * include patterns and none of the exclude patterns. | |||
| * | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public Resource[] getIncludedDirectoryResources() { | |||
| String[] names = getIncludedDirectories(); | |||
| int count = names.length; | |||
| Resource[] resources = new Resource[count]; | |||
| for (int i = 0; i < count; i++) { | |||
| resources[i] = getResource(names[i]); | |||
| } | |||
| return resources; | |||
| } | |||
| /** | |||
| * Returns the names of the directories which matched none of the include | |||
| * patterns. The names are relative to the base directory. This involves | |||
| @@ -994,12 +954,7 @@ public class DirectoryScanner implements ResourceScanner, SelectorScanner { | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public Resource getResource(String name) { | |||
| File f = null; | |||
| if (basedir != null) { | |||
| f = new File(basedir, name); | |||
| } else { | |||
| f = new File(name); | |||
| } | |||
| File f = fileUtils.resolveFile(basedir, name); | |||
| return new Resource(name, f.exists(), f.lastModified(), | |||
| f.isDirectory()); | |||
| } | |||
| @@ -1,85 +0,0 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "Ant" and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant; | |||
| import org.apache.tools.ant.types.Resource; | |||
| import org.apache.tools.ant.types.ResourceFactory; | |||
| /** | |||
| * Extends the FileScanner concept to {@link | |||
| * org.apache.tools.ant.types.Resource Resources}. | |||
| * | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public interface ResourceScanner extends FileScanner, ResourceFactory { | |||
| /** | |||
| * Returns resources for the directories which matched at least | |||
| * one of the include patterns and none of the exclude patterns. | |||
| * | |||
| * @return resources for the directories which matched at least | |||
| * one of the include patterns and none of the exclude patterns. | |||
| */ | |||
| Resource[] getIncludedDirectoryResources(); | |||
| /** | |||
| * Returns resources for the files which matched at least one of | |||
| * the include patterns and none of the exclude patterns. | |||
| * | |||
| * @return the names of the files which matched at least one of the | |||
| * include patterns and none of the exclude patterns. | |||
| */ | |||
| Resource[] getIncludedFileResources(); | |||
| } | |||
| @@ -70,7 +70,6 @@ import java.util.zip.ZipEntry; | |||
| import java.util.zip.ZipFile; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.ResourceScanner; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| import org.apache.tools.ant.types.Resource; | |||
| @@ -73,7 +73,6 @@ import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.DirectoryScanner; | |||
| import org.apache.tools.ant.FileScanner; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.ResourceScanner; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| import org.apache.tools.ant.types.PatternSet; | |||
| @@ -441,10 +440,15 @@ public class Zip extends MatchingTask { | |||
| PatternSet.NameEntry ne = oldFiles.createExclude(); | |||
| ne.setName((String) addedFiles.elementAt(i)); | |||
| } | |||
| addResources(oldFiles, | |||
| oldFiles.getDirectoryScanner(getProject()) | |||
| .getIncludedFileResources(), | |||
| zOut); | |||
| DirectoryScanner ds = | |||
| oldFiles.getDirectoryScanner(getProject()); | |||
| String[] f = ds.getIncludedFiles(); | |||
| Resource[] r = new Resource[f.length]; | |||
| for (int i = 0; i < f.length; i++) { | |||
| r[i] = ds.getResource(f[i]); | |||
| } | |||
| addResources(oldFiles, r, zOut); | |||
| } | |||
| finalizeZipOutputStream(zOut); | |||
| @@ -801,13 +805,20 @@ public class Zip extends MatchingTask { | |||
| protected Resource[][] grabResources(FileSet[] filesets) { | |||
| Resource[][] result = new Resource[filesets.length][]; | |||
| for (int i = 0; i < filesets.length; i++) { | |||
| ResourceScanner rs = filesets[i].getDirectoryScanner(getProject()); | |||
| Resource[] files = rs.getIncludedFileResources(); | |||
| Resource[] directories = rs.getIncludedDirectoryResources(); | |||
| result[i] = new Resource[files.length + directories.length]; | |||
| System.arraycopy(directories, 0, result[i], 0, directories.length); | |||
| System.arraycopy(files, 0, result[i], directories.length, | |||
| files.length); | |||
| DirectoryScanner rs = | |||
| filesets[i].getDirectoryScanner(getProject()); | |||
| Vector resources = new Vector(); | |||
| String[] directories = rs.getIncludedDirectories(); | |||
| for (int j = 0; j < directories.length; j++) { | |||
| resources.add(rs.getResource(directories[j])); | |||
| } | |||
| String[] files = rs.getIncludedFiles(); | |||
| for (int j = 0; j < files.length; j++) { | |||
| resources.add(rs.getResource(files[j])); | |||
| } | |||
| result[i] = new Resource[resources.size()]; | |||
| resources.copyInto(result[i]); | |||
| } | |||
| return result; | |||
| } | |||
| @@ -201,66 +201,6 @@ public class ZipScanner extends DirectoryScanner { | |||
| return isIncluded(vpath) && !isExcluded(vpath); | |||
| } | |||
| /** | |||
| * Returns the resources of the files which matched at least one of the | |||
| * include patterns and none of the exclude patterns. | |||
| * The names are relative to the base directory. | |||
| * | |||
| * @return resource information for the files which matched at | |||
| * least one of the include patterns and none of the exclude | |||
| * patterns. | |||
| * | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public Resource[] getIncludedFileResources() { | |||
| if (srcFile != null) { | |||
| Vector myvector = new Vector(); | |||
| // first check if the archive needs to be scanned again | |||
| scanme(); | |||
| for (Enumeration e = myentries.elements(); e.hasMoreElements() ;) { | |||
| Resource myresource= (Resource) e.nextElement(); | |||
| if (!myresource.isDirectory() && match(myresource.getName())) { | |||
| myvector.addElement(myresource.clone()); | |||
| } | |||
| } | |||
| Resource[] resources = new Resource[myvector.size()]; | |||
| myvector.copyInto(resources); | |||
| return resources; | |||
| } else { | |||
| return super.getIncludedFileResources(); | |||
| } | |||
| } | |||
| /** | |||
| * Returns the resources of the files which matched at least one of the | |||
| * include patterns and none of the exclude patterns. | |||
| * The names are relative to the base directory. | |||
| * | |||
| * @return resource information for the files which matched at | |||
| * least one of the include patterns and none of the exclude | |||
| * patterns. | |||
| * | |||
| * @since Ant 1.5.2 | |||
| */ | |||
| public Resource[] getIncludedDirectoryResources() { | |||
| if (srcFile != null) { | |||
| Vector myvector = new Vector(); | |||
| // first check if the archive needs to be scanned again | |||
| scanme(); | |||
| for (Enumeration e = myentries.elements(); e.hasMoreElements() ;) { | |||
| Resource myresource= (Resource) e.nextElement(); | |||
| if (myresource.isDirectory() && match(myresource.getName())) { | |||
| myvector.addElement(myresource.clone()); | |||
| } | |||
| } | |||
| Resource[] resources = new Resource[myvector.size()]; | |||
| myvector.copyInto(resources); | |||
| return resources; | |||
| } else { | |||
| return super.getIncludedDirectoryResources(); | |||
| } | |||
| } | |||
| /** | |||
| * @param name path name of the file sought in the archive | |||
| * | |||
| @@ -187,20 +187,6 @@ public class DirectoryScannerTest extends TestCase { | |||
| assertTrue("(1) zip package included", haveZipPackage); | |||
| assertTrue("(1) taskdefs package not included", !haveTaskdefsPackage); | |||
| haveZipPackage = false; | |||
| Resource[] includedResources = ds.getIncludedDirectoryResources(); | |||
| for (int i=0; i<includedResources.length; i++) { | |||
| if (includedResources[i].getName().equals("zip")) { | |||
| haveZipPackage = true; | |||
| } else if (includedResources[i].getName().equals("ant" | |||
| + File.separator | |||
| + "taskdefs")) { | |||
| haveTaskdefsPackage = true; | |||
| } | |||
| } | |||
| assertTrue("(1b) zip package included", haveZipPackage); | |||
| assertTrue("(1b) taskdefs package not included", !haveTaskdefsPackage); | |||
| ds = new DirectoryScanner(); | |||
| ds.setBasedir(dir); | |||
| ds.setExcludes(new String[] {"ant"}); | |||
| @@ -216,22 +202,6 @@ public class DirectoryScannerTest extends TestCase { | |||
| } | |||
| assertTrue("(2) zip package included", haveZipPackage); | |||
| assertTrue("(2) taskdefs package included", haveTaskdefsPackage); | |||
| haveZipPackage = false; | |||
| haveTaskdefsPackage = false; | |||
| includedResources = ds.getIncludedDirectoryResources(); | |||
| for (int i=0; i<includedResources.length; i++) { | |||
| if (includedResources[i].getName().equals("zip")) { | |||
| haveZipPackage = true; | |||
| } else if (includedResources[i].getName().equals("ant" | |||
| + File.separator | |||
| + "taskdefs")) { | |||
| haveTaskdefsPackage = true; | |||
| } | |||
| } | |||
| assertTrue("(2b) zip package included", haveZipPackage); | |||
| assertTrue("(2b) taskdefs package included", haveTaskdefsPackage); | |||
| } | |||
| } | |||