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); | |||
} | |||
} |