package com.limegroup.gnutella.http; import java.io.IOException; import java.io.OutputStream; /** * Type-safe enum for HTTP request methods, as specified in RFC 2616. * The only required methods for HTTP 1.1 compliance are GET and HEAD. */ public abstract class HTTPRequestMethod { /** * Constant for the name of the HTTP request method, in uppercase. */ private final String METHOD_NAME; /** * Constructor creates a new <tt>HTTPRequestMethod</tt> with the * specified indentifying string. * * @param methodName the http request method as a string */ private HTTPRequestMethod(String methodName) { // store the method name in upper case to make string // comparisons easier METHOD_NAME = methodName.toUpperCase(); } /** * Abstract method for writing the HTTP response based on the HTTP * request method. * * @param response the <tt>HTTPMessage</tt> instance that handles * writing the actual message * @param os the <tt>OutputStream</tt> to write to * @throws <tt>IOException</tt> if there was an IO error writing * the response * @throws <tt>NullPointerException</tt> if either the <tt>response</tt> * or the <tt>os</tt> arguments are <tt>null</tt> */ public abstract void writeHttpResponse(HTTPMessage response, OutputStream os) throws IOException; /** * Constant for the "GET" request method. */ public static final HTTPRequestMethod GET = new HTTPRequestMethod("GET") { public void writeHttpResponse(HTTPMessage response, OutputStream os) throws IOException { if(response == null) { throw new NullPointerException ("cannot write null response object"); } else if(os == null) { throw new NullPointerException ("cannot write to null output stream"); } response.writeMessageHeaders(os); response.writeMessageBody(os); os.flush(); } }; /** * Constant for the "HEAD" request method. */ public static final HTTPRequestMethod HEAD = new HTTPRequestMethod("HEAD") { public void writeHttpResponse(HTTPMessage response, OutputStream os) throws IOException { if(response == null) { throw new NullPointerException ("cannot write null response object"); } else if(os == null) { throw new NullPointerException ("cannot write to null output stream"); } response.writeMessageHeaders(os); os.flush(); } }; // overrides Object.toString to report more information public String toString() { return "HTTPRequestMethod: "+METHOD_NAME; } }