| /* | |
| * 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 java.lang.annotation.Annotation; | |
| import java.util.HashSet; | |
| import java.util.Set; | |
| import javax.validation.MessageInterpolator; | |
| import javax.validation.metadata.BeanDescriptor; | |
| import javax.validation.metadata.ConstraintDescriptor; | |
| /** | |
| * <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in | |
| * production code. | |
| * <p> | |
| * Context for a {@link com.google.gwt.validation.client.GwtValidation}. | |
| * | |
| * <p> | |
| * NOTE: This class is not thread safe. | |
| * | |
| * @param <T> the type of the root bean. | |
| * | |
| */ | |
| public class GwtValidationContext<T> { | |
| private final BeanDescriptor beanDescriptor; | |
| private PathImpl path = new PathImpl(); | |
| private final Class<T> rootBeanClass; | |
| private final T rootBean; | |
| private final MessageInterpolator messageInterpolator; | |
| private final AbstractGwtValidator validator; | |
| /** | |
| * The set of validated object. | |
| * <p> | |
| * This set is shared with and updated by children contexts created by | |
| * {@link #append(String)}, {@link #appendIndex(String, int)} and | |
| * {@link #appendKey(String, String)}. | |
| */ | |
| private final Set<Object> validatedObjects; | |
| public GwtValidationContext(Class<T> rootBeanClass, T rootBean, | |
| BeanDescriptor beanDescriptor, | |
| MessageInterpolator messageInterpolator, AbstractGwtValidator validator) { | |
| this(rootBeanClass, rootBean, beanDescriptor, messageInterpolator, | |
| validator, | |
| new HashSet<Object>()); | |
| } | |
| private GwtValidationContext(Class<T> rootBeanClass, T rootBean, BeanDescriptor beanDescriptor, | |
| MessageInterpolator messageInterpolator, AbstractGwtValidator validator, | |
| Set<Object> validatedObjects) { | |
| this.rootBeanClass = rootBeanClass; | |
| this.rootBean = rootBean; | |
| this.beanDescriptor = beanDescriptor; | |
| this.messageInterpolator = messageInterpolator; | |
| this.validator = validator; | |
| this.validatedObjects = new HashSet<Object>(validatedObjects); | |
| } | |
| public final void addValidatedObject(Object o) { | |
| validatedObjects.add(o); | |
| } | |
| public final boolean alreadyValidated(Object o) { | |
| return validatedObjects.contains(o); | |
| } | |
| /** | |
| * Append a node named name to the path.. | |
| * | |
| * @return the new GwtValidationContext. | |
| */ | |
| public GwtValidationContext<T> append(String name) { | |
| GwtValidationContext<T> temp = new GwtValidationContext<T>(rootBeanClass, | |
| rootBean, beanDescriptor, messageInterpolator, validator, | |
| validatedObjects); | |
| temp.path = path.append(name); | |
| return temp; | |
| } | |
| /** | |
| * Append an indexed node to the path. | |
| * | |
| * @return the new GwtValidationContext. | |
| */ | |
| public GwtValidationContext<T> appendIndex(String name, int index) { | |
| GwtValidationContext<T> temp = new GwtValidationContext<T>(rootBeanClass, | |
| rootBean, beanDescriptor, messageInterpolator, validator, | |
| validatedObjects); | |
| temp.path = path.appendIndex(name, index); | |
| return temp; | |
| } | |
| /** | |
| * Append an iterable node to the path. | |
| * | |
| * @return the new GwtValidationContext. | |
| */ | |
| public GwtValidationContext<T> appendIterable(String name) { | |
| GwtValidationContext<T> temp = new GwtValidationContext<T>(rootBeanClass, | |
| rootBean, beanDescriptor, messageInterpolator, validator, | |
| validatedObjects); | |
| temp.path = path.appendIterable(name); | |
| return temp; | |
| } | |
| /** | |
| * Append a keyed node to the path. | |
| * | |
| * @return the new GwtValidationContext. | |
| */ | |
| public GwtValidationContext<T> appendKey(String name, Object key) { | |
| GwtValidationContext<T> temp = new GwtValidationContext<T>(rootBeanClass, | |
| rootBean, beanDescriptor, messageInterpolator, validator, | |
| validatedObjects); | |
| temp.path = path.appendKey(name, key); | |
| return temp; | |
| } | |
| public <A extends Annotation, V> ConstraintValidatorContextImpl<A, V> createConstraintValidatorContext( | |
| ConstraintDescriptor<A> descriptor) { | |
| return new ConstraintValidatorContextImpl<A, V>(path, descriptor); | |
| } | |
| public MessageInterpolator getMessageInterpolator() { | |
| return messageInterpolator; | |
| } | |
| public T getRootBean() { | |
| return rootBean; | |
| } | |
| public Class<T> getRootBeanClass() { | |
| return rootBeanClass; | |
| } | |
| public AbstractGwtValidator getValidator() { | |
| return validator; | |
| } | |
| } |