git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@267802 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -55,6 +55,7 @@ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import org.apache.tools.ant.*; | |||
| import org.apache.tools.ant.types.PatternSet; | |||
| import java.util.*; | |||
| @@ -88,7 +89,7 @@ public class CompileTask extends Javac { | |||
| for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) { | |||
| Taskdef task = (Taskdef)e.nextElement(); | |||
| String source = task.getClassname().replace('.','/') + ".java"; | |||
| MatchingTask.NameEntry include = super.createInclude(); | |||
| PatternSet.NameEntry include = super.createInclude(); | |||
| include.setName("**/" + source); | |||
| } | |||
| @@ -55,6 +55,7 @@ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import org.apache.tools.ant.*; | |||
| import org.apache.tools.ant.types.*; | |||
| import java.io.*; | |||
| import java.util.*; | |||
| @@ -67,54 +68,26 @@ import java.util.*; | |||
| * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
| * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a> | |||
| * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
| * @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a> | |||
| */ | |||
| public abstract class MatchingTask extends Task { | |||
| protected Vector includeList = new Vector(); | |||
| protected Vector excludeList = new Vector(); | |||
| protected boolean useDefaultExcludes = true; | |||
| /** | |||
| * provide access to properties from within the inner class | |||
| */ | |||
| protected String getProperty(String name) { | |||
| return project.getProperty(name); | |||
| } | |||
| /** | |||
| * inner class to hold a name on list. "If" and "Unless" attributes | |||
| * may be used to invalidate the entry based on the existence of a | |||
| * property (typically set thru the use of the Available task). | |||
| */ | |||
| public class NameEntry { | |||
| private boolean valid = true; | |||
| private String name; | |||
| public String getName() { return valid ? name : null; } | |||
| public void setName(String name) { this.name = name; } | |||
| public void setIf(String name) { | |||
| if (getProperty(name) == null) valid = false; | |||
| } | |||
| public void setUnless(String name) { | |||
| if (getProperty(name) != null) valid = false; | |||
| } | |||
| } | |||
| protected FileSet fileset = new FileSet(); | |||
| /** | |||
| * add a name entry on the include list | |||
| */ | |||
| public NameEntry createInclude() { | |||
| return addPatternToList(includeList); | |||
| public PatternSet.NameEntry createInclude() { | |||
| return fileset.createInclude(); | |||
| } | |||
| /** | |||
| * add a name entry on the exclude list | |||
| */ | |||
| public NameEntry createExclude() { | |||
| return addPatternToList(excludeList); | |||
| public PatternSet.NameEntry createExclude() { | |||
| return fileset.createExclude(); | |||
| } | |||
| /** | |||
| @@ -124,9 +97,7 @@ public abstract class MatchingTask extends Task { | |||
| * @param includes the string containing the include patterns | |||
| */ | |||
| public void setIncludes(String includes) { | |||
| if (includes != null && includes.length() > 0) { | |||
| createInclude().setName(includes); | |||
| } | |||
| fileset.setIncludes(includes); | |||
| } | |||
| /** | |||
| @@ -161,9 +132,7 @@ public abstract class MatchingTask extends Task { | |||
| * @param excludes the string containing the exclude patterns | |||
| */ | |||
| public void setExcludes(String excludes) { | |||
| if (excludes != null && excludes.length() > 0) { | |||
| createExclude().setName(excludes); | |||
| } | |||
| fileset.setExcludes(excludes); | |||
| } | |||
| /** | |||
| @@ -192,83 +161,17 @@ public abstract class MatchingTask extends Task { | |||
| * should be used, "false"|"off"|"no" when they | |||
| * shouldn't be used. | |||
| */ | |||
| public void setDefaultexcludes(String useDefaultExcludes) { | |||
| this.useDefaultExcludes = Project.toBoolean(useDefaultExcludes); | |||
| public void setDefaultexcludes(boolean useDefaultExcludes) { | |||
| this.useDefaultExcludes = useDefaultExcludes; | |||
| } | |||
| /** | |||
| * Convert a vector of NameEntry elements into an array of Strings. | |||
| */ | |||
| private String[] makeArray(Vector list) { | |||
| if (list.size() == 0) return null; | |||
| Vector tmpNames = new Vector(); | |||
| for (Enumeration e = list.elements() ; e.hasMoreElements() ;) { | |||
| String includes = ((NameEntry)e.nextElement()).getName(); | |||
| if (includes == null) continue; | |||
| StringTokenizer tok = new StringTokenizer(includes, ", ", false); | |||
| while (tok.hasMoreTokens()) { | |||
| String pattern = tok.nextToken().trim(); | |||
| if (pattern.length() > 0) { | |||
| tmpNames.addElement(pattern); | |||
| } | |||
| } | |||
| } | |||
| String result[] = new String[tmpNames.size()]; | |||
| for (int i = 0; i < tmpNames.size(); i++) { | |||
| result[i] = (String)tmpNames.elementAt(i); | |||
| } | |||
| return result; | |||
| } | |||
| /** | |||
| * Returns the directory scanner needed to access the files to process. | |||
| */ | |||
| protected DirectoryScanner getDirectoryScanner(File baseDir) { | |||
| DirectoryScanner ds = new DirectoryScanner(); | |||
| ds.setBasedir(baseDir); | |||
| ds.setIncludes(makeArray(includeList)); | |||
| ds.setExcludes(makeArray(excludeList)); | |||
| if (useDefaultExcludes) ds.addDefaultExcludes(); | |||
| ds.scan(); | |||
| return ds; | |||
| } | |||
| /** | |||
| * add a name entry to the given list | |||
| */ | |||
| private NameEntry addPatternToList(Vector list) { | |||
| NameEntry result = new NameEntry(); | |||
| list.addElement(result); | |||
| return result; | |||
| } | |||
| /** | |||
| * Reads path matching patterns from a file and adds them to the | |||
| * includes or excludes list (as appropriate). | |||
| */ | |||
| private void readPatterns(File patternfile, Vector patternlist) { | |||
| try { | |||
| // Get a FileReader | |||
| BufferedReader patternReader = | |||
| new BufferedReader(new FileReader(patternfile)); | |||
| // Create one NameEntry in the appropriate pattern list for each | |||
| // line in the file. | |||
| String line = patternReader.readLine(); | |||
| while (line != null) { | |||
| if (line.length() > 0) { | |||
| addPatternToList(patternlist).setName(line); | |||
| } | |||
| line = patternReader.readLine(); | |||
| } | |||
| } catch(IOException ioe) { | |||
| log("An error occured while reading from pattern file: " | |||
| + patternfile, Project.MSG_ERR); | |||
| } | |||
| fileset.setDir(baseDir); | |||
| fileset.setDefaultexcludes(useDefaultExcludes); | |||
| return fileset.getDirectoryScanner(project); | |||
| } | |||
| /** | |||
| @@ -277,16 +180,8 @@ public abstract class MatchingTask extends Task { | |||
| * @param includesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setIncludesfile(String includesfile) { | |||
| if (includesfile != null && includesfile.length() > 0) { | |||
| File incl = project.resolveFile(includesfile); | |||
| if (!incl.exists()) { | |||
| log("Includesfile "+includesfile+" not found.", | |||
| Project.MSG_ERR); | |||
| } else { | |||
| readPatterns(incl, includeList); | |||
| } | |||
| } | |||
| public void setIncludesfile(File includesfile) { | |||
| fileset.setIncludesfile(includesfile); | |||
| } | |||
| /** | |||
| @@ -295,16 +190,8 @@ public abstract class MatchingTask extends Task { | |||
| * @param excludesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setExcludesfile(String excludesfile) { | |||
| if (excludesfile != null && excludesfile.length() > 0) { | |||
| File excl = project.resolveFile(excludesfile); | |||
| if (!excl.exists()) { | |||
| log("Excludesfile "+excludesfile+" not found.", | |||
| Project.MSG_ERR); | |||
| } else { | |||
| readPatterns(excl, excludeList); | |||
| } | |||
| } | |||
| public void setExcludesfile(File excludesfile) { | |||
| fileset.setExcludesfile(excludesfile); | |||
| } | |||
| } | |||
| @@ -0,0 +1,171 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 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 "The Jakarta Project", "Tomcat", 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.types; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.DirectoryScanner; | |||
| import org.apache.tools.ant.Project; | |||
| import java.io.File; | |||
| /** | |||
| * Moved out of MatchingTask to make it a standalone object that could | |||
| * be referenced (by scripts for example). | |||
| * | |||
| * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a> | |||
| * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
| * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a> | |||
| * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
| * @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a> | |||
| */ | |||
| public class FileSet { | |||
| private PatternSet patterns = new PatternSet(); | |||
| private File dir; | |||
| private boolean useDefaultExcludes = true; | |||
| public void setDir(File dir) throws BuildException { | |||
| if (!dir.exists()) { | |||
| throw new BuildException(dir.getAbsolutePath()+" not found."); | |||
| } | |||
| if (!dir.isDirectory()) { | |||
| throw new BuildException(dir.getAbsolutePath()+" is not a directory."); | |||
| } | |||
| this.dir = dir; | |||
| } | |||
| public PatternSet createPatternSet() { | |||
| return patterns; | |||
| } | |||
| /** | |||
| * add a name entry on the include list | |||
| */ | |||
| public PatternSet.NameEntry createInclude() { | |||
| return patterns.createInclude(); | |||
| } | |||
| /** | |||
| * add a name entry on the exclude list | |||
| */ | |||
| public PatternSet.NameEntry createExclude() { | |||
| return patterns.createExclude(); | |||
| } | |||
| /** | |||
| * Sets the set of include patterns. Patterns may be separated by a comma | |||
| * or a space. | |||
| * | |||
| * @param includes the string containing the include patterns | |||
| */ | |||
| public void setIncludes(String includes) { | |||
| patterns.setIncludes(includes); | |||
| } | |||
| /** | |||
| * Sets the set of exclude patterns. Patterns may be separated by a comma | |||
| * or a space. | |||
| * | |||
| * @param excludes the string containing the exclude patterns | |||
| */ | |||
| public void setExcludes(String excludes) { | |||
| patterns.setExcludes(excludes); | |||
| } | |||
| /** | |||
| * Sets the name of the file containing the includes patterns. | |||
| * | |||
| * @param includesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setIncludesfile(File incl) throws BuildException { | |||
| patterns.setIncludesfile(incl); | |||
| } | |||
| /** | |||
| * Sets the name of the file containing the includes patterns. | |||
| * | |||
| * @param excludesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setExcludesfile(File excl) throws BuildException { | |||
| patterns.setExcludesfile(excl); | |||
| } | |||
| /** | |||
| * Sets whether default exclusions should be used or not. | |||
| * | |||
| * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions | |||
| * should be used, "false"|"off"|"no" when they | |||
| * shouldn't be used. | |||
| */ | |||
| public void setDefaultexcludes(boolean useDefaultExcludes) { | |||
| this.useDefaultExcludes = useDefaultExcludes; | |||
| } | |||
| /** | |||
| * Returns the directory scanner needed to access the files to process. | |||
| */ | |||
| public DirectoryScanner getDirectoryScanner(Project p) { | |||
| DirectoryScanner ds = new DirectoryScanner(); | |||
| ds.setBasedir(dir); | |||
| ds.setIncludes(patterns.getIncludePatterns(p)); | |||
| ds.setExcludes(patterns.getExcludePatterns(p)); | |||
| if (useDefaultExcludes) ds.addDefaultExcludes(); | |||
| ds.scan(); | |||
| return ds; | |||
| } | |||
| } | |||
| @@ -0,0 +1,282 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 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 "The Jakarta Project", "Tomcat", 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.types; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.BuildException; | |||
| import java.io.*; | |||
| import java.util.Enumeration; | |||
| import java.util.StringTokenizer; | |||
| import java.util.Vector; | |||
| /** | |||
| * Named collection of include/exclude tags. | |||
| * | |||
| * <p>Moved out of MatchingTask to make it a standalone object that | |||
| * could be referenced (by scripts for example). | |||
| * | |||
| * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a> | |||
| * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
| * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a> | |||
| * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
| * @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a> | |||
| */ | |||
| public class PatternSet { | |||
| private Vector includeList = new Vector(); | |||
| private Vector excludeList = new Vector(); | |||
| /** | |||
| * inner class to hold a name on list. "If" and "Unless" attributes | |||
| * may be used to invalidate the entry based on the existence of a | |||
| * property (typically set thru the use of the Available task). | |||
| */ | |||
| public class NameEntry { | |||
| private String name; | |||
| private String ifCond; | |||
| private String unlessCond; | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| public void setIf(String cond) { | |||
| ifCond = cond; | |||
| } | |||
| public void setUnless(String cond) { | |||
| unlessCond = cond; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public String evalName(Project p) { | |||
| return valid(p) ? name : null; | |||
| } | |||
| private boolean valid(Project p) { | |||
| if (ifCond != null && p.getProperty(ifCond) == null) { | |||
| return false; | |||
| } else if (unlessCond != null && p.getProperty(unlessCond) != null) { | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| } | |||
| public PatternSet() { | |||
| super(); | |||
| } | |||
| /** | |||
| * add a name entry on the include list | |||
| */ | |||
| public NameEntry createInclude() { | |||
| return addPatternToList(includeList); | |||
| } | |||
| /** | |||
| * add a name entry on the exclude list | |||
| */ | |||
| public NameEntry createExclude() { | |||
| return addPatternToList(excludeList); | |||
| } | |||
| /** | |||
| * Sets the set of include patterns. Patterns may be separated by a comma | |||
| * or a space. | |||
| * | |||
| * @param includes the string containing the include patterns | |||
| */ | |||
| public void setIncludes(String includes) { | |||
| if (includes != null && includes.length() > 0) { | |||
| StringTokenizer tok = new StringTokenizer(includes, ", ", false); | |||
| while (tok.hasMoreTokens()) { | |||
| createInclude().setName(tok.nextToken()); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Sets the set of exclude patterns. Patterns may be separated by a comma | |||
| * or a space. | |||
| * | |||
| * @param excludes the string containing the exclude patterns | |||
| */ | |||
| public void setExcludes(String excludes) { | |||
| if (excludes != null && excludes.length() > 0) { | |||
| StringTokenizer tok = new StringTokenizer(excludes, ", ", false); | |||
| while (tok.hasMoreTokens()) { | |||
| createExclude().setName(tok.nextToken()); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * add a name entry to the given list | |||
| */ | |||
| private NameEntry addPatternToList(Vector list) { | |||
| NameEntry result = new NameEntry(); | |||
| list.addElement(result); | |||
| return result; | |||
| } | |||
| /** | |||
| * Sets the name of the file containing the includes patterns. | |||
| * | |||
| * @param includesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setIncludesfile(File incl) throws BuildException { | |||
| if (!incl.exists()) { | |||
| throw new BuildException("Includesfile "+incl.getAbsolutePath() | |||
| +" not found."); | |||
| } else { | |||
| readPatterns(incl, includeList); | |||
| } | |||
| } | |||
| /** | |||
| * Sets the name of the file containing the includes patterns. | |||
| * | |||
| * @param excludesfile A string containing the filename to fetch | |||
| * the include patterns from. | |||
| */ | |||
| public void setExcludesfile(File excl) throws BuildException { | |||
| if (!excl.exists()) { | |||
| throw new BuildException("Excludesfile "+excl.getAbsolutePath() | |||
| +" not found."); | |||
| } else { | |||
| readPatterns(excl, excludeList); | |||
| } | |||
| } | |||
| /** | |||
| * Reads path matching patterns from a file and adds them to the | |||
| * includes or excludes list (as appropriate). | |||
| */ | |||
| private void readPatterns(File patternfile, Vector patternlist) | |||
| throws BuildException { | |||
| try { | |||
| // Get a FileReader | |||
| BufferedReader patternReader = | |||
| new BufferedReader(new FileReader(patternfile)); | |||
| // Create one NameEntry in the appropriate pattern list for each | |||
| // line in the file. | |||
| String line = patternReader.readLine(); | |||
| while (line != null) { | |||
| if (line.length() > 0) { | |||
| addPatternToList(patternlist).setName(line); | |||
| } | |||
| line = patternReader.readLine(); | |||
| } | |||
| } catch(IOException ioe) { | |||
| String msg = "An error occured while reading from pattern file: " | |||
| + patternfile; | |||
| throw new BuildException(msg, ioe); | |||
| } | |||
| } | |||
| /** | |||
| * Adds the patterns of the other instance to this set. | |||
| */ | |||
| public void append(PatternSet other) { | |||
| for (int i=0; i<other.includeList.size(); i++) { | |||
| includeList.addElement(other.includeList.elementAt(i)); | |||
| } | |||
| for (int i=0; i<other.excludeList.size(); i++) { | |||
| excludeList.addElement(other.excludeList.elementAt(i)); | |||
| } | |||
| } | |||
| /** | |||
| * Returns the filtered include patterns. | |||
| */ | |||
| public String[] getIncludePatterns(Project p) { | |||
| return makeArray(includeList, p); | |||
| } | |||
| /** | |||
| * Returns the filtered include patterns. | |||
| */ | |||
| public String[] getExcludePatterns(Project p) { | |||
| return makeArray(excludeList, p); | |||
| } | |||
| /** | |||
| * Convert a vector of NameEntry elements into an array of Strings. | |||
| */ | |||
| private String[] makeArray(Vector list, Project p) { | |||
| if (list.size() == 0) return null; | |||
| Vector tmpNames = new Vector(); | |||
| for (Enumeration e = list.elements() ; e.hasMoreElements() ;) { | |||
| NameEntry ne = (NameEntry)e.nextElement(); | |||
| String pattern = ne.evalName(p); | |||
| if (pattern != null && pattern.length() > 0) { | |||
| tmpNames.addElement(pattern); | |||
| } | |||
| } | |||
| String result[] = new String[tmpNames.size()]; | |||
| tmpNames.copyInto(result); | |||
| return result; | |||
| } | |||
| } | |||