/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.webui.servlet; import org.apache.commons.lang.StringUtils; import org.dspace.authorize.AuthorizeException; import org.dspace.content.DSpaceObject; import org.dspace.core.Context; import org.dspace.handle.HandleManager; import org.dspace.usage.UsageEvent; import org.dspace.usage.UsageSearchEvent; import org.dspace.utils.DSpace; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; import java.util.Arrays; /** * Every time a user clicks on a search result he will be redirected through this servlet * this servlet will retrieve all query information & store this for the search statistics * Once everything has been stored the user will be * redirected to the dso he clicked on (indicated by the redirectUrl parameter) * * @author Kevin Van de Velde (kevin at atmire dot com) * @author Ben Bosman (ben at atmire dot com) * @author Mark Diggory (markd at atmire dot com) */ public class SearchResultLogServlet extends DSpaceServlet{ @Override protected void doDSPost(Context context, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, AuthorizeException { String redirectUrl = request.getParameter("redirectUrl"); String scopeHandle = request.getParameter("scope"); DSpaceObject scope = HandleManager.resolveToObject(context, scopeHandle); String resultHandle = StringUtils.substringAfter(redirectUrl, "/handle/"); DSpaceObject result = HandleManager.resolveToObject(context, resultHandle); //Fire an event to log our search result UsageSearchEvent searchEvent = new UsageSearchEvent( UsageEvent.Action.SEARCH, request, context, result, Arrays.asList(request.getParameterValues("query")), scope); if(!StringUtils.isBlank(request.getParameter("rpp"))){ searchEvent.setRpp(Integer.parseInt(request.getParameter("rpp"))); } if(!StringUtils.isBlank(request.getParameter("sort_by"))){ searchEvent.setSortBy(request.getParameter("sort_by")); } if(!StringUtils.isBlank(request.getParameter("order"))){ searchEvent.setSortOrder(request.getParameter("order")); } if(!StringUtils.isBlank(request.getParameter("page"))){ searchEvent.setPage(Integer.parseInt(request.getParameter("page"))); } new DSpace().getEventService().fireEvent( searchEvent); response.sendRedirect(redirectUrl); } }