StrSubstitutor should also handle the default properties of a 
java.util.Properties class
----------------------------------------------------------------------------------------

                 Key: LANG-596
                 URL: https://issues.apache.org/jira/browse/LANG-596
             Project: Commons Lang
          Issue Type: Bug
          Components: lang.text.*
    Affects Versions: 2.5
            Reporter: Ulrich Voigt
            Priority: Minor


The following program show a problem with a shortcoming of the 
java.util.Properties class. 
The default properties are not substituted by the StrSubstitutor.

{code:title=StrSubstTest.java|borderStyle=solid}
import org.apache.commons.lang.text.StrSubstitutor;

public class StrSubstTest
{
    public static void main(String[] args)
    {
        String org = "${doesnotwork}";
        System.setProperty("doesnotwork", "It work's!");

        // create a new Poperties object with the System.getProperties as 
default
        Properties props = new Properties(System.getProperties());

        String subst = StrSubstitutor.replace(org, props);
        // is ${doesnotwork} substituted?
        System.out.println(subst);

    }
}
{code} 


The following method could be added to the StrSubstitutor class to fix this 
problem in an easy way:
{code:borderStyle=solid}
    /**
     * Replaces all the occurrences of variables in the given source object 
with their matching
     * values from the properties.
     * 
     * @param source the source text containing the variables to substitute, 
null returns null
     * @param properties the properties with values, may be null
     * @return the result of the replace operation
     */
    public static String replace(Object source, Properties valueProperties)
    {
        if (valueProperties == null) {
            return source;
        }
        Map valueMap = new HashMap();
        Enumeration propNames = valueProperties.propertyNames();
        while (propNames.hasMoreElements())
        {
            String propName = (String)propNames.nextElement();
            String propValue = valueProperties.getProperty(propName);
            valueMap.put(propName, propValue);
        }
        return StrSubstitutor.replace(source, valueMap);
    }
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to