Its in. I didn't change to StringBuilder in the end as
Matcher.appendReplacement() doesn't support it.

Cheers

Jon

On Tue, Sep 1, 2009 at 11:39 PM, David Blevins <[email protected]>wrote:

> Go ahead and commit it.
>
>
> On Sep 1, 2009, at 3:14 PM, Jonathan Gallimore wrote:
>
>  Thanks again David. I've made those changes and attached them to the
>> issue.
>> All tests pass and it seems to work ok.
>>
>> I've just remembered that I forgot to swap to use StringBuilder - I'll do
>> that before committing. Let me know if there's any other comments!
>>
>> Cheers
>>
>> Jon
>>
>> On Mon, Aug 31, 2009 at 11:56 PM, David Blevins <[email protected]
>> >wrote:
>>
>>
>>> On Aug 31, 2009, at 2:44 PM, Jonathan Gallimore wrote:
>>>
>>> This seems to work well, although I did break the JndiNameTest. I've
>>> fixed
>>>
>>>> this by using the StringTemplate that is used normally, and grabbing the
>>>> format string from there. This seems a bit nasty but all the
>>>> openejb-core
>>>> tests pass now (and I'll run the rest tonight).
>>>>
>>>>
>>>
>>> That does seem a bit nasty.  What if we created a complete replacement
>>> StringTemplate class, something like this (refactored version of the code
>>> from your patch):
>>>
>>> public class StringTemplate {
>>>
>>>    private static final Pattern PATTERN =
>>> Pattern.compile("(\\{)((\\.|\\w)+)(})");
>>>
>>>    private Matcher matcher;
>>>
>>>    public StringTemplate(String template) {
>>>        matcher = PATTERN.matcher(template);
>>>    }
>>>
>>>    public String format(Map<String, String> map) {
>>>        StringBuffer buf = new StringBuffer();
>>>
>>>        while (matcher.find()) {
>>>            String key = matcher.group(2);
>>>            String value = map.get(key);
>>>
>>>            if (key.toLowerCase().endsWith(".lc")) {
>>>                value = map.get(key.substring(0, key.length() -
>>> 3)).toLowerCase();
>>>            } else if (key.toLowerCase().endsWith(".uc")) {
>>>                value = map.get(key.substring(0, key.length() -
>>> 3)).toUpperCase();
>>>            } else if (key.toLowerCase().endsWith(".cc")) {
>>>                value = Strings.camelCase(map.get(key.substring(0,
>>> key.length() - 3)));
>>>            }
>>>
>>>            matcher.appendReplacement(buf, value);
>>>        }
>>>
>>>        matcher.appendTail(buf);
>>>        return buf.toString();
>>>    }
>>>
>>> }
>>>
>>>
>>> We could throw that in the util package then just do a find/replace on
>>> org.codehaus.swizzle.stream.StringTemplate ->
>>> org.apache.openejb.util.StringTemplate
>>>
>>> Thoughts?
>>>
>>> On a side note we should use StringBuilder instead of StringBuffer.
>>>
>>> -David
>>>
>>>
>>>
>

Reply via email to