/**
* EasySOA Proxy
* Copyright 2011 Open Wide
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact : easysoa-dev@googlegroups.com
*/
package org.easysoa.message;
import javax.xml.bind.annotation.XmlRootElement;
import org.easysoa.servlet.http.CopyHttpServletResponse;
/**
* Outgoing message
*
* TODO LATER extract "servlet" code in (servlet)OutMessageBuilder
* Make it Lazy with several levels (one for headers ..., one for JSONContent or XML content)
*
* @author jguillemotte
*
*/
@XmlRootElement
public class OutMessage implements Message {
/**
* Response fields
*/
private int status = 0;
private String statusText;
private String protocol;
private String protocolVersion;
// private Cookies cookies;
private Headers headers;
/** null means HTTP without content ex. GET TODO OR messageContent.rawContent */
private MessageContent messageContent;
private String redirectURL;
// private Long headersSize = new Long(-1);
// private Long bodySize = new Long(-1);
private String comment;
private long responseTimeStamp = 0;
public OutMessage(){
this.statusText = "";
this.protocol = "";
this.protocolVersion = "";
this.headers = new Headers();
this.messageContent = new MessageContent();
this.redirectURL = "";
this.comment = "";
}
/**
* Out message constructor
*/
public OutMessage(int status, String statusText) {
this();
this.status = status;
this.statusText = statusText;
}
/**
*
* @param response
*/
public OutMessage(CopyHttpServletResponse response) {
this();
// Setting status
this.setStatus(response.getStatus());
// Setting Message content
this.headers = new Headers();
// Set the headers
// With servlet 2.5, the following method getHeaderNames is not available
// See http://stackoverflow.com/questions/12728017/how-to-get-header-from-response-in-servlet-2-3-or-2-5
for(String headerName : response.getHeaderNames()){
this.headers.addHeader(new Header(headerName, response.getHeader(headerName)));
}
// Set the message content
MessageContent messageContent = new MessageContent();
messageContent.setRawContent(response.getMessageContent());
messageContent.setEncoding(response.getCharacterEncoding());
messageContent.setMimeType(response.getContentType());
messageContent.setSize(response.getMessageContent().length());
this.setMessageContent(messageContent);
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public String getProtocolVersion() {
return protocolVersion;
}
public void setProtocolVersion(String protocolVersion) {
this.protocolVersion = protocolVersion;
}
public Headers getHeaders() {
return headers;
}
public void setHeaders(Headers headers) {
this.headers = headers;
}
public MessageContent getMessageContent() {
return messageContent;
}
public void setMessageContent(MessageContent messageContent) {
this.messageContent = messageContent;
}
public String getRedirectURL() {
return redirectURL;
}
public void setRedirectURL(String redirectURL) {
this.redirectURL = redirectURL;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public int getStatus() {
return status;
}
public String getStatusText() {
return statusText;
}
public void setStatus(String status) throws NumberFormatException {
this.status = Integer.parseInt(status);
}
public void setStatus(int status) {
this.status = status;
}
public void setStatusText(String statusText) {
this.statusText = statusText;
}
public long getResponseTimeStamp() {
return responseTimeStamp;
}
public void setResponseTimeStamp(long responseTimeStamp) {
this.responseTimeStamp = responseTimeStamp;
}
}