package org.zend.php.zendserver.deployment.ui.chrome; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; public class HttpResponse { private static final String HEADER_CONTENT_TYPE = "Content-Type"; //$NON-NLS-1$ private static final String HEADER_CONTENT_LENGTH = "Content-Length"; //$NON-NLS-1$ public static final int OK = 200; public static int ERROR = 500; private static final String RESPONSE_OK = "OK"; //$NON-NLS-1$ private static final String RESPONSE_INTERNAL_ERROR = "Internal Error"; //$NON-NLS-1$ private static final String EOL = "\r\n"; //$NON-NLS-1$ private PrintWriter out; private Map<String, String> headers = new HashMap<String, String>(); private int status; public HttpResponse(PrintWriter out) { this.out = out; setContentType("text/html"); // default content-type //$NON-NLS-1$ } public void setContentType(String string) { headers.put(HEADER_CONTENT_TYPE, string); } private void setLength(int length) { headers.put(HEADER_CONTENT_LENGTH, Integer.toString(length)); } public void setStatus(int code) { this.status = code; } public void send(String body) { StringBuilder out = new StringBuilder(); out.append("HTTP/1.1 "); //$NON-NLS-1$ out.append(Integer.toString(status)); out.append(" "); //$NON-NLS-1$ out.append(getStatusMessage()); out.append(EOL); if (body != null) { int bodyLength = body.length(); setLength(bodyLength); } for (Map.Entry<String, String> header : headers.entrySet()) { out.append(header.getKey()); out.append(": "); //$NON-NLS-1$ out.append(header.getValue()); out.append(EOL); } out.append(EOL); if (body != null) { out.append(body); out.append(EOL); } this.out.write(out.toString()); this.out.flush(); } private String getStatusMessage() { if (status == OK) { return RESPONSE_OK; } else if (status == ERROR) { return RESPONSE_INTERNAL_ERROR; } throw new IllegalArgumentException("Unknown status "+status); //$NON-NLS-1$ } }