Author: mbenson Date: Fri Jun 29 11:16:45 2007 New Revision: 551987 URL: http://svn.apache.org/viewvc?view=rev&rev=551987 Log: tweakage
Added: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java (with props) ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java (with props) ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java (with props) Removed: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperation.java Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ComponentTypeEvaluator.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ReferenceResolvingEvaluator.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DefaultValue.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DeletePartOperation.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/PatternOperation.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/ReplaceOperation.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/RequireProperty.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/SetDefaultValue.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperationsEvaluator.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Substring.java ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Translate.java ant/sandbox/antlibs/props/trunk/src/tests/antunit/types-test.xml Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ComponentTypeEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ComponentTypeEvaluator.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ComponentTypeEvaluator.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ComponentTypeEvaluator.java Fri Jun 29 11:16:45 2007 @@ -24,63 +24,48 @@ import org.apache.tools.ant.PropertyHelper; /** - * Property evaluator that will map any colon-delimited currently defined Ant type - * using its String constructor, if it has any. + * Property evaluator that will map any colon-delimited currently defined Ant type using its String + * constructor, if it has any. */ -public class ComponentTypeEvaluator implements PropertyHelper.PropertyEvaluator { - private static final String DEFAULT_DELIMITER = ":"; - - private static final Class[] PROJECT_STRING = new Class[] { Project.class, - String.class }; +public class ComponentTypeEvaluator extends RegexBasedEvaluator { + private static final Class[] PROJECT_STRING = new Class[] { Project.class, String.class }; private static final Class[] STRING_ONLY = new Class[] { String.class }; - private String delimiter; + /** + * Create a new ComponentTypeEvaluator. + */ + public ComponentTypeEvaluator() { + setPattern("^(.*?)\\((.*)\\)$"); + } /** * [EMAIL PROTECTED] - * @see org.apache.tools.ant.PropertyHelper.PropertyEvaluator#evaluate(java.lang.String, org.apache.tools.ant.PropertyHelper) + * + * @see org.apache.ant.props.RegexBasedEvaluator#evaluate(java.lang.String[], + * org.apache.tools.ant.PropertyHelper) */ - public Object evaluate(String property, PropertyHelper propertyHelper) { - int d = property.indexOf(getDelimiter()); + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { Object result = null; - if (d >= 0) { - Project p = propertyHelper.getProject(); - Class componentType = ComponentHelper.getComponentHelper(p) - .getDefinition(property.substring(0, d)).getTypeClass(p); - if (componentType != null) { - String stringArg = property.substring(d + 1); - try { - result = componentType.getConstructor(PROJECT_STRING) - .newInstance(new Object[] { p, stringArg }); - } catch (Exception e) { - } - try { - result = componentType.getConstructor(STRING_ONLY) - .newInstance(new Object[] { stringArg }); - } catch (Exception e) { - } - if (result != null) { - p.setProjectReference(result); - } + Project p = propertyHelper.getProject(); + Class componentType = ComponentHelper.getComponentHelper(p).getDefinition(groups[1]) + .getTypeClass(p); + if (componentType != null) { + try { + result = componentType.getConstructor(PROJECT_STRING).newInstance( + new Object[] { p, groups[2] }); + } catch (Exception e) { + } + try { + result = componentType.getConstructor(STRING_ONLY).newInstance( + new Object[] { groups[2] }); + } catch (Exception e) { + } + if (result != null) { + p.setProjectReference(result); } } return result; } - /** - * Get the String delimiter. - * @return String - */ - public String getDelimiter() { - return delimiter == null ? DEFAULT_DELIMITER : delimiter; - } - - /** - * Set the String delimiter. - * @param delimiter String - */ - public void setDelimiter(String delimiter) { - this.delimiter = delimiter; - } } Added: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java?view=auto&rev=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java (added) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java Fri Jun 29 11:16:45 2007 @@ -0,0 +1,97 @@ +/* + * 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.ant.props; + +import org.apache.tools.ant.PropertyHelper; + +/** + * Abstract prefixed PropertyEvaluator. + */ +public abstract class PrefixedEvaluator extends RegexBasedEvaluator { + + /** + * Default prefix delimiter. + */ + public static final String DEFAULT_DELIMITER = ":"; + + /** + * Create a new PrefixedEvaluator. + */ + protected PrefixedEvaluator() { + this(DEFAULT_DELIMITER); + } + + /** + * Create a new PrefixedEvaluator. + * + * @param delimiter + */ + protected PrefixedEvaluator(String delimiter) { + setDelimiter(delimiter); + } + + /** + * Learn whether this evaluator can interpret a property with the given prefix. + * + * @param prefix + * @return <code>true</code> if <code>prefix</code> is recognized, else <code>false</code>. + */ + protected abstract boolean canInterpret(String prefix); + + /** + * [EMAIL PROTECTED] + * + * @see org.apache.ant.props.RegexBasedEvaluator#evaluate(java.lang.String[], + * org.apache.tools.ant.PropertyHelper) + */ + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { + return canInterpret(groups[1]) ? evaluate(groups[2], groups[1], propertyHelper) : null; + } + + /** + * Return the result of evaluating the prefixed property. + * + * @param property + * @param prefix + * @param propertyHelper + * @return Object if the property can be resolved, else <code>null</code>. + */ + protected abstract Object evaluate(String property, String prefix, PropertyHelper propertyHelper); + + /** + * Set the String delimiter. + * + * @param delimiter String + */ + public void setDelimiter(String delimiter) { + if (delimiter == null) { + throw new IllegalArgumentException("invalid delimiter: null"); + } + super.setPattern("^(.*?):(.*)$"); + } + + /** + * Ignored. + * + * @see org.apache.ant.props.RegexBasedEvaluator#setPattern(java.lang.String) + */ + public final void setPattern(String pattern) { + } +} Propchange: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/PrefixedEvaluator.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ReferenceResolvingEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ReferenceResolvingEvaluator.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ReferenceResolvingEvaluator.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/ReferenceResolvingEvaluator.java Fri Jun 29 11:16:45 2007 @@ -22,21 +22,26 @@ import org.apache.tools.ant.PropertyHelper; /** - * Name says it all, doesn't it? + * PropertyEvaluator that resolves a reference against the current project. */ -public class ReferenceResolvingEvaluator implements PropertyHelper.PropertyEvaluator { +public class ReferenceResolvingEvaluator extends StaticPrefixedEvaluator { + /** Default prefix */ + public static final String DEFAULT_PREFIX = "ref"; + + /** + * Create a new ReferenceResolvingEvaluator. + */ + public ReferenceResolvingEvaluator() { + super(DEFAULT_PREFIX); + } /** * [EMAIL PROTECTED] - * @see org.apache.tools.ant.PropertyHelper.PropertyEvaluator#evaluate(java.lang.String, org.apache.tools.ant.PropertyHelper) + * + * @see org.apache.ant.props.PrefixedEvaluator#evaluatePrefixed(java.lang.String, + * java.lang.String, org.apache.tools.ant.PropertyHelper) */ - public Object evaluate(String property, PropertyHelper propertyHelper) { - if (property.startsWith("ref:")) { - Object o = propertyHelper.getProject().getReference(property.substring(4)); - if (o != null) { - return o; - } - } - return null; + protected Object evaluate(String property, String prefix, PropertyHelper propertyHelper) { + return propertyHelper.getProject().getReference(property); } } Added: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java?view=auto&rev=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java (added) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java Fri Jun 29 11:16:45 2007 @@ -0,0 +1,110 @@ +/* + * 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.ant.props; + +import java.util.List; + +import org.apache.tools.ant.MagicNames; +import org.apache.tools.ant.PropertyHelper; +import org.apache.tools.ant.types.RegularExpression; +import org.apache.tools.ant.util.regexp.Regexp; + +/** + * <code>PropertyHelper.PropertyEvaluator</code> based on a regex pattern that will produce match + * groups to be dealt with by [EMAIL PROTECTED] #evaluate(String[], PropertyHelper)}. + */ +public abstract class RegexBasedEvaluator implements PropertyHelper.PropertyEvaluator { + private String pattern; + + private RegularExpression regularExpression; + + /** + * Create a new RegexBasedEvaluator. + */ + protected RegexBasedEvaluator() { + } + + /** + * Construct a new RegexBasedEvaluator. + * + * @param pattern the base pattern. + */ + protected RegexBasedEvaluator(String pattern) { + setPattern(pattern); + } + + /** [EMAIL PROTECTED] */ + public Object evaluate(String propertyName, PropertyHelper propertyHelper) { + //never try to resolve the regex factory magic property: + if (MagicNames.REGEXP_IMPL.equals(propertyName)) { + return null; + } + Regexp regexp = getRegularExpression().getRegexp(propertyHelper.getProject()); + if (regexp.matches(propertyName)) { + List groups = regexp.getGroups(propertyName, Regexp.MATCH_DEFAULT); + String[] s = (String[]) groups.toArray(new String[groups.size()]); + return evaluate(s, propertyHelper); + } + return null; + } + + /** + * Get the regular expression object to use. + * + * @return + */ + protected synchronized RegularExpression getRegularExpression() { + if (regularExpression == null) { + if (getPattern() == null) { + throw new IllegalStateException("pattern not set"); + } + regularExpression = new RegularExpression(); + regularExpression.setPattern(getPattern()); + } + return regularExpression; + } + + /** + * Evaluate the matched groups. + * + * @param groups the matches from the base regex. + * @param propertyHelper the calling PropertyHelper. + */ + protected abstract Object evaluate(String[] groups, PropertyHelper propertyHelper); + + /** + * Get the String pattern. + * + * @return String + */ + public String getPattern() { + return pattern; + } + + /** + * Set the String pattern. + * + * @param pattern String + */ + public void setPattern(String pattern) { + this.pattern = pattern; + regularExpression = null; + } +} Propchange: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/RegexBasedEvaluator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java?view=auto&rev=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java (added) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java Fri Jun 29 11:16:45 2007 @@ -0,0 +1,69 @@ +package org.apache.ant.props; + +/** + * PrefixedPropertyEvaluator that always uses the same prefix. + */ +public abstract class StaticPrefixedEvaluator extends PrefixedEvaluator { + private String prefix; + + /** + * Create a new StaticPrefixedEvaluator. + */ + protected StaticPrefixedEvaluator() { + } + + /** + * Create a new StaticPrefixedEvaluator. + * @param prefix + */ + protected StaticPrefixedEvaluator(String prefix) { + setPrefix(prefix); + } + + /** + * Create a new StaticPrefixedEvaluator. + * @param prefix + * @param delimiter + */ + protected StaticPrefixedEvaluator(String prefix, String delimiter) { + super(delimiter); + setPrefix(prefix); + } + + /** + * [EMAIL PROTECTED] + * @see org.apache.ant.props.PrefixedEvaluator#canInterpret(java.lang.String) + */ + protected final boolean canInterpret(String prefix) { + return getRequiredPrefix().equals(prefix); + } + + /** + * Get the non-null prefix. + * @return String + */ + protected String getRequiredPrefix() { + String result = getPrefix(); + if (result == null) { + throw new IllegalStateException("prefix unset"); + } + return result; + } + + /** + * Get the String prefix. + * @return String + */ + public String getPrefix() { + return prefix; + } + + /** + * Set the String prefix. + * @param prefix String + */ + public void setPrefix(String prefix) { + this.prefix = prefix; + } + +} Propchange: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/StaticPrefixedEvaluator.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DefaultValue.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DefaultValue.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DefaultValue.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DefaultValue.java Fri Jun 29 11:16:45 2007 @@ -19,22 +19,23 @@ */ package org.apache.ant.props.stringops; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.PropertyHelper; /** * DefaultValue operation. */ -public class DefaultValue extends StringOperation { +public class DefaultValue extends RegexBasedEvaluator { /** * Construct a new DefaultValue operation. */ public DefaultValue() { - super("^(.*):-(.*)$"); + super("(.*):-(.*)"); } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { Object o = (String) propertyHelper.getProperty(groups[1]); return o == null ? groups[2] : o.toString(); } Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DeletePartOperation.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DeletePartOperation.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DeletePartOperation.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/DeletePartOperation.java Fri Jun 29 11:16:45 2007 @@ -40,7 +40,7 @@ } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { Object value = propertyHelper.getProperty(groups[1]); if (value != null) { String s = value.toString(); Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/PatternOperation.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/PatternOperation.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/PatternOperation.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/PatternOperation.java Fri Jun 29 11:16:45 2007 @@ -21,6 +21,7 @@ import java.text.ParsePosition; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.RegularExpression; import org.apache.tools.ant.util.regexp.Regexp; @@ -28,7 +29,7 @@ /** * Abstract pattern-based operation. */ -public abstract class PatternOperation extends StringOperation { +public abstract class PatternOperation extends RegexBasedEvaluator { private interface PatternParser { boolean process(StringBuffer sb, ParsePosition pos); } Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/ReplaceOperation.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/ReplaceOperation.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/ReplaceOperation.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/ReplaceOperation.java Fri Jun 29 11:16:45 2007 @@ -23,7 +23,7 @@ import org.apache.tools.ant.util.regexp.Regexp; /** - * Abstract Replace operation. + * Replace operation--handles 'replace all' and 'replace first' alike. */ public class ReplaceOperation extends PatternOperation { private static final String ESCAPE_SLASH = "\\\\/"; @@ -39,7 +39,7 @@ } /** [EMAIL PROTECTED] */ - protected final String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected final Object evaluate(String[] groups, PropertyHelper propertyHelper) { Object value = propertyHelper.getProperty(groups[1]); int replaceOption = "//".equals(groups[2]) ? Regexp.REPLACE_ALL : Regexp.REPLACE_FIRST; StringBuffer sb = new StringBuffer(groups[3]); Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/RequireProperty.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/RequireProperty.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/RequireProperty.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/RequireProperty.java Fri Jun 29 11:16:45 2007 @@ -19,24 +19,25 @@ */ package org.apache.ant.props.stringops; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.PropertyHelper; /** * Require property operation. */ -public class RequireProperty extends StringOperation { +public class RequireProperty extends RegexBasedEvaluator { private static final String DEFAULT_MESSAGE = "Missing required property "; /** * Construct a new RequireProperty operation. */ public RequireProperty() { - super("^(.*):\\?(.*)?$"); + super("^(.*):\\?(.*)$"); } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { String result = (String) propertyHelper.getProperty(groups[1]); if (result == null) { String message = "".equals(groups[2]) ? DEFAULT_MESSAGE + groups[1] : groups[2]; Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/SetDefaultValue.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/SetDefaultValue.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/SetDefaultValue.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/SetDefaultValue.java Fri Jun 29 11:16:45 2007 @@ -19,13 +19,13 @@ */ package org.apache.ant.props.stringops; -import org.apache.tools.ant.Project; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.PropertyHelper; /** * SetDefaultValue operation. */ -public class SetDefaultValue extends StringOperation { +public class SetDefaultValue extends RegexBasedEvaluator { /** * Construct a new SetDefaultValue operation. @@ -35,16 +35,12 @@ } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { - Object o = propertyHelper.getProperty(groups[1]); - propertyHelper.getProject().log(this + ": " + groups[1] + "=" + o, Project.MSG_DEBUG); - String value; - if (o == null) { - value = groups[2]; - propertyHelper.setNewProperty(groups[1], value); - } else { - value = o.toString(); + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { + Object result = propertyHelper.getProperty(groups[1]); + if (result == null) { + result = groups[2]; + propertyHelper.setNewProperty(groups[1], result); } - return value; + return result; } } Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperationsEvaluator.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperationsEvaluator.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperationsEvaluator.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/StringOperationsEvaluator.java Fri Jun 29 11:16:45 2007 @@ -24,6 +24,7 @@ import java.util.Stack; import org.apache.tools.ant.PropertyHelper; +import org.apache.tools.ant.PropertyHelper.PropertyEvaluator; /** * PropertyEvaluator to apply *nix-style string operations to Ant properties. @@ -41,7 +42,6 @@ * Construct a new StringOperationsEvaluator. */ public StringOperationsEvaluator() { - //TODO: add delegates delegates.add(new Substring()); delegates.add(new DefaultValue()); delegates.add(new SetDefaultValue()); @@ -65,8 +65,8 @@ stk.push(propertyName); try { for (Iterator iter = delegates.iterator(); iter.hasNext();) { - Object value = ((StringOperation) iter.next()).evaluate( - propertyName, propertyHelper); + Object value = ((PropertyEvaluator) iter.next()).evaluate(propertyName, + propertyHelper); if (value != null) { return value; } Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Substring.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Substring.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Substring.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Substring.java Fri Jun 29 11:16:45 2007 @@ -19,12 +19,13 @@ */ package org.apache.ant.props.stringops; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.PropertyHelper; /** * Substring operation. */ -public class Substring extends StringOperation { +public class Substring extends RegexBasedEvaluator { /** * Construct a new substring operation. @@ -34,7 +35,7 @@ } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { String value = (String) propertyHelper.getProperty(groups[1]); if (value != null) { int start = Integer.parseInt(groups[2]); Modified: ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Translate.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Translate.java?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Translate.java (original) +++ ant/sandbox/antlibs/props/trunk/src/main/org/apache/ant/props/stringops/Translate.java Fri Jun 29 11:16:45 2007 @@ -19,12 +19,13 @@ */ package org.apache.ant.props.stringops; +import org.apache.ant.props.RegexBasedEvaluator; import org.apache.tools.ant.PropertyHelper; /** * Translate operation. */ -public class Translate extends StringOperation { +public class Translate extends RegexBasedEvaluator { /** * Construct a new Translate operation. @@ -34,7 +35,7 @@ } /** [EMAIL PROTECTED] */ - protected String evaluate(String[] groups, PropertyHelper propertyHelper) { + protected Object evaluate(String[] groups, PropertyHelper propertyHelper) { return propertyHelper.getProperty(groups[1]) == null ? null : groups[2]; } } Modified: ant/sandbox/antlibs/props/trunk/src/tests/antunit/types-test.xml URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/props/trunk/src/tests/antunit/types-test.xml?view=diff&rev=551987&r1=551986&r2=551987 ============================================================================== --- ant/sandbox/antlibs/props/trunk/src/tests/antunit/types-test.xml (original) +++ ant/sandbox/antlibs/props/trunk/src/tests/antunit/types-test.xml Fri Jun 29 11:16:45 2007 @@ -11,7 +11,7 @@ <whichresource property="control" class="org.apache.tools.ant.Project" classpath="${java.class.path}" /> <whichresource property="test" class="org.apache.tools.ant.Project" - classpath="${path:${java.class.path}}" /> + classpath="${path(${java.class.path})}" /> <au:assertTrue> <equals arg1="${control}" arg2="${test}" /> </au:assertTrue> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]