commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Schindl <lis...@bestsolution.at>
Subject Re: [lang] VariableFormatter - pre 2.2
Date Wed, 02 Aug 2006 18:16:42 GMT
Well I'd love to see this method in 2.2 because I think it does make any
API visible to the user and doesn't bloat the
interface with too many new methods.

Any other thoughts?

Tom

Henri Yandell wrote:

> Make a new one - unless you're arguing for the change to be in 2.2;
> then keep it going on this thread.
>
> Hen
>
> On 8/2/06, Tom Schindl <listom@bestsolution.at> wrote:
>
>> Where should I put my feature request should I:
>> - append it to VariableFormatter's-Jira-Entry
>> - create a new Jira-Entry for StrSubstitutor
>>
>> Tom
>>
>> Tom Schindl schrieb:
>> > Hi,
>> >
>> > Looks good to me. Maybe for 2.3 this patch could provide
>> > MessageFormatting like proposed before without bloating the API. Does
>> > this now mean that VariableFormatter is gone? I like the nameing
>> > StrSubstitutor better.
>> >
>> > Tom
>> >
>> > Henri Yandell schrieb:
>> >> On 7/23/06, Stephen Colebourne <scolebourne@btopenworld.com> wrote:
>> >>> I have reworked the VariableFormatter class along the lines that I
>> >>> was  thinking. I have committed it as StrSubstitutor so it doesn't
>> >>> clash for  the moment and so it can be easiy reviewed.
>> >>>
>> >>>  This version does not have a separate parser class, but still
>> >>> supports  escaping, and matchers for prefix/suffix (which can now be
>> >>> set by  users). The new class should perform better as a result.
>> >>>
>> >>>  I have removed the edge cases wrt resolving Objects, as they were
>> >>> rather   ill-defined.
>> >>>
>> >>>  Otherwise, the basic functionality it supported, and the test case
>> >>> is  slightly enlarged. I still want to break out the resolver as a
>> >>> public  abstract class before release.
>> >>>
>> >>>  Opinions
>> >> Oliver, Gary, Tom?
>> >>
>> >> Looking to get Lang 2.2 moving out the door and this is the only
>> blocker.
>> >>
>> >> Hen
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> >> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>> >>
>> >>
>> >
>> >
>> >
>> ------------------------------------------------------------------------
>> >
>> > Index:
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/java/org/apache/commons/lang/text/StrSubstitutor.java
>>
>> > ===================================================================
>> > ---
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/java/org/apache/commons/lang/text/StrSubstitutor.java
   
>> (revision 427468)
>> > +++
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/java/org/apache/commons/lang/text/StrSubstitutor.java
   
