diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java new file mode 100644 index 00000000..339c88bf --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java @@ -0,0 +1,116 @@ +/* + * 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 org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.util.FileNameMapper; + +/** + * A decorator around a different resource that uses a mapper to + * dynamically remap the resource's name. + * + * <p>Strips the FileProvider interface from decorated resources since + * it may be used to circumvent name mapping.</p> + * + * @since Ant 1.8.0 + */ +public class MappedResource extends ResourceDecorator { + private final FileNameMapper mapper; + + /** + * Wraps an existing resource. + * @param r Resource to wrap + * @param m FileNameMapper that handles mapping + */ + public MappedResource(Resource r, FileNameMapper m) { + super(r); + mapper = m; + } + + /** + * Maps the name. + */ + @Override + public String getName() { + String name = getResource().getName(); + if (isReference()) { + return name; + } + String[] mapped = mapper.mapFileName(name); + return mapped != null && mapped.length > 0 ? mapped[0] : null; + } + + /** + * Not really supported since mapper is never null. + * @param r reference to set + */ + @Override + public void setRefid(Reference r) { + if (mapper != null) { + throw noChildrenAllowed(); + } + super.setRefid(r); + } + + /** + * Suppress FileProvider + * @param clazz the type to implement + */ + @Override + public <T> T as(Class<T> clazz) { + return FileProvider.class.isAssignableFrom(clazz) + ? null : getResource().as(clazz); + } + + /** + * Get the hash code for this Resource. + * @since Ant 1.8.1 + */ + @Override + public int hashCode() { + String n = getName(); + return n == null ? super.hashCode() : n.hashCode(); + } + + /** + * Equality check based on the resource's name in addition to the + * resource itself. + * @since Ant 1.8.1 + */ + @Override + public boolean equals(Object other) { + if (other == null || !other.getClass().equals(getClass())) { + return false; + } + MappedResource m = (MappedResource) other; + String myName = getName(); + String otherName = m.getName(); + return (myName == null ? otherName == null : myName.equals(otherName)) + && getResource().equals(m.getResource()); + } + + @Override + public String toString() { + if (isReference()) { + return getCheckedRef().toString(); + } + return getName(); + } + +} |