| /* |
| * 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.core.client.GWT; |
| import com.google.gwt.validation.client.impl.AbstractGwtValidator; |
| import com.google.gwt.validation.client.impl.GwtValidatorContext; |
| |
| import javax.validation.ConstraintValidatorFactory; |
| import javax.validation.MessageInterpolator; |
| import javax.validation.TraversableResolver; |
| import javax.validation.Validator; |
| import javax.validation.ValidatorContext; |
| import javax.validation.ValidatorFactory; |
| import javax.validation.spi.ConfigurationState; |
| |
| /** |
| * Abstract {@link ValidatorFactory} that delegates to a GWT generated |
| * {@link Validator}. |
| * <p> |
| * Extend this class create and implement createValidator |
| * |
| * <pre> |
| * public class MyValidatorFactory extends AbstractGwtValidatorFactory { |
| * @GwtValidation(value = {Pojo.class,Other.class}) |
| * public static interface GwtValidator extends Validator { |
| * } |
| * |
| * public AbstractGwtValidator createValidator (){ |
| * return GWT.create(GwtValidator.class)); |
| * } |
| * } |
| * </pre> |
| * <p> |
| * Then add a line like this to your Gwt Module config (gwt.xml) file. |
| * |
| * <pre> |
| * <replace-with class="com.example.MyValidatorFactory"> |
| * <when-type-is class="javax.validation.ValidatorFactory"/> |
| * </replace-with> |
| * </pre> |
| */ |
| public abstract class AbstractGwtValidatorFactory implements ValidatorFactory { |
| private ConstraintValidatorFactory constraintValidatorFactory; |
| private MessageInterpolator messageInterpolator; |
| private TraversableResolver traversableResolver; |
| |
| /** |
| * Implement this method to return a {@link GWT#create}d {@link Validator} |
| * annotated with {@link GwtValidation}. |
| * |
| * @return newly created Validator |
| */ |
| public abstract AbstractGwtValidator createValidator(); |
| |
| /** |
| * GWT does not support {@link ConstraintValidatorFactory}, so the object returned by this method |
| * will not work. |
| */ |
| @Override |
| public final ConstraintValidatorFactory getConstraintValidatorFactory() { |
| return constraintValidatorFactory; |
| } |
| |
| @Override |
| public final MessageInterpolator getMessageInterpolator() { |
| return messageInterpolator; |
| } |
| |
| @Override |
| public final TraversableResolver getTraversableResolver() { |
| return traversableResolver; |
| } |
| |
| @Override |
| public final Validator getValidator() { |
| AbstractGwtValidator validator = createValidator(); |
| validator.init(getConstraintValidatorFactory(), getMessageInterpolator(), |
| getTraversableResolver()); |
| return validator; |
| } |
| |
| public final void init(ConfigurationState configState) { |
| ConstraintValidatorFactory configConstraintValidatorFactory = |
| configState.getConstraintValidatorFactory(); |
| this.constraintValidatorFactory = configConstraintValidatorFactory != null ? |
| configConstraintValidatorFactory : |
| GWT.<ConstraintValidatorFactory>create(ConstraintValidatorFactory.class); |
| TraversableResolver configTraversableResolver = configState.getTraversableResolver(); |
| this.traversableResolver = configTraversableResolver != null ? |
| configTraversableResolver : new DefaultTraversableResolver(); |
| MessageInterpolator configMessageInterpolator = configState.getMessageInterpolator(); |
| this.messageInterpolator = configMessageInterpolator != null ? |
| configMessageInterpolator : new GwtMessageInterpolator(); |
| } |
| |
| /** |
| * Unsupported. Always throws an {@link UnsupportedOperationException}. |
| * |
| * @throws UnsupportedOperationException |
| */ |
| @Override |
| public final <T> T unwrap(Class<T> type) { |
| throw new UnsupportedOperationException("GWT Validation does not support upwrap()"); |
| } |
| |
| @Override |
| public final ValidatorContext usingContext() { |
| return new GwtValidatorContext(this); |
| } |
| } |