package org.test4j.datafilling.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.test4j.datafilling.common.FillingConstants;
import org.test4j.datafilling.strategy.AttributeStrategy;
import org.test4j.datafilling.strategy.EmptyStrategy;
@Target(value = { ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@SuppressWarnings("rawtypes")
public @interface FillList {
/**
* The number of elements to create for the collection
*/
int size() default FillingConstants.ARRAY_DEFAULT_SIZE;
/**
* The strategy that will populate the annotated attribute.
* <p>
* The default, in order to make the strategy actually <i>optional</i> is
* type Object. At runtime, only if both the value of this annotation and
* the collection element type are Objects, then the collection will be set
* with type {@link Object}, otherwise the collection element type will win.
* </p>
*
* @return The strategy that will populate the annotated attribute
*/
Class<? extends AttributeStrategy> collectionElementStrategy() default EmptyStrategy.class;
/**
* The strategy that will populate a map key on an attribute of type Map.
* <p>
* The default, in order to make the strategy actually <i>optional</i> is
* type Object. At runtime, only if both the value of this annotation and
* the collection element type are Objects, then the collection will be set
* with type {@link Object}, otherwise the collection element type will win.
* </p>
*
* @return The strategy that will populate a map key on an attribute of type
* Map.
*/
Class<? extends AttributeStrategy> mapKeyStrategy() default EmptyStrategy.class;
/**
* The strategy that will populate a map element on an attribute of type
* Map.
* <p>
* The default, in order to make the strategy actually <i>optional</i> is
* type Object. At runtime, only if both the value of this annotation and
* the collection element type are Objects, then the collection will be set
* with type {@link Object}, otherwise the collection element type will win.
* </p>
*
* @return The strategy that will populate a map element on an attribute of
* type Map.
*/
Class<? extends AttributeStrategy<?>> mapElementStrategy() default EmptyStrategy.class;
/** It allows clients to specify a comment on this annotation */
String comment() default "";
}