* Made CaseIgnoringComparator a singleton

* Changed HttpCookieDecoder to return a Map instead of a Set
* Optimized imports
This commit is contained in:
Trustin Lee 2009-02-20 12:41:59 +00:00
parent fea082e689
commit df05ba3733
7 changed files with 34 additions and 39 deletions

View File

@ -23,7 +23,6 @@ package org.jboss.netty.example.http;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.jboss.netty.buffer.ChannelBuffer;
@ -36,15 +35,15 @@ import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpChunk;
import org.jboss.netty.handler.codec.http.HttpCookie;
import org.jboss.netty.handler.codec.http.HttpCookieDecoder;
import org.jboss.netty.handler.codec.http.HttpCookieEncoder;
import org.jboss.netty.handler.codec.http.HttpHeaders;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;
import org.jboss.netty.handler.codec.http.QueryStringDecoder;
import org.jboss.netty.handler.codec.http.HttpCookieDecoder;
import org.jboss.netty.handler.codec.http.HttpCookie;
import org.jboss.netty.handler.codec.http.HttpCookieEncoder;
/**
* @author The Netty Project (netty-dev@lists.jboss.org)
@ -131,16 +130,18 @@ public class HttpRequestHandler extends SimpleChannelHandler {
response.setContent(buf);
response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/plain; charset=UTF-8");
response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(buf.readableBytes()));
HttpCookieDecoder cookieDecoder = new HttpCookieDecoder();
Set<HttpCookie> cookieSet = cookieDecoder.decode(request.getHeader(HttpHeaders.Names.COOKIE));
if(cookieSet != null) {
//lets reset the cookies
Map<String, HttpCookie> cookies = cookieDecoder.decode(request.getHeader(HttpHeaders.Names.COOKIE));
if(!cookies.isEmpty()) {
// Reset the cookies if necessary.
HttpCookieEncoder cookieEncoder = new HttpCookieEncoder();
for (HttpCookie cookie : cookieSet) {
for (HttpCookie cookie : cookies.values()) {
cookieEncoder.addCookie(cookie);
}
response.addHeader(HttpHeaders.Names.SET_COOKIE, cookieEncoder.encode());
}
// Write the response.
ChannelFuture future = e.getChannel().write(response);

View File

@ -21,14 +21,11 @@
*/
package org.jboss.netty.handler.codec.http;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Collection;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.util.CaseIgnoringComparator;
@ -42,10 +39,9 @@ import org.jboss.netty.util.CaseIgnoringComparator;
* @version $Rev$, $Date$
*/
public class DefaultHttpMessage implements HttpMessage {
private final static Comparator<String> caseIgnoringComparator = new CaseIgnoringComparator();
private final HttpVersion version;
private final Map<String, List<String>> headers = new TreeMap<String, List<String>>(caseIgnoringComparator);
private final Map<String, List<String>> headers = new TreeMap<String, List<String>>(CaseIgnoringComparator.INSTANCE);
private ChannelBuffer content;
protected DefaultHttpMessage(final HttpVersion version) {

View File

@ -21,8 +21,10 @@
*/
package org.jboss.netty.handler.codec.http;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.TreeMap;
import org.jboss.netty.util.CaseIgnoringComparator;
/**
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
@ -32,13 +34,15 @@ public class HttpCookieDecoder {
private final static String equals = "=";
public Set<HttpCookie> decode(String header) {
Set<HttpCookie> cookies = new HashSet<HttpCookie>();
public Map<String, HttpCookie> decode(String header) {
Map<String, HttpCookie> cookies = new TreeMap<String, HttpCookie>(CaseIgnoringComparator.INSTANCE);
String[] split = header.split(semicolon);
for (String s : split) {
String[] cookie = s.split(equals);
if(cookie != null && cookie.length == 2) {
cookies.add(new HttpCookie(cookie[0].trim(), cookie[1].trim()));
String name = cookie[0].trim();
String value = cookie[1].trim();
cookies.put(name, new HttpCookie(name, value));
}
}
return cookies;

View File

@ -21,29 +21,18 @@
*/
package org.jboss.netty.handler.codec.http;
import org.jboss.netty.util.CaseIgnoringComparator;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.COLON;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.SP;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.EQUALS;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.SEMICOLON;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.CRLF;
import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;
import java.util.Comparator;
import java.util.Collection;
import org.jboss.netty.util.CaseIgnoringComparator;
/**
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
*/
public class HttpCookieEncoder {
private final static String semicolon = ";";
private final static String equals = "=";
private final static Comparator<String> caseIgnoringComparator = new CaseIgnoringComparator();
private final Map<String, HttpCookie> cookies = new TreeMap<String, HttpCookie>(caseIgnoringComparator);
private final Map<String, HttpCookie> cookies = new TreeMap<String, HttpCookie>(CaseIgnoringComparator.INSTANCE);
public void addCookie(String name, String val) {
cookies.put(name, new HttpCookie(name, val));
@ -61,9 +50,9 @@ public class HttpCookieEncoder {
}
for (String cookieName : cookieNames) {
sb.append(cookieName);
sb.append(equals);
sb.append((char) HttpCodecUtil.EQUALS);
sb.append(cookies.get(cookieName).getValue());
sb.append(semicolon);
sb.append((char) HttpCodecUtil.SEMICOLON);
}
return sb.toString();
}

View File

@ -23,7 +23,6 @@ package org.jboss.netty.handler.codec.http;
import java.util.List;
import java.util.Set;
import java.util.Collection;
import org.jboss.netty.buffer.ChannelBuffer;

View File

@ -24,7 +24,6 @@ package org.jboss.netty.handler.codec.http;
import static org.jboss.netty.buffer.ChannelBuffers.*;
import static org.jboss.netty.handler.codec.http.HttpCodecUtil.*;
import java.util.Collection;
import java.util.List;
import java.util.Set;

View File

@ -26,16 +26,23 @@ import java.util.Comparator;
/**
* @author <a href="mailto:andy.taylor@jboss.org">Andy Taylor</a>
* @author Trustin Lee (tlee@redhat.com)
*/
public class CaseIgnoringComparator implements Comparator<String>, Serializable {
public final class CaseIgnoringComparator implements Comparator<String>, Serializable {
private static final long serialVersionUID = 4582133183775373862L;
public CaseIgnoringComparator() {
public static final CaseIgnoringComparator INSTANCE = new CaseIgnoringComparator();
private CaseIgnoringComparator() {
super();
}
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
private Object readResolve() {
return INSTANCE;
}
}