/** * Copyright 2010 JBoss Inc * * Licensed 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. */ package org.eclipse.webdav.internal.kernel; import java.io.*; import org.eclipse.webdav.IContext; import org.eclipse.webdav.IResponse; import org.eclipse.webdav.internal.kernel.utils.Assert; import org.w3c.dom.Document; /** * The <code>Response</code> class subclasses <code>Message</code> to * add a status field. */ public class Response extends Message implements IResponse { protected Status status; public Response(Status status, IContext context, InputStream body) { super(); this.status = status; this.context = context; this.body = body; } public Response(Status status, IContext context, Document body) { super(); this.status = status; this.context = context; this.body = body; } public void close() throws IOException { if (!hasDocumentBody()) getInputStream().close(); } public Document getDocumentBody() throws IOException { Assert.isTrue(hasDocumentBody(), Policy.bind("error.receiverMissingBody")); //$NON-NLS-1$ return (Document) body; } public InputStream getInputStream() { Assert.isTrue(!hasDocumentBody(), Policy.bind("error.receiverHasBody")); //$NON-NLS-1$ return (InputStream) body; } /** * Return the status code for this response. * * <p>Implements the corresponding API in the interface * <code>Response</code>.</p> * * @return the status code * @see Response#getStatusCode() */ public int getStatusCode() { return status.getCode(); } /** * Return the status message for this response. * * <p>Implements the corresponding API in the interface * <code>Response</code>.</p> * * @return the status message * @see Response#getStatusMessage() */ public String getStatusMessage() { return status.getMessage(); } public boolean hasDocumentBody() { return (body instanceof Document); } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append(status.toHTTPString()); buffer.append('\n'); buffer.append(context.toString()); buffer.append('\n'); try { if (hasDocumentBody()) { IDocumentMarshaler marshaler = new DocumentMarshaler(); Writer writer = new StringWriter(); marshaler.print(getDocumentBody(), writer, "UTF-8"); //$NON-NLS-1$ buffer.append(writer.toString()); } else buffer.append("<<" //$NON-NLS-1$ + Policy.bind("label.bytes", String.valueOf(getInputStream().available())) //$NON-NLS-1$ + ">>"); //$NON-NLS-1$ } catch (IOException e) { buffer.append("<<" + Policy.bind("exception.dumping", e.getMessage()) + ">>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } return buffer.toString(); } }