/******************************************************************************* * Copyright (c) 2010-2014 SAP AG 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 * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.view.internal.filter; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.apache.commons.lang.StringUtils; import org.eclipse.skalli.commons.Statistics; import org.eclipse.skalli.model.Project; import org.eclipse.skalli.model.User; import org.eclipse.skalli.services.search.QueryParseException; import org.eclipse.skalli.services.search.SearchResult; import org.eclipse.skalli.services.search.SearchUtils; import org.eclipse.skalli.view.Consts; public class SearchFilter extends AbstractSearchFilter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String view = request.getParameter(Consts.PARAM_VIEW); if (StringUtils.equals(view, Consts.PARAM_VALUE_VIEW_HIERARCHY)) { FilterUtil.forward(request, response, Consts.URL_HIERARCHY); return; } super.doFilter(request, response, chain); } @Override protected boolean showNearestProjects(User user, ServletRequest request, ServletResponse response) { String userquery = request.getParameter(Consts.PARAM_USER); return userquery == null || user == null || !userquery.equals(user.getUserId()); } @Override protected SearchResult<Project> getSearchHits(User user, ServletRequest request, ServletResponse response, int start, int count) throws IOException, ServletException { SearchQuery searchQuery = null; SearchResult<Project> result = null; try { searchQuery = new SearchQuery(request); searchQuery.setPagingInfo(start, count); result = SearchUtils.searchProjects(searchQuery); } catch (Exception e) { FilterUtil.handleException(request, response, e); return new SearchResult<Project>("*"); //$NON-NLS-1$ } Statistics.getDefault().trackSearch(user.getUserId(), result.getQueryString(), result.getResultCount(), result.getDuration()); request.setAttribute(Consts.ATTRIBUTE_QUERY, searchQuery.getQuery()); request.setAttribute(Consts.ATTRIBUTE_USERQUERY, searchQuery.getUser()); request.setAttribute(Consts.ATTRIBUTE_TAGQUERY, searchQuery.getTag()); return result; } private static class SearchQuery extends org.eclipse.skalli.services.search.SearchQuery { public SearchQuery(ServletRequest request) throws QueryParseException { super(asMap(request)); } private static Map<String, String> asMap(ServletRequest request) { HashMap<String, String> params = new HashMap<String, String>(); for (String key: PARAMS) { params.put(key, request.getParameter(key)); } return params; } } }