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