package com.evolveum.midpoint.gui.api.component.autocomplete;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.convert.IConverter;
import com.evolveum.midpoint.gui.api.component.path.ItemPathDto;
import com.evolveum.midpoint.prism.ItemDefinition;
public class AutoCompleteItemDefinitionPanel extends AbstractAutoCompletePanel {
private static final long serialVersionUID = 1L;
private static final String ID_INPUT = "input";
public AutoCompleteItemDefinitionPanel(String id, final IModel<ItemDefinition<?>> model) {
super(id);
initLayout(model);
}
private void initLayout(final IModel<ItemDefinition<?>> model) {
final Model<String> itemDefinitionAsStringModel = new Model<String>(null);
AutoCompleteTextField<String> input = new AutoCompleteTextField<String>(
ID_INPUT, itemDefinitionAsStringModel, String.class, createAutoCompleteSettings()) {
private static final long serialVersionUID = 1L;
@Override
protected Iterator<String> getChoices(String input) {
List<String> defsAsString = new ArrayList<>();
for (ItemDefinition<?> def : listChoices(input).values()) {
defsAsString.add(def.getName().getLocalPart());
}
return defsAsString.iterator();
}
@Override
protected void onConfigure() {
itemDefinitionAsStringModel.setObject(null);
}
};
input.add(new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
String newValue = itemDefinitionAsStringModel.getObject();
if (StringUtils.isNotBlank(newValue)){
ItemDefinition<?> def = listChoices("").get(newValue);
if (def != null) {
model.setObject(def);
}
}
}
});
add(input);
}
protected Map<String, ItemDefinition<?>> listChoices(String input){
return new HashMap<String, ItemDefinition<?>>();
}
@Override
public FormComponent<?> getBaseFormComponent() {
return (FormComponent<?>) get(ID_INPUT);
}
}