package fr.openwide.core.wicket.more.markup.html.basic; import java.util.Collection; import org.apache.wicket.Component; import org.apache.wicket.model.IModel; import com.google.common.base.Predicate; import com.google.common.base.Predicates; public interface IPlaceholderEnclosureBuilder<T> { T component(Component component); /** * Shorthand for <code>builder.component(firstComponent).component(secondComponent).component(thirdComponent) ...</code> */ T components(Component firstComponent, Component... otherComponents); T components(Collection<? extends Component> components); T model(IModel<?> model); T collectionModel(IModel<? extends Collection<?>> model); /** * Adds a <code>model</code> that will be considered "non-empty" if and only if <code>predicate.apply(model == null ? null : model.getObject())</code> returns <code>true</code>. * <p><strong>WARNING:</strong> <code>predicate</code> must be serializable in order for this object to be serializable. * Also, it must implement IDetachable in order to be properly detached by this object. {@link Predicates#and(Predicate, Predicate)}, for instance, will produce not-detachable predicates. */ <T2> T model(Predicate<? super T2> predicate, IModel<? extends T2> model); /** * Shorthand for <code>builder.model(firstModel).model(secondModel).model(thirdModel) ...</code> */ T models(IModel<?> firstModel, IModel<?>... otherModels); /** * Shorthand for <code>builder.model(predicate, firstModel).model(predicate, secondModel).model(predicate, thirdModel) ...</code> * <p><strong>WARNING:</strong> <code>predicate</code> must be serializable in order for this object to be serializable. * Also, it must implement IDetachable in order to be properly detached by this object. {@link Predicates#and(Predicate, Predicate)}, for instance, will produce not-detachable predicates. */ <T2> T models(Predicate<? super T2> predicate, IModel<? extends T2> firstModel, @SuppressWarnings("unchecked") IModel<? extends T2>... otherModels); }