/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.webclient.server;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class ServerSelection {
public static final String DEFAULT = "default";
public static final String OTHER = "other";
static final String COOKIE_PREFIX = "server.select";
static final String COOKIE_REMEMBER = "remember";
static final String COOKIE_URL = "url";
static final String COOKIE_TYPE = "type";
private String type = DEFAULT;
private String location;
private String defaultServerURL;
private boolean remember;
private String defaultServerContextName;
/**
* @return Returns the defaultWebapp.
*/
public String getDefaultServerContextName() {
return defaultServerContextName;
}
/**
* @param defaultWebapp The defaultWebapp to set.
*/
public void setDefaultServerContextName(String defaultWebapp) {
this.defaultServerContextName = defaultWebapp;
}
public String getLocation() {
String result = location;
if (getType().equals(DEFAULT)) {
result = defaultServerURL;
}
return result;
}
public void setLocation(String location) {
this.location = location;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isRemember() {
return remember;
}
public void setRemember(boolean remember) {
this.remember = remember;
}
public String getDefaultServerURL() {
return defaultServerURL;
}
public void setDefaultServerURL(String localURL) {
this.defaultServerURL = localURL;
}
void setDefaultServerURL(HttpServletRequest request) {
StringBuilder result = new StringBuilder();
try {
URL requestURL = new URL(request.getRequestURL().toString());
String protocol = requestURL.getProtocol();
result.append(protocol);
result.append("://");
result.append(request.getServerName());
// append port if different from default for protocol
if (!(protocol.equals("http") && request.getLocalPort() == 80)
&& !(protocol.equals("https") && request.getLocalPort() == 443))
{
result.append(":");
result.append(request.getLocalPort());
}
result.append(getDefaultServerContextName());
}
catch (MalformedURLException e) {
// never happens
e.printStackTrace();
}
setDefaultServerURL(result.toString());
}
void setFromCookies(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
if (cookieName.startsWith(COOKIE_PREFIX)) {
if (cookieName.endsWith(COOKIE_URL)) {
setLocation(cookieValue);
}
else if (cookieName.endsWith(COOKIE_TYPE)) {
setType(cookieValue);
}
else if (cookieName.endsWith(COOKIE_REMEMBER)) {
setRemember(Boolean.parseBoolean(cookieValue));
}
}
}
}
}
}