package fr.openwide.core.wicket.more.markup.html.form; import static fr.openwide.core.wicket.more.property.WicketMorePropertyIds.AUTOCOMPLETE_LIMIT; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import fr.openwide.core.spring.property.service.IPropertyService; import fr.openwide.core.wicket.more.link.descriptor.generator.IPageLinkGenerator; public abstract class AbstractQuickSearchComponent<T> extends AutocompleteAjaxComponent<T> { private static final long serialVersionUID = -2026928290852503475L; @SpringBean private IPropertyService propertyService; private final IPageLinkGenerator ficheLinkGenerator; public AbstractQuickSearchComponent(String id, final IModel<T> quickSearchModel, IChoiceRenderer<? super T> choiceRenderer, final IPageLinkGenerator ficheLinkGenerator) { super(id, quickSearchModel, choiceRenderer); this.ficheLinkGenerator = ficheLinkGenerator; setAutoUpdate(true); getAutocompleteField() .setLabel(new ResourceModel("common.quickAccess")) .add(new LabelPlaceholderBehavior()); } @Override protected void onDetach() { super.onDetach(); ficheLinkGenerator.detach(); } @Override public boolean isAutoUpdate() { return true; } @Override protected void onUpdate(AjaxRequestTarget target) { super.onUpdate(target); if (getModelObject() != null) { try { ficheLinkGenerator.setResponsePage(); } finally { setModelObject(null); } } } @Override public List<T> getValues(String term) { return searchAutocomplete(term, propertyService.get(AUTOCOMPLETE_LIMIT), 0); } protected abstract List<T> searchAutocomplete(String term, int limit, int offset); @Override public T getValueOnSearchFail(String input) { return null; } public AbstractQuickSearchComponent<T> labelModel(IModel<String> labelModel) { getAutocompleteField().setLabel(labelModel); return this; } }