diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-10-23 10:00:02 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-10-23 10:00:02 -0700 |
commit | 753a6c60f47f3ac4f270005b65e9d6481de8eb68 (patch) | |
tree | 3d0a1ae3b4d994550f6614b417b991eee3eb8911 /framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java | |
parent | c62d20eb3b4620c06d833be06f50b2600d96dd42 (diff) |
Adding maven and ant source trees
Change-Id: I0a39b9add833a31b9c3f98d193983ae2f3a5a445
Signed-off-by: Ashlee Young <ashlee@onosfw.com>
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java | 503 |
1 files changed, 503 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java new file mode 100644 index 00000000..521bcc8d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java @@ -0,0 +1,503 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.types.resources; + +import java.io.File; +import java.util.Collections; +import java.util.Iterator; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.PatternSet; +import org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.ResourceCollection; +import org.apache.tools.ant.types.selectors.AbstractSelectorContainer; +import org.apache.tools.ant.types.selectors.FileSelector; + +/** + * ResourceCollection implementation; like AbstractFileSet with absolute paths. + * @since Ant 1.7 + */ +public class Files extends AbstractSelectorContainer + implements ResourceCollection { + + private static final Iterator<Resource> EMPTY_ITERATOR + = Collections.<Resource>emptySet().iterator(); + + private PatternSet defaultPatterns = new PatternSet(); + private Vector<PatternSet> additionalPatterns = new Vector<PatternSet>(); + + private boolean useDefaultExcludes = true; + private boolean caseSensitive = true; + private boolean followSymlinks = true; + + /* cached DirectoryScanner instance */ + private DirectoryScanner ds = null; + + /** + * Construct a new <code>Files</code> collection. + */ + public Files() { + super(); + } + + /** + * Construct a new <code>Files</code> collection, shallowly cloned + * from the specified <code>Files</code>. + * @param f the <code>Files</code> to use as a template. + */ + protected Files(Files f) { + this.defaultPatterns = f.defaultPatterns; + this.additionalPatterns = f.additionalPatterns; + this.useDefaultExcludes = f.useDefaultExcludes; + this.caseSensitive = f.caseSensitive; + this.followSymlinks = f.followSymlinks; + this.ds = f.ds; + setProject(f.getProject()); + } + + /** + * Make this instance in effect a reference to another instance. + * + * <p>You must not set another attribute or nest elements inside + * this element if you make it a reference.</p> + * @param r the <code>Reference</code> to use. + * @throws BuildException if there is a problem. + */ + public void setRefid(Reference r) throws BuildException { + if (hasPatterns(defaultPatterns)) { + throw tooManyAttributes(); + } + if (!additionalPatterns.isEmpty()) { + throw noChildrenAllowed(); + } + if (hasSelectors()) { + throw noChildrenAllowed(); + } + super.setRefid(r); + } + + /** + * Create a nested patternset. + * @return <code>PatternSet</code>. + */ + public synchronized PatternSet createPatternSet() { + if (isReference()) { + throw noChildrenAllowed(); + } + PatternSet patterns = new PatternSet(); + additionalPatterns.addElement(patterns); + ds = null; + setChecked(false); + return patterns; + } + + /** + * Add a name entry to the include list. + * @return <code>PatternSet.NameEntry</code>. + */ + public synchronized PatternSet.NameEntry createInclude() { + if (isReference()) { + throw noChildrenAllowed(); + } + ds = null; + return defaultPatterns.createInclude(); + } + + /** + * Add a name entry to the include files list. + * @return <code>PatternSet.NameEntry</code>. + */ + public synchronized PatternSet.NameEntry createIncludesFile() { + if (isReference()) { + throw noChildrenAllowed(); + } + ds = null; + return defaultPatterns.createIncludesFile(); + } + + /** + * Add a name entry to the exclude list. + * @return <code>PatternSet.NameEntry</code>. + */ + public synchronized PatternSet.NameEntry createExclude() { + if (isReference()) { + throw noChildrenAllowed(); + } + ds = null; + return defaultPatterns.createExclude(); + } + + /** + * Add a name entry to the excludes files list. + * @return <code>PatternSet.NameEntry</code>. + */ + public synchronized PatternSet.NameEntry createExcludesFile() { + if (isReference()) { + throw noChildrenAllowed(); + } + ds = null; + return defaultPatterns.createExcludesFile(); + } + + /** + * Append <code>includes</code> to the current list of include + * patterns. + * + * <p>Patterns may be separated by a comma or a space.</p> + * + * @param includes the <code>String</code> containing the include patterns. + */ + public synchronized void setIncludes(String includes) { + checkAttributesAllowed(); + defaultPatterns.setIncludes(includes); + ds = null; + } + + /** + * Append <code>includes</code> to the current list of include + * patterns. + * + * @param includes array containing the include patterns. + */ + public synchronized void appendIncludes(String[] includes) { + checkAttributesAllowed(); + if (includes != null) { + for (int i = 0; i < includes.length; i++) { + defaultPatterns.createInclude().setName(includes[i]); + } + ds = null; + } + } + + /** + * Append <code>excludes</code> to the current list of exclude + * patterns. + * + * <p>Patterns may be separated by a comma or a space.</p> + * + * @param excludes the <code>String</code> containing the exclude patterns. + */ + public synchronized void setExcludes(String excludes) { + checkAttributesAllowed(); + defaultPatterns.setExcludes(excludes); + ds = null; + } + + /** + * Append <code>excludes</code> to the current list of include + * patterns. + * + * @param excludes array containing the exclude patterns. + */ + public synchronized void appendExcludes(String[] excludes) { + checkAttributesAllowed(); + if (excludes != null) { + for (int i = 0; i < excludes.length; i++) { + defaultPatterns.createExclude().setName(excludes[i]); + } + ds = null; + } + } + + /** + * Set the <code>File</code> containing the includes patterns. + * + * @param incl <code>File</code> instance. + * @throws BuildException if there is a problem. + */ + public synchronized void setIncludesfile(File incl) throws BuildException { + checkAttributesAllowed(); + defaultPatterns.setIncludesfile(incl); + ds = null; + } + + /** + * Set the <code>File</code> containing the excludes patterns. + * + * @param excl <code>File</code> instance. + * @throws BuildException if there is a problem. + */ + public synchronized void setExcludesfile(File excl) throws BuildException { + checkAttributesAllowed(); + defaultPatterns.setExcludesfile(excl); + ds = null; + } + + /** + * Set whether default exclusions should be used or not. + * + * @param useDefaultExcludes <code>boolean</code>. + */ + public synchronized void setDefaultexcludes(boolean useDefaultExcludes) { + checkAttributesAllowed(); + this.useDefaultExcludes = useDefaultExcludes; + ds = null; + } + + /** + * Get whether default exclusions should be used or not. + * @return the defaultexclusions value. + */ + public synchronized boolean getDefaultexcludes() { + return (isReference()) + ? getRef().getDefaultexcludes() : useDefaultExcludes; + } + + /** + * Set case-sensitivity of the Files collection. + * + * @param caseSensitive <code>boolean</code>. + */ + public synchronized void setCaseSensitive(boolean caseSensitive) { + checkAttributesAllowed(); + this.caseSensitive = caseSensitive; + ds = null; + } + + /** + * Find out if this Files collection is case-sensitive. + * + * @return <code>boolean</code> indicating whether the Files + * collection is case-sensitive. + */ + public synchronized boolean isCaseSensitive() { + return (isReference()) + ? getRef().isCaseSensitive() : caseSensitive; + } + + /** + * Set whether or not symbolic links should be followed. + * + * @param followSymlinks whether or not symbolic links should be followed. + */ + public synchronized void setFollowSymlinks(boolean followSymlinks) { + checkAttributesAllowed(); + this.followSymlinks = followSymlinks; + ds = null; + } + + /** + * Find out whether symbolic links should be followed. + * + * @return <code>boolean</code> indicating whether symbolic links + * should be followed. + */ + public synchronized boolean isFollowSymlinks() { + return (isReference()) + ? getRef().isFollowSymlinks() : followSymlinks; + } + + /** + * Fulfill the ResourceCollection contract. + * @return an Iterator of Resources. + */ + public synchronized Iterator<Resource> iterator() { + if (isReference()) { + return getRef().iterator(); + } + ensureDirectoryScannerSetup(); + ds.scan(); + int fct = ds.getIncludedFilesCount(); + int dct = ds.getIncludedDirsCount(); + if (fct + dct == 0) { + return EMPTY_ITERATOR; + } + FileResourceIterator result = new FileResourceIterator(getProject()); + if (fct > 0) { + result.addFiles(ds.getIncludedFiles()); + } + if (dct > 0) { + result.addFiles(ds.getIncludedDirectories()); + } + return result; + } + + /** + * Fulfill the ResourceCollection contract. + * @return number of elements as int. + */ + public synchronized int size() { + if (isReference()) { + return getRef().size(); + } + ensureDirectoryScannerSetup(); + ds.scan(); + return ds.getIncludedFilesCount() + ds.getIncludedDirsCount(); + } + + /** + * Find out whether this Files collection has patterns. + * + * @return whether any patterns are in this container. + */ + public synchronized boolean hasPatterns() { + if (isReference()) { + return getRef().hasPatterns(); + } + dieOnCircularReference(); + if (hasPatterns(defaultPatterns)) { + return true; + } + for (PatternSet patternSet : additionalPatterns) { + if (hasPatterns(patternSet)) { + return true; + } + } + return false; + } + + /** + * Add a new selector into this container. + * + * @param selector the new <code>FileSelector</code> to add. + */ + public synchronized void appendSelector(FileSelector selector) { + if (isReference()) { + throw noChildrenAllowed(); + } + super.appendSelector(selector); + ds = null; + } + + /** + * Format this Files collection as a String. + * @return a descriptive <code>String</code>. + */ + public String toString() { + if (isReference()) { + return getRef().toString(); + } + Iterator<Resource> i = iterator(); + if (!i.hasNext()) { + return ""; + } + StringBuffer sb = new StringBuffer(); + while (i.hasNext()) { + if (sb.length() > 0) { + sb.append(File.pathSeparatorChar); + } + sb.append(i.next()); + } + return sb.toString(); + } + + /** + * Create a deep clone of this instance, except for the nested selectors + * (the list of selectors is a shallow clone of this instance's list). + * @return a cloned Object. + */ + public synchronized Object clone() { + if (isReference()) { + return getRef().clone(); + } + Files f = (Files) super.clone(); + f.defaultPatterns = (PatternSet) defaultPatterns.clone(); + f.additionalPatterns = new Vector<PatternSet>(additionalPatterns.size()); + for (PatternSet ps : additionalPatterns) { + f.additionalPatterns.add((PatternSet) ps.clone()); + } + return f; + } + + /** + * Get the merged include patterns for this Files collection. + * @param p Project instance. + * @return the include patterns of the default pattern set and all + * nested patternsets. + */ + public String[] mergeIncludes(Project p) { + return mergePatterns(p).getIncludePatterns(p); + } + + /** + * Get the merged exclude patterns for this Files collection. + * @param p Project instance. + * @return the exclude patterns of the default pattern set and all + * nested patternsets. + */ + public String[] mergeExcludes(Project p) { + return mergePatterns(p).getExcludePatterns(p); + } + + /** + * Get the merged patterns for this Files collection. + * @param p Project instance. + * @return the default patternset merged with the additional sets + * in a new PatternSet instance. + */ + public synchronized PatternSet mergePatterns(Project p) { + if (isReference()) { + return getRef().mergePatterns(p); + } + dieOnCircularReference(); + PatternSet ps = new PatternSet(); + ps.append(defaultPatterns, p); + final int count = additionalPatterns.size(); + for (int i = 0; i < count; i++) { + Object o = additionalPatterns.elementAt(i); + ps.append((PatternSet) o, p); + } + return ps; + } + + /** + * Always returns true. + * @return true indicating that all elements of a Files collection + * will be FileResources. + */ + public boolean isFilesystemOnly() { + return true; + } + + /** + * Perform the check for circular references and return the + * referenced Files collection. + * @return <code>FileCollection</code>. + */ + protected Files getRef() { + return (Files) getCheckedRef(); + } + + private synchronized void ensureDirectoryScannerSetup() { + dieOnCircularReference(); + if (ds == null) { + ds = new DirectoryScanner(); + PatternSet ps = mergePatterns(getProject()); + ds.setIncludes(ps.getIncludePatterns(getProject())); + ds.setExcludes(ps.getExcludePatterns(getProject())); + ds.setSelectors(getSelectors(getProject())); + if (useDefaultExcludes) { + ds.addDefaultExcludes(); + } + ds.setCaseSensitive(caseSensitive); + ds.setFollowSymlinks(followSymlinks); + } + } + + private boolean hasPatterns(PatternSet ps) { + String[] includePatterns = ps.getIncludePatterns(getProject()); + String[] excludePatterns = ps.getExcludePatterns(getProject()); + return (includePatterns != null && includePatterns.length > 0) + || (includePatterns != null && excludePatterns.length > 0); + } + +} |