001// Copyright 2009, 2010 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.internal.beanvalidator; 015 016import java.util.Arrays; 017import java.util.Locale; 018 019import javax.validation.ValidatorFactory; 020 021import org.apache.tapestry5.ComponentResources; 022import org.apache.tapestry5.Field; 023import org.apache.tapestry5.FieldValidator; 024import org.apache.tapestry5.beanvalidator.BeanValidatorGroupSource; 025import org.apache.tapestry5.beanvalidator.ClientConstraintDescriptorSource; 026import org.apache.tapestry5.internal.services.CompositeFieldValidator; 027import org.apache.tapestry5.ioc.AnnotationProvider; 028import org.apache.tapestry5.ioc.Messages; 029import org.apache.tapestry5.services.Core; 030import org.apache.tapestry5.services.Environment; 031import org.apache.tapestry5.services.FieldValidatorDefaultSource; 032import org.apache.tapestry5.services.FormSupport; 033 034public class BeanFieldValidatorDefaultSource implements FieldValidatorDefaultSource 035{ 036 private final FieldValidatorDefaultSource fieldValidatorDefaultSource; 037 private final ValidatorFactory validatorFactory; 038 private final BeanValidatorGroupSource beanValidationGroupSource; 039 private final ClientConstraintDescriptorSource clientValidatorSource; 040 private final FormSupport formSupport; 041 private final Environment environment; 042 043 public BeanFieldValidatorDefaultSource( 044 @Core FieldValidatorDefaultSource fieldValidatorDefaultSource, 045 final ValidatorFactory validatorFactory, 046 final BeanValidatorGroupSource beanValidationGroupSource, 047 final ClientConstraintDescriptorSource clientValidatorSource, 048 final FormSupport formSupport, 049 final Environment environment) 050 { 051 this.fieldValidatorDefaultSource = fieldValidatorDefaultSource; 052 this.validatorFactory = validatorFactory; 053 this.beanValidationGroupSource = beanValidationGroupSource; 054 this.clientValidatorSource = clientValidatorSource; 055 this.formSupport = formSupport; 056 this.environment = environment; 057 } 058 059 public FieldValidator createDefaultValidator(final Field field, 060 final String overrideId, final Messages overrideMessages, 061 final Locale locale, final Class propertyType, 062 final AnnotationProvider propertyAnnotations) 063 { 064 065 FieldValidator validator = fieldValidatorDefaultSource.createDefaultValidator( 066 field, overrideId, overrideMessages, locale, propertyType, propertyAnnotations); 067 068 069 FieldValidator beanValidator 070 = new BeanFieldValidator(field, validatorFactory, beanValidationGroupSource, 071 clientValidatorSource, formSupport, environment); 072 073 return new CompositeFieldValidator(Arrays.asList(validator, beanValidator)); 074 } 075 076 public FieldValidator createDefaultValidator( 077 final ComponentResources resources, final String parameterName) 078 { 079 final Class propertyType = resources.getBoundType(parameterName); 080 081 if (propertyType == null) 082 return null; 083 084 final Field field = (Field) resources.getComponent(); 085 086 return createDefaultValidator(field, resources.getId(), resources 087 .getContainerMessages(), resources.getLocale(), propertyType, 088 resources.getAnnotationProvider(parameterName)); 089 } 090}