package fr.openwide.core.wicket.more.markup.html.select2;
import java.util.Collection;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.retzlaff.select2.ISelect2AjaxAdapter;
import org.retzlaff.select2.Select2MultipleChoice;
import org.retzlaff.select2.Select2Settings;
import com.google.common.base.Supplier;
import fr.openwide.core.wicket.markup.html.model.ConcreteCollectionToCollectionWrapperModel;
import fr.openwide.core.wicket.more.markup.html.select2.util.DropDownChoiceWidth;
import fr.openwide.core.wicket.more.markup.html.select2.util.IDropDownChoiceWidth;
import fr.openwide.core.wicket.more.markup.html.select2.util.Select2Utils;
public class GenericSelect2AjaxDropDownMultipleChoice<T> extends Select2MultipleChoice<T> {
private static final long serialVersionUID = 6355575209286187233L;
private IDropDownChoiceWidth width = DropDownChoiceWidth.AUTO;
protected <C extends Collection<T>> GenericSelect2AjaxDropDownMultipleChoice(
String id, IModel<C> model, Supplier<? extends C> collectionSupplier, ISelect2AjaxAdapter<T> adapter) {
super(id, new ConcreteCollectionToCollectionWrapperModel<T, C>(model, collectionSupplier), adapter);
fillSelect2Settings(getSettings());
}
@Override
protected void onInitialize() {
super.onInitialize();
add(new AttributeModifier("style", new LoadableDetachableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
return "width: " + width.getWidth();
}
}) {
private static final long serialVersionUID = 1L;
@Override
public boolean isEnabled(Component component) {
return width != null;
}
});
}
@Override
protected void onConfigure() {
super.onConfigure();
if (isRequired()) {
Select2Utils.setRequiredSettings(getSettings());
}
}
protected void fillSelect2Settings(Select2Settings settings) {
Select2Utils.setDefaultAjaxSettings(settings);
}
public GenericSelect2AjaxDropDownMultipleChoice<T> setWidth(IDropDownChoiceWidth width) {
this.width = width;
return this;
}
}