Return-Path: Delivered-To: apmail-jakarta-httpcomponents-commits-archive@www.apache.org Received: (qmail 72824 invoked from network); 25 Aug 2007 13:20:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 25 Aug 2007 13:20:53 -0000 Received: (qmail 8059 invoked by uid 500); 25 Aug 2007 13:20:50 -0000 Delivered-To: apmail-jakarta-httpcomponents-commits-archive@jakarta.apache.org Received: (qmail 8043 invoked by uid 500); 25 Aug 2007 13:20:50 -0000 Mailing-List: contact httpcomponents-commits-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: httpcomponents-dev@jakarta.apache.org Delivered-To: mailing list httpcomponents-commits@jakarta.apache.org Received: (qmail 8034 invoked by uid 99); 25 Aug 2007 13:20:50 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Aug 2007 06:20:50 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Aug 2007 13:20:45 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C8FFE1A9832; Sat, 25 Aug 2007 06:20:24 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r569662 - in /jakarta/httpcomponents/httpcore/trunk: module-main/src/main/java/org/apache/http/impl/ module-main/src/main/java/org/apache/http/impl/io/ module-main/src/main/java/org/apache/http/message/ module-nio/src/main/java/org/apache/h... Date: Sat, 25 Aug 2007 13:20:23 -0000 To: httpcomponents-commits@jakarta.apache.org From: rolandw@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20070825132024.C8FFE1A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rolandw Date: Sat Aug 25 06:20:22 2007 New Revision: 569662 URL: http://svn.apache.org/viewvc?rev=569662&view=rev Log: introduced LineFormatter interface Added: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java (with props) jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java (with props) Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/AbstractMessageWriter.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpRequestWriter.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseWriter.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/AbstractMessageWriter.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpRequestWriter.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpResponseWriter.java Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java Sat Aug 25 06:20:22 2007 @@ -105,7 +105,8 @@ protected HttpMessageWriter createRequestWriter( final SessionOutputBuffer buffer, final HttpParams params) { - return new HttpRequestWriter(buffer, params); + //@@@ how to configure the formatter? + return new HttpRequestWriter(buffer, null, params); } protected void init( Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java Sat Aug 25 06:20:22 2007 @@ -105,7 +105,8 @@ protected HttpMessageWriter createResponseWriter( final SessionOutputBuffer buffer, final HttpParams params) { - return new HttpResponseWriter(buffer, params); + //@@@ how to configure the formatter? + return new HttpResponseWriter(buffer, null, params); } protected void init( Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/AbstractMessageWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/AbstractMessageWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/AbstractMessageWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/AbstractMessageWriter.java Sat Aug 25 06:20:22 2007 @@ -39,45 +39,44 @@ import org.apache.http.HttpMessage; import org.apache.http.io.HttpMessageWriter; import org.apache.http.io.SessionOutputBuffer; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BufferedHeader; +import org.apache.http.message.LineFormatter; +import org.apache.http.message.BasicLineFormatter; import org.apache.http.params.HttpParams; import org.apache.http.util.CharArrayBuffer; public abstract class AbstractMessageWriter implements HttpMessageWriter { - private final SessionOutputBuffer sessionBuffer; - private final CharArrayBuffer lineBuf; - - public AbstractMessageWriter(final SessionOutputBuffer buffer, final HttpParams params) { + protected final SessionOutputBuffer sessionBuffer; + protected final CharArrayBuffer lineBuf; + protected final LineFormatter lineFormatter; + + public AbstractMessageWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { super(); if (buffer == null) { throw new IllegalArgumentException("Session input buffer may not be null"); } this.sessionBuffer = buffer; - this.lineBuf = new CharArrayBuffer(128); + this.lineBuf = new CharArrayBuffer(128); + this.lineFormatter = (formatter != null) ? + formatter : BasicLineFormatter.DEFAULT; } - protected abstract void writeHeadLine(CharArrayBuffer lineBuffer, HttpMessage message); + protected abstract void writeHeadLine(HttpMessage message) + throws IOException + ; public void write( final HttpMessage message) throws IOException, HttpException { if (message == null) { throw new IllegalArgumentException("HTTP message may not be null"); } - this.lineBuf.clear(); - writeHeadLine(this.lineBuf, message); - this.sessionBuffer.writeLine(this.lineBuf); + writeHeadLine(message); for (Iterator it = message.headerIterator(); it.hasNext(); ) { Header header = (Header) it.next(); - if (header instanceof BufferedHeader) { - // If the header is backed by a buffer, re-use the buffer - this.sessionBuffer.writeLine(((BufferedHeader)header).getBuffer()); - } else { - this.lineBuf.clear(); - BasicHeader.format(this.lineBuf, header); - this.sessionBuffer.writeLine(this.lineBuf); - } + this.sessionBuffer.writeLine + (lineFormatter.formatHeader(header, this.lineBuf)); } this.lineBuf.clear(); this.sessionBuffer.writeLine(this.lineBuf); Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpRequestWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpRequestWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpRequestWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpRequestWriter.java Sat Aug 25 06:20:22 2007 @@ -31,23 +31,29 @@ package org.apache.http.impl.io; +import java.io.IOException; + import org.apache.http.HttpMessage; import org.apache.http.HttpRequest; import org.apache.http.io.SessionOutputBuffer; -import org.apache.http.message.BasicRequestLine; +import org.apache.http.message.LineFormatter; import org.apache.http.params.HttpParams; import org.apache.http.util.CharArrayBuffer; public class HttpRequestWriter extends AbstractMessageWriter { - public HttpRequestWriter(final SessionOutputBuffer buffer, final HttpParams params) { - super(buffer, params); + public HttpRequestWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { + super(buffer, formatter, params); } - protected void writeHeadLine( - final CharArrayBuffer lineBuffer, - final HttpMessage message) { - BasicRequestLine.format(lineBuffer, ((HttpRequest) message).getRequestLine()); + protected void writeHeadLine(final HttpMessage message) + throws IOException { + + final CharArrayBuffer buffer = lineFormatter.formatRequestLine + (((HttpRequest) message).getRequestLine(), this.lineBuf); + this.sessionBuffer.writeLine(buffer); } } Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseWriter.java Sat Aug 25 06:20:22 2007 @@ -31,23 +31,29 @@ package org.apache.http.impl.io; +import java.io.IOException; + import org.apache.http.HttpMessage; import org.apache.http.HttpResponse; import org.apache.http.io.SessionOutputBuffer; -import org.apache.http.message.BasicStatusLine; +import org.apache.http.message.LineFormatter; import org.apache.http.params.HttpParams; import org.apache.http.util.CharArrayBuffer; public class HttpResponseWriter extends AbstractMessageWriter { - public HttpResponseWriter(final SessionOutputBuffer buffer, final HttpParams params) { - super(buffer, params); + public HttpResponseWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { + super(buffer, formatter, params); } - protected void writeHeadLine( - final CharArrayBuffer lineBuffer, - final HttpMessage message) { - BasicStatusLine.format(lineBuffer, ((HttpResponse) message).getStatusLine()); + protected void writeHeadLine(final HttpMessage message) + throws IOException { + + final CharArrayBuffer buffer = lineFormatter.formatStatusLine + (((HttpResponse) message).getStatusLine(), this.lineBuf); + this.sessionBuffer.writeLine(buffer); } } Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java Sat Aug 25 06:20:22 2007 @@ -150,7 +150,7 @@ * @param buffer the buffer to append to * @param header the header to format */ - public static void format(final CharArrayBuffer buffer, final Header header) { + /*public@@@*/ static void format(final CharArrayBuffer buffer, final Header header) { if (buffer == null) { throw new IllegalArgumentException("String buffer may not be null"); } @@ -167,7 +167,7 @@ /** * @see #format(CharArrayBuffer, Header) */ - public static String format(final Header header) { + /*public@@@*/ static String format(final Header header) { CharArrayBuffer buffer = new CharArrayBuffer(32); format(buffer, header); return buffer.toString(); Added: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java?rev=569662&view=auto ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java (added) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java Sat Aug 25 06:20:22 2007 @@ -0,0 +1,135 @@ +/* + * $HeadURL$ + * $Revision$ + * $Date$ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ + +package org.apache.http.message; + + +import org.apache.http.HttpVersion; +import org.apache.http.RequestLine; +import org.apache.http.StatusLine; +import org.apache.http.Header; +import org.apache.http.util.CharArrayBuffer; + + +/** + * Interface for formatting elements of the HEAD section of an HTTP message. + * This is the complement to {@link LineParser}. + * There are individual methods for formatting a request line, a + * status line, or a header line. The formatting does not include the + * trailing line break sequence CR-LF. + * The formatted lines are returned in memory, the formatter does not depend + * on any specific IO mechanism. + * Instances of this interface are expected to be stateless and thread-safe. + * + * @author Roland Weber + * + * + * + * @version $Revision$ $Date$ + * + * @since 4.0 + */ +public class BasicLineFormatter implements LineFormatter { + + /** + * A default instance of this class, for use as default or fallback. + * Note that {@link BasicLineFormatter} is not a singleton, there can + * be many instances of the class itself and of derived classes. + * The instance here provides non-customized, default behavior. + */ + public final static BasicLineFormatter DEFAULT = new BasicLineFormatter(); + + + + // public default constructor + + + /** + * Obtains a buffer for formatting. + * + * @param buffer a buffer already available, or null + * + * @return the cleared argument buffer if there is one, or + * a new empty buffer that can be used for formatting + */ + protected CharArrayBuffer initBuffer(CharArrayBuffer buffer) { + if (buffer != null) { + buffer.clear(); + } else { + buffer = new CharArrayBuffer(64); + } + return buffer; + } + + + // non-javadoc, see interface LineFormatter + public CharArrayBuffer formatRequestLine(RequestLine reqline, + CharArrayBuffer buffer) { + + CharArrayBuffer result = initBuffer(buffer); + BasicRequestLine.format(result, reqline); //@@@ move code here + return result; + } + + + + // non-javadoc, see interface LineFormatter + public CharArrayBuffer formatStatusLine(StatusLine statline, + CharArrayBuffer buffer) { + CharArrayBuffer result = initBuffer(buffer); + BasicStatusLine.format(result, statline); //@@@ move code here + return result; + } + + + + // non-javadoc, see interface LineFormatter + public CharArrayBuffer formatHeader(Header header, + CharArrayBuffer buffer) { + if (header == null) { + throw new IllegalArgumentException + ("Header must not be null."); + } + CharArrayBuffer result = null; + + if (header instanceof BufferedHeader) { + // If the header is backed by a buffer, re-use the buffer + result = ((BufferedHeader)header).getBuffer(); + } else { + result = initBuffer(buffer); + BasicHeader.format(result, header); //@@@ move code here + } + return result; + + } // formatHeader + + +} // class BasicLineFormatter Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicLineFormatter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java Sat Aug 25 06:20:22 2007 @@ -94,7 +94,7 @@ return buffer.toString(); } - public static void format(final CharArrayBuffer buffer, final RequestLine requestline) { + /*public@@@*/ static void format(final CharArrayBuffer buffer, final RequestLine requestline) { if (buffer == null) { throw new IllegalArgumentException("String buffer may not be null"); } @@ -108,7 +108,7 @@ BasicHttpVersionFormat.format(buffer, requestline.getHttpVersion()); } - public static String format(final RequestLine requestline) { + /*public@@@*/ static String format(final RequestLine requestline) { CharArrayBuffer buffer = new CharArrayBuffer(64); format(buffer, requestline); return buffer.toString(); Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java Sat Aug 25 06:20:22 2007 @@ -126,7 +126,7 @@ return buffer.toString(); } - public static void format(final CharArrayBuffer buffer, final StatusLine statusline) { + /*public@@@*/ static void format(final CharArrayBuffer buffer, final StatusLine statusline) { if (buffer == null) { throw new IllegalArgumentException("String buffer may not be null"); } @@ -142,7 +142,7 @@ } } - public static String format(final StatusLine statusline) { + /*public@@@*/ static String format(final StatusLine statusline) { CharArrayBuffer buffer = new CharArrayBuffer(32); format(buffer, statusline); return buffer.toString(); Added: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java?rev=569662&view=auto ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java (added) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java Sat Aug 25 06:20:22 2007 @@ -0,0 +1,129 @@ +/* + * $HeadURL$ + * $Revision$ + * $Date$ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ + +package org.apache.http.message; + + +import org.apache.http.HttpVersion; +import org.apache.http.RequestLine; +import org.apache.http.StatusLine; +import org.apache.http.Header; +import org.apache.http.util.CharArrayBuffer; + + +/** + * Interface for formatting elements of the HEAD section of an HTTP message. + * This is the complement to {@link LineParser}. + * There are individual methods for formatting a request line, a + * status line, or a header line. The formatting does not include the + * trailing line break sequence CR-LF. + * Instances of this interface are expected to be stateless and thread-safe. + * + *

