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. 014 package org.apache.tapestry5.internal.beanvalidator; 015 016 import java.util.Arrays; 017 import java.util.Locale; 018 019 import javax.validation.ValidatorFactory; 020 021 import org.apache.tapestry5.ComponentResources; 022 import org.apache.tapestry5.Field; 023 import org.apache.tapestry5.FieldValidator; 024 import org.apache.tapestry5.beanvalidator.BeanValidatorGroupSource; 025 import org.apache.tapestry5.beanvalidator.ClientConstraintDescriptorSource; 026 import org.apache.tapestry5.internal.services.CompositeFieldValidator; 027 import org.apache.tapestry5.ioc.AnnotationProvider; 028 import org.apache.tapestry5.ioc.Messages; 029 import org.apache.tapestry5.services.Core; 030 import org.apache.tapestry5.services.Environment; 031 import org.apache.tapestry5.services.FieldValidatorDefaultSource; 032 import org.apache.tapestry5.services.FormSupport; 033 034 public 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 }