01: /*
02: * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
03: *
04: * Licensed under the Aduna BSD-style license.
05: */
06: package org.openrdf.http.webclient.repository;
07:
08: import javax.servlet.http.HttpServletRequest;
09: import javax.servlet.http.HttpServletResponse;
10: import javax.servlet.http.HttpSession;
11:
12: import org.springframework.web.servlet.HandlerInterceptor;
13: import org.springframework.web.servlet.ModelAndView;
14:
15: import org.openrdf.http.webclient.SessionKeys;
16: import org.openrdf.http.webclient.server.Server;
17: import org.openrdf.repository.RepositoryException;
18: import org.openrdf.repository.http.HTTPRepository;
19: import org.openrdf.repository.manager.RepositoryInfo;
20:
21: public class RepositorySelectionInterceptor implements
22: HandlerInterceptor {
23:
24: public void afterCompletion(HttpServletRequest request,
25: HttpServletResponse response, Object handler, Exception e) {
26: HttpSession session = request.getSession(true);
27: session.removeAttribute(SessionKeys.REPOSITORY_EXCEPTION_KEY);
28: }
29:
30: public void postHandle(HttpServletRequest request,
31: HttpServletResponse response, Object handler,
32: ModelAndView mav) {
33: // do nothing
34: }
35:
36: public boolean preHandle(HttpServletRequest request,
37: HttpServletResponse response, Object handler)
38: throws Exception {
39: boolean result = true;
40:
41: HttpSession session = request.getSession(true);
42: RepositoryInfo repoInfo = (RepositoryInfo) session
43: .getAttribute(SessionKeys.REPOSITORY_INFO_KEY);
44: HTTPRepository repo = (HTTPRepository) session
45: .getAttribute(SessionKeys.REPOSITORY_KEY);
46:
47: if (request.getRequestURI().endsWith(
48: "/repository/overview.view")) {
49: String id = request.getParameter("id");
50: if (id != null) {
51: Server server = (Server) session
52: .getAttribute(SessionKeys.SERVER_KEY);
53: repo = (HTTPRepository) server.getRepositoryManager()
54: .getRepository(id);
55: try {
56: repo.initialize();
57: repoInfo = server.getRepositoryManager()
58: .getRepositoryInfo(id);
59: } catch (RepositoryException e) {
60: session.setAttribute(
61: SessionKeys.REPOSITORY_EXCEPTION_KEY, e);
62: }
63: session.setAttribute(SessionKeys.REPOSITORY_KEY, repo);
64: session.setAttribute(SessionKeys.REPOSITORY_INFO_KEY,
65: repoInfo);
66: }
67: }
68:
69: if (repo == null) {
70: result = false;
71: response.sendRedirect(request.getContextPath()
72: + "/server/overview.view");
73: }
74:
75: return result;
76: }
77: }
|