/** * (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.wicket.pages; import javax.inject.Inject; import javax.servlet.http.HttpServletResponse; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.string.StringValue; import org.jabylon.index.properties.QueryService; import org.jabylon.index.properties.SearchResult; import org.jabylon.rest.ui.wicket.panels.SearchResultPanel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) * */ public class SearchPage extends GenericPage<String> { public static final String MAX_HITS = "m"; public static final String SEARCH_TERM = "t"; public static final String SCOPE = "s"; private static final long serialVersionUID = 1L; @Inject private QueryService queryService; private static final Logger logger = LoggerFactory.getLogger(SearchPage.class); public SearchPage(PageParameters parameters) { super(parameters); setStatelessHint(true); } @SuppressWarnings("rawtypes") @Override protected void construct() { super.construct(); String term = getSearchTerm(getPageParameters()); String scope = getSearchScope(getPageParameters()); if(term==null) add(new Label("content",new StringResourceModel("no.term.entered.message", this, null))); else { SearchResult result = search(term,scope, getPageParameters().get(MAX_HITS).toInt(50)); add(new SearchResultPanel("content",result,getPageParameters())); } } private SearchResult search(String term, String scope, int maxHits) { try { return queryService.search(term, scope); } catch (RuntimeException e) { throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } private String getSearchTerm(PageParameters params) { StringValue value = params.get(SEARCH_TERM); if(value.isEmpty()) return null; return value.toString(); } private String getSearchScope(PageParameters params) { StringValue value = params.get(SCOPE); if(value.isEmpty()) return null; return value.toString(); } @Override protected IModel<String> createModel(PageParameters params) { StringValue value = params.get("uri"); if(value.isEmpty()) return null; return Model.of(value.toString()); } @Override public boolean isBookmarkable() { return true; } }