Add constructor to GwtMessageInterpolator that accepts a
UserValidationMessagesResolver so applications can use more that one
MessageInterploator.

Review at http://gwt-code-reviews.appspot.com/1515803

Review by: rchandia@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10514 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java b/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
index 2bd7100..286d11f 100644
--- a/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/client/BaseMessageInterpolator.java
@@ -36,7 +36,7 @@
   /**
    * Implementation of {@link Context}.
    */
-  public static class ContextImpl implements Context {
+  public static final class ContextImpl implements Context {
 
     private final ConstraintDescriptor<?> constraintDescriptor;
     private final Object value;
@@ -55,7 +55,7 @@
     }
   }
 
-  // local version because guava is included.
+  // local version because guava is not included.
   private static interface Function<F, T> {
     T apply(F from);
   }
@@ -98,15 +98,18 @@
   /**
    * Replaces keys using the Validation User custom properties.
    */
-  private final Function<String, String> userReplacer =
-      createReplacer((ValidationMessageResolver)
-          GWT.create(UserValidationMessagesResolver.class));
+  private final Function<String, String> userReplacer;
 
-  public String interpolate(String messageTemplate, Context context) {
+  protected BaseMessageInterpolator(
+      UserValidationMessagesResolver userValidationMessagesResolver) {
+    userReplacer = createReplacer(userValidationMessagesResolver);
+  }
+
+  public final String interpolate(String messageTemplate, Context context) {
     return gwtInterpolate(messageTemplate, context, null);
   }
 
-  protected String gwtInterpolate(String message, Context context,
+  protected final String gwtInterpolate(String message, Context context,
       GwtLocale locale) {
     // see Section 4.3.1.1
     String resolvedMessage = message;
@@ -140,7 +143,7 @@
     return resolvedMessage;
   }
 
-  protected String replaceParameters(String message,
+  protected final String replaceParameters(String message,
       Function<String, String> replacer) {
     StringBuffer sb = new StringBuffer();
     int index = 0;
@@ -159,7 +162,7 @@
     return sb.toString();
   }
 
-  private String removeCurlyBrace(String parameter) {
+  private final String removeCurlyBrace(String parameter) {
     return parameter.substring(1, parameter.length() - 1);
   }
 }
diff --git a/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java b/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
index ce3717d..7bd6bd2 100644
--- a/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/client/GwtMessageInterpolator.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.validation.client;
 
+import com.google.gwt.core.client.GWT;
+
 import java.util.Locale;
 
 /**
@@ -26,8 +28,31 @@
 public class GwtMessageInterpolator extends BaseMessageInterpolator {
   // This class only has the parts the need to overridden for GWT
 
-  public String interpolate(String messageTemplate, Context context,
+  /**
+   * Creates a {@link javax.validation.MessageInterpolator MessageInterpolator}
+   * MessageInterpolator that uses the default
+   * {@link UserValidationMessagesResolver}.
+   */
+  public GwtMessageInterpolator() {
+    this((UserValidationMessagesResolver) GWT
+        .create(UserValidationMessagesResolver.class));
+  }
+
+  /**
+   * Creates a {@link javax.validation.MessageInterpolator MessageInterpolator}
+   * using the supplie{@link UserValidationMessagesResolver}.
+   *
+   * @param userValidationMessagesResolver
+   */
+  public GwtMessageInterpolator(
+      UserValidationMessagesResolver userValidationMessagesResolver) {
+    super(userValidationMessagesResolver);
+  }
+
+  public final String interpolate(String messageTemplate, Context context,
       Locale locale) {
+    // The super sourced GWT version of this calls
+    // gwtInterpolate
     return messageTemplate;
   }
 }
diff --git a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
index f180b17..3460fad 100644
--- a/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
+++ b/user/src/com/google/gwt/validation/super/com/google/gwt/validation/client/GwtMessageInterpolator.java
@@ -15,17 +15,42 @@
  */
 package com.google.gwt.validation.client;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.i18n.shared.GwtLocale;
 
 import javax.validation.MessageInterpolator.Context;
 
 /**
+ * <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in
+ * production code.
+ * <p>
  * Simple GWT {@link javax.validation.MessageInterpolator}.
  */
 public class GwtMessageInterpolator extends BaseMessageInterpolator {
   // This class only has the parts the need to overridden for GWT
 
-  public String interpolate(String messageTemplate, Context context,
+  /**
+   * Creates a {@link javax.validation.MessageInterpolator MessageInterpolator}
+   * MessageInterpolator that uses the default
+   * {@link UserValidationMessagesResolver}.
+   */
+  public GwtMessageInterpolator() {
+    this((UserValidationMessagesResolver) GWT
+        .create(UserValidationMessagesResolver.class));
+  }
+
+  /**
+   * Creates a {@link javax.validation.MessageInterpolator MessageInterpolator}
+   * using the supplie{@link UserValidationMessagesResolver}.
+   *
+   * @param userValidationMessagesResolver
+   */
+  public GwtMessageInterpolator(
+      UserValidationMessagesResolver userValidationMessagesResolver) {
+    super(userValidationMessagesResolver);
+  }
+
+  public final String interpolate(String messageTemplate, Context context,
       GwtLocale locale) {
     return gwtInterpolate(messageTemplate,context,locale);
   }