>> (working copy)
>> > @@ -16,6 +16,7 @@
>> >
>> >  package org.apache.commons.lang.text;
>> >
>> > +import java.text.MessageFormat;
>> >  import java.util.ArrayList;
>> >  import java.util.List;
>> >  import java.util.Map;
>> > @@ -725,5 +726,84 @@
>> >              return obj.toString();
>> >          }
>> >      }
>> > +
>> > +    /**
>> > +     * Looks up a string value by name using a {@link Map} and can
>> use format
>> > +     * expressions known from {@link MessageFormat}
>> > +     */
>> > +    static class MapVariableResolverFormat extends
>> MapVariableResolver {
>> > +
>> > +             MapVariableResolverFormat(Map map) {
>> > +                     super(map);
>> > +             }
>> > +
>> > +             public String resolveVariable(String varName) {
>> > +                     int index;
>> > +
>> > +                     if (map != null && (index =
>> varName.indexOf(",")) != -1) {
>> > +                     return MessageFormat.format("{0" +
>> varName.substring(index)
>> > +                                     + "}", new Object[] { map.get(
>> > +                                                    
>> varName.substring(0, index)) });
>> > +             } else {
>> > +                     return super.resolveVariable(varName);
>> > +             }
>> > +             }
>> > +    }
>> > +
>> > +    /**
>> > +     * Substitutes variables by value and allows to use the
>> formats known from
>> > +     * {@link MessageFormat}:
>> > +     * <p>
>> > +     * The following example demonstrates this:
>> > +     * </p>
>> > +     * <pre>
>> > +     * Map map = new HashMap();
>> > +     * map.put("num",new Double(1000.103));
>> > +     * map.put("date", new
>> SimpleDateFormat("yyyy-MM-dd").parse("1970-01-01"));
>> > +     *
>> > +     * StrSubstitutor.Format.replace("Number:
>> ${num,number,integer}, Date: ${date,date,yyyy-MM-dd}", map)
>> > +     * </pre>
>> > +     * yielding in Locale.US
>> > +     * <pre>
>> > +     * Number: 1,000, Date: 1970-01-01
>> > +     * </pre>
>> > +     */
>> > +    public static class Format {
>> > +     private Format() {}
>> > +
>> > +        /**
>> > +         * Replaces all the occurrences of variables in the given
>> source object with
>> > +         * their matching values from the map.
>> > +         *
>> > +         * @param source  the source text containing the variables
>> to substitute
>> > +         * @param valueMap  the map with the values
>> > +         * @return the result of the replace operation
>> > +         */
>> > +        public static String replace(Object source, Map valueMap) {
>> > +             StrSubstitutor tmp = new StrSubstitutor();
>> > +             tmp.setVariableResolver(new
>> MapVariableResolverFormat(valueMap));
>> > +
>> > +            return tmp.replace(source);
>> > +        }
>> >
>> > +        /**
>> > +         * Replaces all the occurrences of variables in the given
>> source object with
>> > +         * their matching values from the map. This method allows
>> to specifiy a
>> > +         * custom variable prefix and suffix
>> > +         *
>> > +         * @param source  the source text containing the variables
>> to substitute
>> > +         * @param valueMap  the map with the values
>> > +         * @param prefix  the prefix of variables
>> > +         * @param suffix  the suffix of variables
>> > +         * @return the result of the replace operation
>> > +         */
>> > +        public static String replace(Object source, Map valueMap,
>> String prefix, String suffix) {
>> > +             StrSubstitutor tmp = new StrSubstitutor();
>> > +             tmp.setVariablePrefix(prefix);
>> > +             tmp.setVariableSuffix(suffix);
>> > +             tmp.setVariableResolver(new
>> MapVariableResolverFormat(valueMap));
>> > +
>> > +            return tmp.replace(source);
>> > +        }
>> > +    }
>> >  }
>> > Index:
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
>>
>> > ===================================================================
>> > ---
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
>> (revision 427468)
>> > +++
>> /home.local/tom/projects/eclipse-ws/bidi-forms/jakarta-commons-lang/src/test/org/apache/commons/lang/text/StrSubstitutorTest.java
>> (working copy)
>> > @@ -16,7 +16,10 @@
>> >
>> >  package org.apache.commons.lang.text;
>> >
>> > +import java.text.ParseException;
>> > +import java.text.SimpleDateFormat;
>> >  import java.util.HashMap;
>> > +import java.util.Locale;
>> >  import java.util.Map;
>> >
>> >  import junit.framework.Test;
>> > @@ -24,8 +27,6 @@
>> >  import junit.framework.TestSuite;
>> >  import junit.textui.TestRunner;
>> >
>> > -import
>> org.apache.commons.lang.text.StrSubstitutor.MapVariableResolver;
>> > -
>> >  /**
>> >   * Test class for StrSubstitutor.
>> >   *
>> > @@ -332,6 +333,26 @@
>> >          }
>> >      }
>> >
>> > +    public void testWithFormating() {
>> > +     Locale tmp = Locale.getDefault();
>> > +
>> > +     try {
>> > +             Map map = new HashMap();
>> > +             map.put("num",new Double(1000.103));
>> > +                     map.put("date", new
>> SimpleDateFormat("yyyy-MM-dd").parse("1970-01-01"));
>> > +
>> > +             Locale.setDefault(Locale.US);
>> > +
>> > +             String value = StrSubstitutor.Format.replace("Number:
>> ${num,number,integer}, Date: ${date,date,yyyy-MM-dd}", map);
>> > +             assertEquals("Number: 1,000, Date: 1970-01-01", value);
>> > +
>> > +             } catch (ParseException e) {
>> > +                     fail("Parsing failed");
>> > +             } finally {
>> > +                     Locale.setDefault(tmp);
>> > +             }
>> > +    }
>> > +
>> >      /**
>> >       * Tests interpolation with weird boundary patterns.
>> >       */
>> >
>> >
>> >
>> >
>> ------------------------------------------------------------------------
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> > For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message