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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED] >> >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >> >> > >> > >> > >> ------------------------------------------------------------------------ >> > >> > 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 [EMAIL PROTECTED] Map} and >> > can >> use format >> > + * expressions known from [EMAIL PROTECTED] 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 >> > + * [EMAIL PROTECTED] 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: [EMAIL PROTECTED] >> > For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]