package hu.sch.web.common; import hu.sch.web.kp.search.SearchResultsPage; import java.util.ArrayList; import java.util.List; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.StatelessForm; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; /** * Minden {@link PekPage} sablonnak implementálnia kell a {@link PekPage#getHeaderPanel(java.lang.String)} * metódust, amennyiben szükség lesz navigációs "linksorra", célszerű ebből a * panelből származtatni a visszaadott {@link Panel}t, és a konstruktor végén * meghívni a {@link HeaderPanel#createLinks()} metódust. (Azért kell explicit * meghívni, mert az egyes linkek láthatósága még nem ismert az ősosztály * konstruktorának meghívásakor.) * * @author messo * @since 2.4 */ public abstract class HeaderPanel extends Panel { private String searchTerm; private String searchType = "felhasználó"; public HeaderPanel(String id) { super(id); createSearchBar(); } private void createSearchBar() { final Form<Void> searchForm = new StatelessForm<Void>("searchForm") { @Override protected void onSubmit() { if (searchType == null || searchTerm == null) { super.getSession().error("Hibás keresési feltétel!"); throw new RestartResponseException(getApplication().getHomePage()); } if (searchTerm.length() < 3) { super.getSession().error("Túl rövid keresési feltétel!"); throw new RestartResponseException(getApplication().getHomePage()); } PageParameters params = new PageParameters(); params.add("type", ((searchType.equals("felhasználó")) ? "user" : "group")); params.add("key", searchTerm); setResponsePage(SearchResultsPage.class, params); } }; DropDownChoice<String> searchTypeDdc = new DropDownChoice<String>("searchDdc", new PropertyModel<String>(this, "searchType"), new LoadableDetachableModel<List<? extends String>>() { @Override protected List<? extends String> load() { List<String> ret = new ArrayList<String>(); ret.add("felhasználó"); ret.add("kör"); return ret; } }); searchTypeDdc.setNullValid(false); searchForm.add(searchTypeDdc); searchForm.add(new TextField<String>("searchField", new PropertyModel<String>(this, "searchTerm"))); add(searchForm); } /** * Létrehozza a navigációs linksort, meghívva az implementált {@link HeaderPanel#getHeaderLinks()} * metódust. */ protected void createLinks() { add(new ListView<HeaderLink>("menu", getHeaderLinks()) { @Override protected void populateItem(ListItem<HeaderLink> item) { HeaderLink hl = item.getModelObject(); item.add(new BookmarkablePageLink("menuLink", hl.getPageClass()).add(new Label("linkText", hl.getText()))); } }); } protected abstract List<HeaderLink> getHeaderLinks(); }