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/property/ResolvePropertyMap.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/property/ResolvePropertyMap.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java new file mode 100644 index 00000000..5bdd3545 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java @@ -0,0 +1,151 @@ +/* + * 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.property; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; + +/** + * Class to resolve properties in a map. This class is explicitly not threadsafe. + * @since Ant 1.8.0 + */ +public class ResolvePropertyMap implements GetProperty { + private final Set<String> seen = new HashSet<String>(); + private final ParseProperties parseProperties; + private final GetProperty master; + private Map<String, Object> map; + private String prefix; + // whether properties of the value side of the map should be + // expanded + private boolean prefixValues = false; + // whether the current getProperty call is expanding the key side + // of the map + private boolean expandingLHS = true; + + /** + * Constructor with a master getproperty and a collection of expanders. + * @param project the current ant project. + * @param master the master property holder (usually PropertyHelper) + * @param expanders a collection of expanders (usually from PropertyHelper). + */ + public ResolvePropertyMap(Project project, GetProperty master, Collection<PropertyExpander> expanders) { + this.master = master; + this.parseProperties = new ParseProperties(project, expanders, this); + } + + /** + * Returns the value of a property if it is set. + * @param name name of the property. + * @return the property value, or null for no match or for name being null. + */ + public Object getProperty(String name) { + if (seen.contains(name)) { + throw new BuildException( + "Property " + name + " was circularly " + "defined."); + } + + try { + + // If the property we are looking up is a key in the map + // (first call into this method from resolveAllProperties) + // or we've been asked to prefix the value side (later + // recursive calls via the GetProperty interface) the + // prefix must be prepended when looking up the property + // outside of the map. + String fullKey = name; + if (prefix != null && (expandingLHS || prefixValues)) { + fullKey = prefix + name; + } + + Object masterValue = master.getProperty(fullKey); + if (masterValue != null) { + // If the property already has a value outside of the + // map, use that value to enforce property + // immutability. + + return masterValue; + } + + seen.add(name); + + String recursiveCallKey = name; + if (prefix != null && !expandingLHS && !prefixValues) { + // only look up unprefixed properties inside the map + // if prefixValues is true or we are expanding the key + // itself + recursiveCallKey = prefix + name; + } + + expandingLHS = false; + // will recurse into this method for each property + // reference found in the map's value + return parseProperties.parseProperties((String) map.get(recursiveCallKey)); + } finally { + seen.remove(name); + } + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @deprecated since Ant 1.8.2, use the three-arg method instead. + */ + public void resolveAllProperties(Map<String, Object> map) { + resolveAllProperties(map, null, false); + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @param prefix the prefix the properties defined inside the map + * will finally receive - may be null. + * @deprecated since Ant 1.8.2, use the three-arg method instead. + */ + public void resolveAllProperties(Map<String, Object> map, String prefix) { + resolveAllProperties(map, null, false); + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @param prefix the prefix the properties defined inside the map + * will finally receive - may be null. + * @param prefixValues - whether the prefix will be applied + * to properties on the value side of the map as well. + */ + public void resolveAllProperties(Map<String, Object> map, String prefix, + boolean prefixValues) { + // The map, prefix and prefixValues flag get used in the + // getProperty callback + this.map = map; + this.prefix = prefix; + this.prefixValues = prefixValues; + + for (String key : map.keySet()) { + expandingLHS = true; + Object result = getProperty(key); + String value = result == null ? "" : result.toString(); + map.put(key, value); + } + } +} |