| /* |
| * 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.impl; |
| |
| import com.google.gwt.core.client.GWT; |
| |
| import java.util.List; |
| |
| import javax.validation.Configuration; |
| import javax.validation.ValidationException; |
| import javax.validation.ValidationProviderResolver; |
| import javax.validation.ValidatorFactory; |
| import javax.validation.bootstrap.GenericBootstrap; |
| import javax.validation.bootstrap.ProviderSpecificBootstrap; |
| import javax.validation.spi.BootstrapState; |
| import javax.validation.spi.ValidationProvider; |
| |
| /** |
| * This class is the entry point for Bean Validation. Bootstrapping is done as follows: |
| * |
| * <pre>{@code ValidatorFactory factory = Validation.buildDefaultValidatorFactory();}</pre> |
| * |
| * Or, equivalently: |
| * |
| * <pre>{@code |
| * Configuration<?> configuration = Validation |
| * .byDefaultProvider() |
| * .configure(); |
| * ValidatorFactory factory = configuration.buildValidatorFactory();} |
| * </pre> |
| * |
| * Only the default provider is available for use, and thus the {@code byProvider} and |
| * {@code providerResolver} methods are not supported. Calling either of these methods will |
| * generate an exception. |
| * <p> |
| * This class was modified by Google from the original |
| * javax.validation.Validation source to make it suitable for GWT. |
| */ |
| public class Validation { |
| |
| // private class, not exposed |
| private static class GenericGWTBootstrapImpl implements GenericBootstrap, |
| BootstrapState { |
| |
| private ValidationProviderResolver defaultResolver; |
| |
| @Override |
| public Configuration<?> configure() { |
| ValidationProviderResolver aResolver = getDefaultValidationProviderResolver(); |
| |
| List<ValidationProvider<?>> resolvers; |
| try { |
| resolvers = aResolver.getValidationProviders(); |
| } catch (RuntimeException re) { |
| throw new ValidationException( |
| "Unable to get available provider resolvers.", re); |
| } |
| |
| if (resolvers.size() == 0) { |
| // FIXME looks like an assertion error almost |
| throw new ValidationException("Unable to find a default provider"); |
| } |
| |
| Configuration<?> config; |
| try { |
| config = aResolver.getValidationProviders().get(0).createGenericConfiguration( |
| this); |
| } catch (RuntimeException re) { |
| throw new ValidationException("Unable to instantiate Configuration.", |
| re); |
| } |
| |
| return config; |
| } |
| |
| @Override |
| public ValidationProviderResolver getDefaultValidationProviderResolver() { |
| if (defaultResolver == null) { |
| defaultResolver = GWT.create(ValidationProviderResolver.class); |
| } |
| return defaultResolver; |
| } |
| |
| @Override |
| public ValidationProviderResolver getValidationProviderResolver() { |
| return getDefaultValidationProviderResolver(); |
| } |
| |
| /** |
| * Unsupported. Always throws an {@link UnsupportedOperationException}. |
| * |
| * @throws UnsupportedOperationException |
| */ |
| @Override |
| public GenericBootstrap providerResolver(ValidationProviderResolver resolver) { |
| throw new UnsupportedOperationException("GWT Validation does not support custom validator " + |
| "provider resolvers"); |
| } |
| } |
| |
| /** |
| * Build and return a <code>ValidatorFactory</code> instance based on the |
| * default Bean Validation provider. |
| * <p/> |
| * The provider list is resolved using the default validation provider |
| * resolver logic. |
| * <p/> |
| * The code is semantically equivalent to |
| * <code>Validation.byDefaultProvider().configure().buildValidatorFactory()</code> |
| * |
| * @return <code>ValidatorFactory</code> instance. |
| * |
| * @throws ValidationException if the ValidatorFactory cannot be built |
| */ |
| public static ValidatorFactory buildDefaultValidatorFactory() { |
| return byDefaultProvider().configure().buildValidatorFactory(); |
| } |
| |
| /** |
| * Build a <code>Configuration</code>. |
| * |
| * <pre> |
| * Configuration<?> configuration = Validation |
| * .byDefaultProvider() |
| * .configure(); |
| * ValidatorFactory factory = configuration.buildValidatorFactory(); |
| * </pre> |
| * |
| * The first available provider will be returned. |
| * |
| * @return instance building a generic <code>Configuration</code> complaint |
| * with the bootstrap state provided. |
| */ |
| public static GenericBootstrap byDefaultProvider() { |
| return new GenericGWTBootstrapImpl(); |
| } |
| |
| /** |
| * Unsupported. Always throws an {@link UnsupportedOperationException}. |
| * @param providerType |
| * |
| * @throws UnsupportedOperationException |
| */ |
| public static <T extends Configuration<T>,U extends ValidationProvider<T>> |
| ProviderSpecificBootstrap<T> byProvider(Class<U> providerType) { |
| throw new UnsupportedOperationException("GWT Validation does not support custom validator " + |
| "providers"); |
| } |
| } |