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