/* * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package wicket.contrib.woogle.pages; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import wicket.PageParameters; import wicket.contrib.woogle.WoogleApplication; import wicket.contrib.woogle.WoogleSession; import wicket.contrib.woogle.components.SearchResult; import wicket.contrib.woogle.domain.Search; import wicket.markup.html.WebComponent; import wicket.markup.html.basic.Label; import wicket.markup.html.form.Button; import wicket.markup.html.form.Form; import wicket.markup.html.form.TextField; import wicket.markup.html.link.BookmarkablePageLink; import wicket.model.CompoundPropertyModel; import wicket.model.Model; import wicket.util.string.StringValueConversionException; import wicket.util.string.Strings; public class SearchPage extends WoogleBasePage { private static final long serialVersionUID = 1L; /** Logging */ private static final Log log = LogFactory.getLog(SearchPage.class); public SearchPage(PageParameters parameters) { // Check for search criterias in the parameters String searchString = parameters.getString("search"); if (Strings.isEmpty(searchString)) { searchString = null; } int page = 0; try { page = parameters.getInt("page"); } catch (StringValueConversionException e) { // Ok, but we log it. log.debug("'page' parameter couldn't be converted to an int", e); } final Search search = new Search(searchString); // Search form add(new SearchForm("searchForm", search)); // Stats add(new Label("indexPages", ""+WoogleApplication.get().getIndexPages()).setRenderBodyOnly(true)); add(new BookmarkablePageLink("addSite", AddSitePage.class)); // Result place holder if (searchString == null) { // add(new TopSearches("result").setOutputMarkupId(true)); add(new WebComponent("result").setVisible(false)); } else { // Save the search String sessionId = WoogleSession.get().getId(); search.setSessionId(sessionId); search.setSearchTime(new Date()); WoogleApplication.get().getSearchDAO().save(search); add(new SearchResult("result", searchString, page).setOutputMarkupId(true)); } } private class SearchForm extends Form { private static final long serialVersionUID = 1L; private Search search; public SearchForm(String id, Search search) { super(id, new CompoundPropertyModel(search)); this.search = search; add(new TextField("search")); add(new Button("searchButton", new Model("Search"))); } @Override protected void onSubmit() { // Save the search String sessionId = WoogleSession.get().getId(); search.setSessionId(sessionId); search.setSearchTime(new Date()); WoogleApplication.get().getSearchDAO().save(search); // Redirect to search result page. // We use page parameters to get a bookmarkable url PageParameters parameters = new PageParameters(); parameters.add("search", search.getSearch()); setResponsePage(SearchPage.class, parameters); } } }