package org.apache.wicket.bean.validation;

import java.lang.annotation.Annotation;

import javax.validation.constraints.Size;

import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.FormComponent;

/**
 * An object that can modify a component's markup tag during render based on values of a constraint
 * annotation. An example would be a modifier that adds the {@code maxlen} attribute to the tag
 * given a {@link Size} annotation.
 * 
 * @author igor
 * 
 */
@FunctionalInterface
public interface ITagModifier<T extends Annotation>
{
	/**
	 * Modify the tag
	 * 
	 * @param component
	 *            component the tag belongs to
	 * @param tag
	 *            markup tag to be modified
	 * @param annotation
	 *            constraint annotation
	 */
	void modify(FormComponent<?> component, ComponentTag tag, T annotation);
}
