package fr.openwide.core.wicket.more.markup.html.select2;
import java.util.List;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.string.AppendingStringBuffer;
import org.apache.wicket.util.string.Strings;
public abstract class GenericSelect2GroupDropDownSingleChoice<T> extends GenericSelect2DropDownSingleChoice<T> {
private static final long serialVersionUID = 8581582499159251418L;
private T last;
private boolean grouped = true;
protected GenericSelect2GroupDropDownSingleChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choicesModel, IChoiceRenderer<? super T> renderer) {
super(id, model, choicesModel, renderer);
}
private boolean isLast(int index) {
return index - 1 == getChoices().size();
}
private boolean isFirst(int index) {
return index == 0;
}
protected abstract boolean isNewGroup(T current, T last);
protected abstract String getGroupLabel(T current);
@Override
protected void appendOptionHtml(AppendingStringBuffer buffer, T choice, int index, String selected) {
if (grouped) {
if (last == null || isNewGroup(choice, last)) {
if (!isFirst(index)) {
buffer.append("</optgroup>");
}
buffer.append("<optgroup label='");
buffer.append(Strings.escapeMarkup(getGroupLabel(choice)));
buffer.append("'>");
}
super.appendOptionHtml(buffer, choice, index, selected);
if (isLast(index)) {
buffer.append("</optgroup>");
}
last = choice;
} else {
super.appendOptionHtml(buffer, choice, index, selected);
}
}
@Override
protected void onAfterRender() {
super.onAfterRender();
last = null;
}
public boolean isGrouped() {
return grouped;
}
public void setGrouped(boolean grouped) {
this.grouped = grouped;
}
}