package org.robobinding.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.robobinding.itempresentationmodel.ViewTypeSelectionContext;
/**
* Used on a Getter of a presentation model to configure the ItemPresentationModel information for the data-set property.
*
* @since 1.0
* @author Cheng Wei
* @author Robert Taylor
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ItemPresentationModel {
Class<? extends org.robobinding.itempresentationmodel.ItemPresentationModel<?>> value();
/**
* Optional. By default, a ItemPresentationModel is created using its
* default constructor. When specified, an
* ItemPresentationModel will be created by invoking the
* PresentationModel.factoryMethod(int itemViewType), which the itemViewType parameter is optional.
* factoryMethod return type is the ItemPresentationModel.
* In this way, the {@link org.robobinding.itempresentationmodel.ItemPresentationModel}
* instances can be configured freely.
*/
String factoryMethod() default "";
/**
* Optional. Used when having multiple view layouts for different items.
* when specified, PresentationModel.viewTypeSelector({@link ViewTypeSelectionContext} context) method wil be invoked to get view type,
* which in turn to pick a view layout for current item. The context parameter is optional.
* viewTypeSelector return type is int, ranging from 0 to ({@link ViewTypeSelectionContext#getViewTypeCount()} - 1).
*/
String viewTypeSelector() default "";
/**
* Optional. Used to change preInitializingViews behavior. Default to {@link PreInitializingViews#YES}.
*/
PreInitializingViews preInitializingViews() default PreInitializingViews.YES;
}