package org.solmix.atmosphere.client;
import java.util.Collections;
import java.util.List;
import org.solmix.atmosphere.client.AtmosphereRequestConfig.Transport;
import com.google.gwt.core.client.JavaScriptObject;
public final class AtmosphereResponse extends JavaScriptObject {
public enum State {
MESSAGE_RECEIVED,
MESSAGE_PUBLISHED,
OPENING,
RE_OPENING,
CLOSED,
ERROR;
@Override
public String toString() {
switch(this) {
case MESSAGE_RECEIVED: return "messageReceived";
case MESSAGE_PUBLISHED: return "messagePublished";
case OPENING: return "opening";
case RE_OPENING: return "re-opening";
case CLOSED: return "closed";
default:
case ERROR: return "error";
}
}
public static State fromString(String s) {
for (State st : State.values()) {
if (st.toString().equals(s)) {
return st;
}
}
return State.ERROR;
}
}
/**
* See com.google.gwt.http.client.Response for status codes
*
* @return
*/
public native int getStatus() /*-{
return this.status;
}-*/;
public native String getReasonPhrase() /*-{
return this.reasonPhrase;
}-*/;
public <T> List<T> getMessages() {
Object containedMessage = getMessageObject();
if (containedMessage == null) {
return Collections.emptyList();
} else if (containedMessage instanceof List) {
return (List)containedMessage;
} else {
return (List<T>) Collections.singletonList(containedMessage);
}
}
public native String getResponseBody() /*-{
return this.responseBody;
}-*/;
public native String getHeader(String name) /*-{
return this.headers[name];
}-*/;
public State getState() {
return State.fromString(getStateImpl());
}
public Transport getTransport() {
return Transport.fromString(getTransportImpl());
}
protected AtmosphereResponse() {
}
native void setMessageObject(Object message) /*-{
this.messageObject = message;
}-*/;
native Object getMessageObject() /*-{
return this.messageObject;
}-*/;
private native String getStateImpl() /*-{
return this.state;
}-*/;
private native String getTransportImpl() /*-{
return this.transport;
}-*/;
}