/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ /** * */ package org.jabylon.rest.ui.navbar; import java.io.Serializable; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.form.StatelessForm; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.Url; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.eclipse.emf.common.util.URI; import org.jabylon.properties.Resolvable; import org.jabylon.rest.ui.wicket.BasicPanel; import org.jabylon.rest.ui.wicket.PanelFactory; import org.jabylon.rest.ui.wicket.pages.SearchPage; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) * */ public class SearchPanel<T> extends BasicPanel<T> { private static final long serialVersionUID = 1L; public SearchPanel(String id, IModel<T> object, PageParameters parameters) { super(id, object, parameters); add(new SearchForm("form")); //$NON-NLS-1$ setVersioned(false); } public static class SearchPanelFactory implements PanelFactory<Object>, Serializable { private static final long serialVersionUID = 1L; @Override public Panel createPanel(PageParameters params, IModel<Object> input, String id) { return new SearchPanel<Object>(id, input, params); } } public class SearchForm extends StatelessForm<Void> { private static final long serialVersionUID = 1L; private String searchString; public SearchForm(String id) { super(id); TextField<String> field = new TextField<String>("searchfield", new PropertyModel<String>(this, "searchString")); //$NON-NLS-1$ //$NON-NLS-2$ StringResourceModel placeholder = getPlaceholder(SearchPanel.this.getModel()); field.add(new AttributeModifier("placeholder", placeholder)); //$NON-NLS-1$ add(field); } public void onSubmit() { Url url = getRequest().getUrl(); URI uri = URI.createURI(url.getPath(),false); PageParameters params = new PageParameters(); params.add(SearchPage.SEARCH_TERM, getSearchString()); String scope = getPageParameters().get(SearchPage.SCOPE).toString(uri.toString()); //if there already is a scope, use it. Otherwise use the current uri params.add(SearchPage.SCOPE, scope); setResponsePage(SearchPage.class, params); } public String getSearchString() { return searchString; } public void setSearchString(String searchString) { this.searchString = searchString; } private StringResourceModel getPlaceholder(IModel<T> model) { StringResourceModel plainModel = new StringResourceModel("SearchPanel.search.placeholder", SearchPanel.this, null); //$NON-NLS-1$ if (model == null) return plainModel; T object = model.getObject(); if (object instanceof Resolvable<?, ?>) { Resolvable<?, ?> r = (Resolvable<?, ?>) object; if (r.getName() != null && !r.getName().isEmpty()) { return new StringResourceModel("SearchPanel.scoped.search.placeholder", SearchPanel.this, null,"",r.getName()); //$NON-NLS-1$ } } return plainModel; } } }