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/MappedResourceCollection.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/MappedResourceCollection.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java new file mode 100644 index 00000000..2f1a926b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java @@ -0,0 +1,267 @@ +/* + * 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.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Stack; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.DataType; +import org.apache.tools.ant.types.Mapper; +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.util.FileNameMapper; +import org.apache.tools.ant.util.IdentityMapper; +import org.apache.tools.ant.util.MergingMapper; + +/** + * Wrapper around a resource collections that maps the names of the + * other collection using a configured mapper. + * @since Ant 1.8.0 + */ +public class MappedResourceCollection + extends DataType implements ResourceCollection, Cloneable { + + private ResourceCollection nested = null; + private Mapper mapper = null; + private boolean enableMultipleMappings = false; + private boolean cache = false; + private Collection<Resource> cachedColl = null; + + /** + * Adds the required nested ResourceCollection. + * @param c the ResourceCollection to add. + * @throws BuildException on error. + */ + public synchronized void add(ResourceCollection c) throws BuildException { + if (isReference()) { + throw noChildrenAllowed(); + } + if (nested != null) { + throw new BuildException("Only one resource collection can be" + + " nested into mappedresources", + getLocation()); + } + setChecked(false); + cachedColl = null; + nested = c; + } + + /** + * Define the mapper to map source to destination files. + * @return a mapper to be configured. + * @exception BuildException if more than one mapper is defined. + */ + public Mapper createMapper() throws BuildException { + if (isReference()) { + throw noChildrenAllowed(); + } + if (mapper != null) { + throw new BuildException("Cannot define more than one mapper", + getLocation()); + } + setChecked(false); + mapper = new Mapper(getProject()); + cachedColl = null; + return mapper; + } + + /** + * Add a nested filenamemapper. + * @param fileNameMapper the mapper to add. + * @since Ant 1.6.3 + */ + public void add(FileNameMapper fileNameMapper) { + createMapper().add(fileNameMapper); + } + + /** + * Set method of handling mappers that return multiple + * mappings for a given source path. + * @param enableMultipleMappings If true the type will + * use all the mappings for a given source path, if + * false, only the first mapped name is + * processed. + * By default, this setting is false to provide backward + * compatibility with earlier releases. + * @since Ant 1.8.1 + */ + public void setEnableMultipleMappings(boolean enableMultipleMappings) { + this.enableMultipleMappings = enableMultipleMappings; + } + + /** + * Set whether to cache collections. + * @since Ant 1.8.1 + */ + public void setCache(boolean cache) { + this.cache = cache; + } + + /** + * {@inheritDoc} + */ + public boolean isFilesystemOnly() { + if (isReference()) { + return ((MappedResourceCollection) getCheckedRef()) + .isFilesystemOnly(); + } + checkInitialized(); + return false; + } + + /** + * {@inheritDoc} + */ + public int size() { + if (isReference()) { + return ((MappedResourceCollection) getCheckedRef()).size(); + } + checkInitialized(); + return cacheCollection().size(); + } + + /** + * {@inheritDoc} + */ + public Iterator<Resource> iterator() { + if (isReference()) { + return ((MappedResourceCollection) getCheckedRef()).iterator(); + } + checkInitialized(); + return cacheCollection().iterator(); + } + + /** + * Overrides the base version. + * @param r the Reference to set. + */ + public void setRefid(Reference r) { + if (nested != null || mapper != null) { + throw tooManyAttributes(); + } + super.setRefid(r); + } + + /** + * Implement clone. The nested resource collection and mapper are copied. + * @return a cloned instance. + */ + public Object clone() { + try { + MappedResourceCollection c = + (MappedResourceCollection) super.clone(); + c.nested = nested; + c.mapper = mapper; + c.cachedColl = null; + return c; + } catch (CloneNotSupportedException e) { + throw new BuildException(e); + } + } + + /** + * Overrides the version of DataType to recurse on all DataType + * child elements that may have been added. + * @param stk the stack of data types to use (recursively). + * @param p the project to use to dereference the references. + * @throws BuildException on error. + */ + protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p) + throws BuildException { + if (isChecked()) { + return; + } + if (isReference()) { + super.dieOnCircularReference(stk, p); + } else { + checkInitialized(); + if (mapper != null) { + pushAndInvokeCircularReferenceCheck(mapper, stk, p); + } + if (nested instanceof DataType) { + pushAndInvokeCircularReferenceCheck((DataType) nested, stk, p); + } + setChecked(true); + } + } + + private void checkInitialized() { + if (nested == null) { + throw new BuildException("A nested resource collection element is" + + " required", getLocation()); + } + dieOnCircularReference(); + } + + private synchronized Collection<Resource> cacheCollection() { + if (cachedColl == null || !cache) { + cachedColl = getCollection(); + } + return cachedColl; + } + + private Collection<Resource> getCollection() { + Collection<Resource> collected = new ArrayList<Resource>(); + FileNameMapper m = + mapper != null ? mapper.getImplementation() : new IdentityMapper(); + for (Resource r : nested) { + if (enableMultipleMappings) { + String[] n = m.mapFileName(r.getName()); + if (n != null) { + for (int i = 0; i < n.length; i++) { + collected.add(new MappedResource(r, + new MergingMapper(n[i])) + ); + } + } + } else { + collected.add(new MappedResource(r, m)); + } + } + return collected; + } + + /** + * Format this resource collection as a String. + * @return a descriptive <code>String</code>. + */ + public String toString() { + if (isReference()) { + return getCheckedRef().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(); + } + +} |