/* * Copyright 2002-2014 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} might create a formatter * that formats {@code Date} values set on fields annotated with {@code @DateTimeFormat}. * * @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} annotated with * {@code annotation}. * <p>If the type T the printer accepts is not assignable to {@code fieldType}, a * coercion from {@code fieldType} 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} * annotated with {@code annotation}. * <p>If the object the parser returns is not assignable to {@code fieldType}, * a coercion to {@code fieldType} 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); }