git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@267812 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -178,6 +178,16 @@ public class AntStructure extends Task { | |||
| StringBuffer sb = new StringBuffer("<!ELEMENT "); | |||
| sb.append(name).append(" "); | |||
| if (org.apache.tools.ant.types.Reference.class.equals(element)) { | |||
| sb.append("EMPTY>").append(lSep); | |||
| sb.append("<!ATTLIST ").append(name); | |||
| sb.append(lSep).append(" id ID #IMPLIED"); | |||
| sb.append(lSep).append(" refid IDREF #IMPLIED"); | |||
| sb.append(">").append(lSep); | |||
| out.println(sb); | |||
| return; | |||
| } | |||
| Vector v = new Vector(); | |||
| if (ih.supportsCharacters()) { | |||
| v.addElement("#PCDATA"); | |||
| @@ -218,6 +228,8 @@ public class AntStructure extends Task { | |||
| if (type.equals(java.lang.Boolean.class) || | |||
| type.equals(java.lang.Boolean.TYPE)) { | |||
| sb.append("%boolean; "); | |||
| } else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) { | |||
| sb.append("IDREF "); | |||
| } else if (org.apache.tools.ant.EnumeratedAttribute.class.isAssignableFrom(type)) { | |||
| try { | |||
| EnumeratedAttribute ea = | |||
| @@ -57,7 +57,9 @@ 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; | |||
| import java.util.Vector; | |||
| /** | |||
| * Moved out of MatchingTask to make it a standalone object that could | |||
| @@ -71,7 +73,8 @@ import java.io.File; | |||
| */ | |||
| public class FileSet { | |||
| private PatternSet patterns = new PatternSet(); | |||
| private PatternSet defaultPatterns = new PatternSet(); | |||
| private Vector additionalPatterns = new Vector(); | |||
| private File dir; | |||
| private boolean useDefaultExcludes = true; | |||
| @@ -95,21 +98,29 @@ public class FileSet { | |||
| } | |||
| public PatternSet createPatternSet() { | |||
| PatternSet patterns = new PatternSet(); | |||
| additionalPatterns.addElement(patterns); | |||
| return patterns; | |||
| } | |||
| public Reference createPatternSetRef() { | |||
| Reference r = new Reference(); | |||
| additionalPatterns.addElement(r); | |||
| return r; | |||
| } | |||
| /** | |||
| * add a name entry on the include list | |||
| */ | |||
| public PatternSet.NameEntry createInclude() { | |||
| return patterns.createInclude(); | |||
| return defaultPatterns.createInclude(); | |||
| } | |||
| /** | |||
| * add a name entry on the exclude list | |||
| */ | |||
| public PatternSet.NameEntry createExclude() { | |||
| return patterns.createExclude(); | |||
| return defaultPatterns.createExclude(); | |||
| } | |||
| /** | |||
| @@ -119,7 +130,7 @@ public class FileSet { | |||
| * @param includes the string containing the include patterns | |||
| */ | |||
| public void setIncludes(String includes) { | |||
| patterns.setIncludes(includes); | |||
| defaultPatterns.setIncludes(includes); | |||
| } | |||
| /** | |||
| @@ -129,7 +140,7 @@ public class FileSet { | |||
| * @param excludes the string containing the exclude patterns | |||
| */ | |||
| public void setExcludes(String excludes) { | |||
| patterns.setExcludes(excludes); | |||
| defaultPatterns.setExcludes(excludes); | |||
| } | |||
| /** | |||
| @@ -139,7 +150,7 @@ public class FileSet { | |||
| * the include patterns from. | |||
| */ | |||
| public void setIncludesfile(File incl) throws BuildException { | |||
| patterns.setIncludesfile(incl); | |||
| defaultPatterns.setIncludesfile(incl); | |||
| } | |||
| /** | |||
| @@ -149,7 +160,7 @@ public class FileSet { | |||
| * the include patterns from. | |||
| */ | |||
| public void setExcludesfile(File excl) throws BuildException { | |||
| patterns.setExcludesfile(excl); | |||
| defaultPatterns.setExcludesfile(excl); | |||
| } | |||
| /** | |||
| @@ -169,8 +180,25 @@ public class FileSet { | |||
| public DirectoryScanner getDirectoryScanner(Project p) { | |||
| DirectoryScanner ds = new DirectoryScanner(); | |||
| ds.setBasedir(dir); | |||
| ds.setIncludes(patterns.getIncludePatterns(p)); | |||
| ds.setExcludes(patterns.getExcludePatterns(p)); | |||
| for (int i=0; i<additionalPatterns.size(); i++) { | |||
| Object o = additionalPatterns.elementAt(i); | |||
| if (o instanceof PatternSet) { | |||
| defaultPatterns.append((PatternSet) o); | |||
| } else { | |||
| Reference r = (Reference) o; | |||
| o = r.getReferencedObject(p); | |||
| if (o instanceof PatternSet) { | |||
| defaultPatterns.append((PatternSet) o); | |||
| } else { | |||
| String msg = r.getRefId()+" doesn\'t denote a patternset"; | |||
| throw new BuildException(msg); | |||
| } | |||
| } | |||
| } | |||
| ds.setIncludes(defaultPatterns.getIncludePatterns(p)); | |||
| ds.setExcludes(defaultPatterns.getExcludePatterns(p)); | |||
| if (useDefaultExcludes) ds.addDefaultExcludes(); | |||
| ds.scan(); | |||
| return ds; | |||
| @@ -0,0 +1,99 @@ | |||
| /* | |||
| * 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; | |||
| /** | |||
| * Named collection of include/exclude tags. | |||
| * | |||
| * <p>Class to hold a reference to another object in the project. | |||
| * | |||
| * @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a> | |||
| */ | |||
| public class Reference { | |||
| private String refid; | |||
| public Reference() { | |||
| super(); | |||
| } | |||
| public Reference(String id) { | |||
| this(); | |||
| setRefId(id); | |||
| } | |||
| public void setRefId(String id) { | |||
| refid = id; | |||
| } | |||
| public String getRefId() { | |||
| return refid; | |||
| } | |||
| public Object getReferencedObject(Project project) throws BuildException { | |||
| if (refid == null) { | |||
| throw new BuildException("No reference specified"); | |||
| } | |||
| Object o = project.getReferences().get(refid); | |||
| if (o == null) { | |||
| throw new BuildException("Refernce "+refid+" not found."); | |||
| } | |||
| return o; | |||
| } | |||
| } | |||