/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.webclient.repository;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.openrdf.http.webclient.SessionKeys;
import org.openrdf.http.webclient.server.Server;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.http.HTTPRepository;
import org.openrdf.repository.manager.RepositoryInfo;
public class RepositorySelectionInterceptor implements HandlerInterceptor {
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception e)
{
HttpSession session = request.getSession(true);
session.removeAttribute(SessionKeys.REPOSITORY_EXCEPTION_KEY);
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView mav)
{
// do nothing
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
boolean result = true;
HttpSession session = request.getSession(true);
RepositoryInfo repoInfo = (RepositoryInfo)session.getAttribute(SessionKeys.REPOSITORY_INFO_KEY);
HTTPRepository repo = (HTTPRepository)session.getAttribute(SessionKeys.REPOSITORY_KEY);
if (request.getRequestURI().endsWith("/repository/overview.view")) {
String id = request.getParameter("id");
if (id != null) {
Server server = (Server)session.getAttribute(SessionKeys.SERVER_KEY);
repo = (HTTPRepository)server.getRepositoryManager().getRepository(id);
try {
repo.initialize();
repoInfo = server.getRepositoryManager().getRepositoryInfo(id);
}
catch (RepositoryException e) {
session.setAttribute(SessionKeys.REPOSITORY_EXCEPTION_KEY, e);
}
session.setAttribute(SessionKeys.REPOSITORY_KEY, repo);
session.setAttribute(SessionKeys.REPOSITORY_INFO_KEY, repoInfo);
}
}
if (repo == null) {
result = false;
response.sendRedirect(request.getContextPath() + "/server/overview.view");
}
return result;
}
}