/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.webclient.server;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.openrdf.http.webclient.SessionKeys;
public class ServerSelectionInterceptor implements HandlerInterceptor {
final Logger logger = LoggerFactory.getLogger(this.getClass());
private String defaultServerContextName;
private String serverSelectionView;
public void setServerSelectionView(String serverSelectionView) {
this.serverSelectionView = serverSelectionView;
}
/**
* @return Returns the defaultWebapp.
*/
public String getDefaultServerContextName() {
return defaultServerContextName;
}
/**
* @param defaultWebapp The defaultWebapp to set.
*/
public void setDefaultServerContextName(String defaultWebapp) {
this.defaultServerContextName = defaultWebapp;
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception e)
throws Exception
{
// do nothing
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView mav)
throws Exception
{
// do nothing
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
boolean result = true;
HttpSession session = request.getSession(true);
Server server = (Server)session.getAttribute(SessionKeys.SERVER_KEY);
if (server == null) {
logger.debug("No server found, attempting to set from cookie...");
ServerSelection serverSelection = new ServerSelection();
serverSelection.setDefaultServerContextName(getDefaultServerContextName());
serverSelection.setDefaultServerURL(request);
serverSelection.setFromCookies(request);
if (serverSelection.isRemember()) {
if (serverSelection.getLocation() != null) {
logger.debug("Setting server from cookie: {}", serverSelection.getLocation());
server = new Server(serverSelection.getLocation());
session.setAttribute(SessionKeys.SERVER_KEY, server);
}
}
}
if (server == null) {
logger.info("No server found, redirecting to selection form...");
result = false;
response.sendRedirect(request.getContextPath() + serverSelectionView);
}
return result;
}
}