+ * The formatted lines are returned in memory, the formatter does not depend + * on any specific IO mechanism. + * In order to avoid unnecessary creation of temporary objects, + * a buffer can be passed as argument to all formatting methods. + * The implementation may or may not actually use that buffer for formatting. + * If it is used, the buffer will first be cleared. + * The argument buffer can always be re-used after the call. The buffer + * returned as the result, if it is different from the argument buffer, + * MUST NOT be modified. + *

+ * + * + * @author Roland Weber + * + * + * + * @version $Revision$ $Date$ + * + * @since 4.0 + */ +public interface LineFormatter { + + + /** + * Formats a request line. + * + * @param reqline the request line to format + * @param buffer a buffer available for formatting, or + * null. + * The buffer will be cleared before use. + * + * @return the formatted request line + */ + CharArrayBuffer formatRequestLine(RequestLine reqline, + CharArrayBuffer buffer) + ; + + + /** + * Formats a status line. + * + * @param statline the status line to format + * @param buffer a buffer available for formatting, or + * null. + * The buffer will be cleared before use. + * @param buffer a buffer holding the line to parse + * + * @return the formatted status line + * + * @throws ParseException in case of a parse error + */ + CharArrayBuffer formatStatusLine(StatusLine statline, + CharArrayBuffer buffer) + ; + + + /** + * Formats a header. + * Due to header continuation, the result may be multiple lines. + * In order to generate well-formed HTTP, the lines in the result + * must be separated by the HTTP line break sequence CR-LF. + * There is no trailing CR-LF in the result. + *
+ * See the class comment for details about the buffer argument. + * + * @param header the header to format + * @param buffer a buffer available for formatting, or + * null. + * The buffer will be cleared before use. + * + * @return a buffer holding the formatted header, never null. + * The returned buffer may be different from the argument buffer. + * + * @throws ParseException in case of a parse error + */ + CharArrayBuffer formatHeader(Header header, CharArrayBuffer buffer) + ; + +} Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineFormatter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java Sat Aug 25 06:20:22 2007 @@ -48,6 +48,8 @@ * on any specific IO mechanism. * Instances of this interface are expected to be stateless and thread-safe. * + * @author Roland Weber + * * * * @version $Revision$ $Date$ Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java Sat Aug 25 06:20:22 2007 @@ -85,7 +85,8 @@ protected NHttpMessageWriter createRequestWriter( final SessionOutputBuffer buffer, final HttpParams params) { - return new HttpRequestWriter(buffer, params); + //@@@ how to configure the formatter? + return new HttpRequestWriter(buffer, null, params); } public void resetInput() { Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java Sat Aug 25 06:20:22 2007 @@ -82,7 +82,8 @@ protected NHttpMessageWriter createResponseWriter( final SessionOutputBuffer buffer, final HttpParams params) { - return new HttpResponseWriter(buffer, params); + //@@@ how to configure the formatter? + return new HttpResponseWriter(buffer, null, params); } public void resetInput() { Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/AbstractMessageWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/AbstractMessageWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/AbstractMessageWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/AbstractMessageWriter.java Sat Aug 25 06:20:22 2007 @@ -37,8 +37,8 @@ import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpMessage; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BufferedHeader; +import org.apache.http.message.LineFormatter; +import org.apache.http.message.BasicLineFormatter; import org.apache.http.nio.NHttpMessageWriter; import org.apache.http.nio.reactor.SessionOutputBuffer; import org.apache.http.params.HttpParams; @@ -46,41 +46,39 @@ public abstract class AbstractMessageWriter implements NHttpMessageWriter { - private final SessionOutputBuffer sessionBuffer; - private final CharArrayBuffer lineBuf; - - public AbstractMessageWriter(final SessionOutputBuffer buffer, final HttpParams params) { + protected final SessionOutputBuffer sessionBuffer; + protected final CharArrayBuffer lineBuf; + protected final LineFormatter lineFormatter; + + public AbstractMessageWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { super(); if (buffer == null) { throw new IllegalArgumentException("Session input buffer may not be null"); } this.sessionBuffer = buffer; - this.lineBuf = new CharArrayBuffer(64); + this.lineBuf = new CharArrayBuffer(64); + this.lineFormatter = (formatter != null) ? + formatter : BasicLineFormatter.DEFAULT; } public void reset() { } - protected abstract void writeHeadLine(CharArrayBuffer lineBuffer, HttpMessage message); + protected abstract void writeHeadLine(HttpMessage message) + throws IOException; public void write( final HttpMessage message) throws IOException, HttpException { if (message == null) { throw new IllegalArgumentException("HTTP message may not be null"); } - this.lineBuf.clear(); - writeHeadLine(this.lineBuf, message); - this.sessionBuffer.writeLine(this.lineBuf); + writeHeadLine(message); for (Iterator it = message.headerIterator(); it.hasNext(); ) { Header header = (Header) it.next(); - if (header instanceof BufferedHeader) { - // If the header is backed by a buffer, re-use the buffer - this.sessionBuffer.writeLine(((BufferedHeader)header).getBuffer()); - } else { - this.lineBuf.clear(); - BasicHeader.format(this.lineBuf, header); - this.sessionBuffer.writeLine(this.lineBuf); - } + this.sessionBuffer.writeLine + (lineFormatter.formatHeader(header, this.lineBuf)); } this.lineBuf.clear(); this.sessionBuffer.writeLine(this.lineBuf); Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpRequestWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpRequestWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpRequestWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpRequestWriter.java Sat Aug 25 06:20:22 2007 @@ -31,23 +31,29 @@ package org.apache.http.impl.nio.codecs; +import java.io.IOException; + import org.apache.http.HttpMessage; import org.apache.http.HttpRequest; -import org.apache.http.message.BasicRequestLine; +import org.apache.http.message.LineFormatter; import org.apache.http.nio.reactor.SessionOutputBuffer; import org.apache.http.params.HttpParams; import org.apache.http.util.CharArrayBuffer; public class HttpRequestWriter extends AbstractMessageWriter { - public HttpRequestWriter(final SessionOutputBuffer buffer, final HttpParams params) { - super(buffer, params); + public HttpRequestWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { + super(buffer, formatter, params); } - protected void writeHeadLine( - final CharArrayBuffer lineBuffer, - final HttpMessage message) { - BasicRequestLine.format(lineBuffer, ((HttpRequest) message).getRequestLine()); + protected void writeHeadLine(final HttpMessage message) + throws IOException { + + final CharArrayBuffer buffer = lineFormatter.formatRequestLine + (((HttpRequest) message).getRequestLine(), this.lineBuf); + this.sessionBuffer.writeLine(buffer); } } Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpResponseWriter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpResponseWriter.java?rev=569662&r1=569661&r2=569662&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpResponseWriter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpResponseWriter.java Sat Aug 25 06:20:22 2007 @@ -31,23 +31,29 @@ package org.apache.http.impl.nio.codecs; +import java.io.IOException; + import org.apache.http.HttpMessage; import org.apache.http.HttpResponse; -import org.apache.http.message.BasicStatusLine; +import org.apache.http.message.LineFormatter; import org.apache.http.nio.reactor.SessionOutputBuffer; import org.apache.http.params.HttpParams; import org.apache.http.util.CharArrayBuffer; public class HttpResponseWriter extends AbstractMessageWriter { - public HttpResponseWriter(final SessionOutputBuffer buffer, final HttpParams params) { - super(buffer, params); + public HttpResponseWriter(final SessionOutputBuffer buffer, + final LineFormatter formatter, + final HttpParams params) { + super(buffer, formatter, params); } - protected void writeHeadLine( - final CharArrayBuffer lineBuffer, - final HttpMessage message) { - BasicStatusLine.format(lineBuffer, ((HttpResponse) message).getStatusLine()); + protected void writeHeadLine(final HttpMessage message) + throws IOException { + + final CharArrayBuffer buffer = lineFormatter.formatStatusLine + (((HttpResponse) message).getStatusLine(), this.lineBuf); + this.sessionBuffer.writeLine(buffer); } }