package fr.openwide.core.wicket.more.markup.repeater.collection; import java.util.Collection; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import com.google.common.base.Function; import fr.openwide.core.wicket.more.markup.repeater.sequence.SequenceView; import fr.openwide.core.wicket.more.model.ReadOnlyCollectionModel; public abstract class CollectionView<T> extends SequenceView<T> { private static final long serialVersionUID = 1L; public CollectionView(String id, ICollectionModel<T, ?> collectionModel) { super(id, collectionModel); setDefaultModel(collectionModel); } /** * Creates a {@link ReadOnlyCollectionModel read-only} view on the given model, using the given factory for generating * item models. */ @SuppressWarnings("unchecked") public CollectionView(String id, IModel<? extends Collection<T>> collectionModel, Function<? super T, ? extends IModel<T>> itemModelFactory) { this(id, collectionModel instanceof ICollectionModel ? (ICollectionModel<T, ?>) collectionModel : ReadOnlyCollectionModel.of(collectionModel, itemModelFactory)); } @Override protected abstract void populateItem(Item<T> item); @SuppressWarnings("unchecked") // The sequence provider is known to be a ICollectionModel, see constructor public ICollectionModel<T, ?> getModel() { return (ICollectionModel<T, ?>) getSequenceProvider(); } }