001// Copyright 2009 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014package org.apache.tapestry5.beanvalidator;
015
016import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newSet;
017
018import java.util.Set;
019
020import org.apache.tapestry5.json.JSONObject;
021
022/**
023 * Describes a single client-side constraint.
024 *
025 */
026public final class ClientConstraintDescriptor
027{
028   private final Class annotationClass;
029   private final String validatorName;
030   private final Set<String> attributes;
031
032   /**
033    * Creates a {@link ClientConstraintDescriptor}.
034    * 
035    * @param annotationClass Type of the constraint annotation
036    * @param validatorName Name of the client-side validator
037    * @param attributes Attribute names of the constraint annotation to be passed (along with their values) to the JavaScript validator 
038    * function as an {@link JSONObject}.
039    */
040   public ClientConstraintDescriptor(final Class annotationClass,
041         final String validatorName, final String... attributes) 
042   {
043     this.annotationClass = annotationClass;
044     this.validatorName = validatorName;
045     this.attributes = newSet(attributes);
046   }
047   
048   /**
049    * Returns the annotation describing the constraint declaration.
050    */
051   public Class getAnnotationClass() 
052   {
053     return this.annotationClass;
054   }
055
056   /**
057    * Returns the name of the client-side validator.
058    */
059   public String getValidatorName() 
060   {
061     return this.validatorName;
062   }
063
064   /**
065    * Attribute names of the constraint annotation to be passed (along with their values) to the JavaScript validator 
066    * function as an {@link JSONObject}. 
067    */
068   public Set<String> getAttributes() 
069   {
070     return this.attributes;
071   }
072}