/* * Copyright 2002-2009 the original author or authors. * * 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 org.springframework.format; import java.lang.annotation.Annotation; import java.util.Set; /** * A factory that creates formatters to format values of fields annotated with a particular {@link Annotation}. * * <p>For example, a <code>DateTimeFormatAnnotationFormatterFactory</code> might create a formatter * that formats <code>Date</code> values set on fields annotated with <code>@DateTimeFormat</code>. * * @author Keith Donald * @since 3.0 * @param <A> the annotation type that should trigger formatting */ public interface AnnotationFormatterFactory<A extends Annotation> { /** * The types of fields that may be annotated with the <A> annotation. */ Set<Class<?>> getFieldTypes(); /** * Get the Printer to print the value of a field of <code>fieldType</code> annotated with <code>annotation</code>. * If the type <T> the printer accepts is not assignable to <code>fieldType</code>, a coersion from <code>fieldType</code> to <T> will be attempted before the Printer is invoked. * @param annotation the annotation instance * @param fieldType the type of field that was annotated * @return the printer */ Printer<?> getPrinter(A annotation, Class<?> fieldType); /** * Get the Parser to parse a submitted value for a field of <code>fieldType</code> annotated with <code>annotation</code>. * If the object the parser returns is not assignable to <code>fieldType</code>, a coersion to <code>fieldType</code> will be attempted before the field is set. * @param annotation the annotation instance * @param fieldType the type of field that was annotated * @return the parser */ Parser<?> getParser(A annotation, Class<?> fieldType); }