Save the factory and options in the ValidatorContext
Add test for GwtValidatorContext.
Review at http://gwt-code-reviews.appspot.com/1523806
Review by: rchandia@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10578 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/validation/Validation.gwt.xml b/user/src/com/google/gwt/validation/Validation.gwt.xml
index 063a83e..82ad94d 100644
--- a/user/src/com/google/gwt/validation/Validation.gwt.xml
+++ b/user/src/com/google/gwt/validation/Validation.gwt.xml
@@ -40,9 +40,6 @@
class="com.google.gwt.validation.client.GwtValidationProviderResolver">
<when-type-is class="javax.validation.ValidationProviderResolver" />
</replace-with>
- <replace-with class="com.google.gwt.validation.client.GwtValidatorContext">
- <when-type-is class="javax.validation.ValidatorContext" />
- </replace-with>
<replace-with class="com.google.gwt.validation.client.NullUserValidationMessageResolver">
<!-- User can override this to have Custom messages -->
<when-type-is class="com.google.gwt.validation.client.UserValidationMessagesResolver" />
diff --git a/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java b/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
index 49907ec..acbc50d 100644
--- a/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
+++ b/user/src/com/google/gwt/validation/client/AbstractGwtValidatorFactory.java
@@ -1,12 +1,12 @@
/*
* Copyright 2010 Google Inc.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -56,24 +56,30 @@
*/
public abstract class AbstractGwtValidatorFactory implements ValidatorFactory {
+ private final ConstraintValidatorFactory constraintValidatorFactory = GWT
+ .create(ConstraintValidatorFactory.class);
+ private final GwtMessageInterpolator messageInterpolator = new GwtMessageInterpolator();
+ private final TraversableResolver traversableResolver = GWT
+ .create(TraversableResolver.class);;
+
/**
* Implement this method to returns a {@link GWT#create}ed {@link Validator}
* annotated with {@link GwtValidation}.
- *
+ *
* @return newly created Validator
*/
public abstract AbstractGwtValidator createValidator();
public final ConstraintValidatorFactory getConstraintValidatorFactory() {
- return GWT.create(ConstraintValidatorFactory.class);
+ return constraintValidatorFactory;
}
public final MessageInterpolator getMessageInterpolator() {
- return new GwtMessageInterpolator();
+ return messageInterpolator;
}
public final TraversableResolver getTraversableResolver() {
- return GWT.create(TraversableResolver.class);
+ return traversableResolver;
}
public final Validator getValidator() {
@@ -89,6 +95,6 @@
}
public final ValidatorContext usingContext() {
- return GWT.create(ValidatorContext.class);
+ return new GwtValidatorContext(this);
}
}
diff --git a/user/src/com/google/gwt/validation/client/GwtValidatorContext.java b/user/src/com/google/gwt/validation/client/GwtValidatorContext.java
index 4f98419..993f89b 100644
--- a/user/src/com/google/gwt/validation/client/GwtValidatorContext.java
+++ b/user/src/com/google/gwt/validation/client/GwtValidatorContext.java
@@ -1,12 +1,12 @@
/*
* Copyright 2010 Google Inc.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -15,7 +15,6 @@
*/
package com.google.gwt.validation.client;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.validation.client.impl.AbstractGwtValidator;
import javax.validation.ConstraintValidatorFactory;
@@ -23,7 +22,6 @@
import javax.validation.TraversableResolver;
import javax.validation.Validator;
import javax.validation.ValidatorContext;
-import javax.validation.ValidatorFactory;
/**
* <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in
@@ -31,20 +29,39 @@
* <p>
* GWT {@link ValidatorContext}.
*/
-public class GwtValidatorContext implements ValidatorContext {
+class GwtValidatorContext implements ValidatorContext {
- private final AbstractGwtValidatorFactory validatorFactory = GWT.create(ValidatorFactory.class);
+ private final AbstractGwtValidatorFactory validatorFactory;
- private ConstraintValidatorFactory constraintValidatorfactory = validatorFactory.getConstraintValidatorFactory();
- private MessageInterpolator messageInterpolator = validatorFactory.getMessageInterpolator();
- private TraversableResolver traversableResolver = validatorFactory.getTraversableResolver();
+ private final ConstraintValidatorFactory factoryConstraintValidatorfactory;
+ private final MessageInterpolator factoryMessageInterpolator;
+ private final TraversableResolver factoryTraversableResolver;
+
+ private ConstraintValidatorFactory constraintValidatorfactory = null;
+ private MessageInterpolator messageInterpolator = null;
+ private TraversableResolver traversableResolver = null;
+
+ GwtValidatorContext(AbstractGwtValidatorFactory validatorFactory) {
+ this.validatorFactory = validatorFactory;
+
+ factoryConstraintValidatorfactory = validatorFactory
+ .getConstraintValidatorFactory();
+ constraintValidatorfactory = validatorFactory
+ .getConstraintValidatorFactory();
+
+ factoryMessageInterpolator = validatorFactory.getMessageInterpolator();
+ messageInterpolator = validatorFactory.getMessageInterpolator();
+
+ factoryTraversableResolver = validatorFactory.getTraversableResolver();
+ traversableResolver = validatorFactory.getTraversableResolver();
+ }
public ValidatorContext constraintValidatorFactory(
- ConstraintValidatorFactory factory) {
- if (factory == null) {
- this.constraintValidatorfactory = GWT.create(ConstraintValidatorFactory.class);
+ ConstraintValidatorFactory constraintValidatorfactory) {
+ if (constraintValidatorfactory == null) {
+ this.constraintValidatorfactory = factoryConstraintValidatorfactory;
} else {
- this.constraintValidatorfactory = factory;
+ this.constraintValidatorfactory = constraintValidatorfactory;
}
return this;
}
@@ -59,7 +76,7 @@
public ValidatorContext messageInterpolator(
MessageInterpolator messageInterpolator) {
if (messageInterpolator == null) {
- this.messageInterpolator = GWT.create(MessageInterpolator.class);
+ this.messageInterpolator = factoryMessageInterpolator;
} else {
this.messageInterpolator = messageInterpolator;
}
@@ -69,11 +86,10 @@
public ValidatorContext traversableResolver(
TraversableResolver traversableResolver) {
if (traversableResolver == null) {
- this.traversableResolver = GWT.create(TraversableResolver.class);
+ this.traversableResolver = factoryTraversableResolver;
} else {
this.traversableResolver = traversableResolver;
}
return this;
}
-
}
diff --git a/user/src/com/google/gwt/validation/client/impl/AbstractGwtValidator.java b/user/src/com/google/gwt/validation/client/impl/AbstractGwtValidator.java
index bd35bfb..c49f8aa 100644
--- a/user/src/com/google/gwt/validation/client/impl/AbstractGwtValidator.java
+++ b/user/src/com/google/gwt/validation/client/impl/AbstractGwtValidator.java
@@ -37,7 +37,7 @@
public abstract class AbstractGwtValidator implements Validator {
private final Set<Class<?>> validGroups;
- private ConstraintValidatorFactory factory;
+ private ConstraintValidatorFactory contraintValidatorFactory;
private MessageInterpolator messageInterpolator;
private TraversableResolver traversableResolver;
@@ -53,7 +53,7 @@
public void init(ConstraintValidatorFactory factory,
MessageInterpolator messageInterpolator,
TraversableResolver traversableResolver) {
- this.factory = factory;
+ this.contraintValidatorFactory = factory;
this.messageInterpolator = messageInterpolator;
this.traversableResolver = traversableResolver;
}
@@ -82,8 +82,8 @@
}
}
- protected ConstraintValidatorFactory getFactory() {
- return factory;
+ protected ConstraintValidatorFactory getConstraintValidatorFactory() {
+ return contraintValidatorFactory;
}
protected MessageInterpolator getMessageInterpolator() {
diff --git a/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java b/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
index a40bd79..4e6794f 100644
--- a/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
+++ b/user/test/com/google/gwt/validation/ValidationClientGwtSuite.java
@@ -17,6 +17,7 @@
import com.google.gwt.junit.tools.GWTTestSuite;
import com.google.gwt.validation.client.BaseMessageInterpolatorTest;
+import com.google.gwt.validation.client.GwtValidatorContextTest;
import com.google.gwt.validation.client.SimpleSampleTest;
import junit.framework.Test;
@@ -30,6 +31,7 @@
GWTTestSuite suite = new GWTTestSuite(
"Test suite for all validation code.");
suite.addTestSuite(BaseMessageInterpolatorTest.class);
+ suite.addTestSuite(GwtValidatorContextTest.class);
suite.addTestSuite(SimpleSampleTest.class);
return suite;
}
diff --git a/user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java b/user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java
new file mode 100644
index 0000000..25e1cae
--- /dev/null
+++ b/user/test/com/google/gwt/validation/client/GwtValidatorContextTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.validation.client;
+
+import com.google.gwt.validation.client.impl.AbstractGwtValidator;
+import com.google.gwt.validation.client.impl.GwtValidationContext;
+
+import java.util.Set;
+
+import javax.validation.ConstraintValidatorFactory;
+import javax.validation.ConstraintViolation;
+import javax.validation.MessageInterpolator;
+import javax.validation.TraversableResolver;
+import javax.validation.ValidationException;
+import javax.validation.ValidatorContext;
+import javax.validation.ValidatorFactory;
+import javax.validation.metadata.BeanDescriptor;
+
+/**
+ * Tests for {@link GwtValidatorContext}.
+ */
+public class GwtValidatorContextTest extends ValidationClientGwtTestCase {
+
+ private final class DummyGwtValidatorFactory extends
+ AbstractGwtValidatorFactory {
+ @Override
+ public AbstractGwtValidator createValidator() {
+ return new DummyValidator();
+ }
+ }
+
+ private static class DummyValidator extends AbstractGwtValidator {
+ @Override
+ public BeanDescriptor getConstraintsForClass(Class<?> clazz) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> Set<ConstraintViolation<T>> validate(
+ GwtValidationContext<T> context, Object object, Class<?>... groups)
+ throws ValidationException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> Set<ConstraintViolation<T>> validate(T object,
+ Class<?>... groups) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> Set<ConstraintViolation<T>> validateProperty(T object,
+ String propertyName, Class<?>... groups) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType,
+ String propertyName, Object value, Class<?>... groups) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected ConstraintValidatorFactory getConstraintValidatorFactory() {
+ return super.getConstraintValidatorFactory();
+ }
+
+ @Override
+ protected MessageInterpolator getMessageInterpolator() {
+ return super.getMessageInterpolator();
+ }
+
+ @Override
+ protected TraversableResolver getTraversableResolver() {
+ return super.getTraversableResolver();
+ }
+ }
+
+ private ValidatorFactory validatorFactory;
+ private ValidatorContext validatorContext;
+
+ public void testCustom() throws Exception {
+ final TraversableResolver traversableResolver = new GwtTraversableResolver();
+ final ConstraintValidatorFactory constraintValidatorFactory = new GwtConstraintValidatorFactory();
+ final MessageInterpolator messageInterpolator = new GwtMessageInterpolator();
+
+ validatorContext.constraintValidatorFactory(constraintValidatorFactory)
+ .messageInterpolator(messageInterpolator)
+ .traversableResolver(traversableResolver);
+
+ assertContext(traversableResolver, constraintValidatorFactory,
+ messageInterpolator);
+ }
+
+ public void testDefault() throws Exception {
+ assertContext(validatorFactory.getTraversableResolver(), //
+ validatorFactory.getConstraintValidatorFactory(), //
+ validatorFactory.getMessageInterpolator());
+ }
+
+ public void testNull() throws Exception {
+ validatorContext.constraintValidatorFactory(null) //
+ .messageInterpolator(null) //
+ .traversableResolver(null);
+
+ assertContext(validatorFactory.getTraversableResolver(), //
+ validatorFactory.getConstraintValidatorFactory(), //
+ validatorFactory.getMessageInterpolator());
+ }
+
+ public void testReset() throws Exception {
+ final TraversableResolver traversableResolver = new GwtTraversableResolver();
+ final ConstraintValidatorFactory constraintValidatorFactory = new GwtConstraintValidatorFactory();
+ final MessageInterpolator messageInterpolator = new GwtMessageInterpolator();
+
+ validatorContext.constraintValidatorFactory(constraintValidatorFactory)
+ .messageInterpolator(messageInterpolator)
+ .traversableResolver(traversableResolver);
+
+ validatorContext.constraintValidatorFactory(null) //
+ .messageInterpolator(null) //
+ .traversableResolver(null);
+
+ assertContext(validatorFactory.getTraversableResolver(), //
+ validatorFactory.getConstraintValidatorFactory(), //
+ validatorFactory.getMessageInterpolator());
+ }
+
+ @Override
+ protected void gwtSetUp() throws Exception {
+ super.gwtSetUp();
+ validatorFactory = new DummyGwtValidatorFactory();
+ validatorContext = validatorFactory.usingContext();
+ }
+
+ private void assertContext(final TraversableResolver traversableResolver,
+ final ConstraintValidatorFactory constraintValidatorFactory,
+ final MessageInterpolator messageInterpolator) {
+ final DummyValidator validator = getDummyValidatorFromContext();
+ assertSame(messageInterpolator, validator.getMessageInterpolator());
+ assertSame(constraintValidatorFactory,
+ validator.getConstraintValidatorFactory());
+ assertSame(traversableResolver, validator.getTraversableResolver());
+ }
+
+ private DummyValidator getDummyValidatorFromContext() {
+ return ((DummyValidator) validatorContext.getValidator());
+ }
+
+}