/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software 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. */ package com.smartgwt.client.rpc; import com.smartgwt.client.event.*; import com.smartgwt.client.core.*; import com.smartgwt.client.types.*; import com.smartgwt.client.data.*; import com.smartgwt.client.data.events.*; import com.smartgwt.client.rpc.*; import com.smartgwt.client.widgets.*; import com.smartgwt.client.widgets.events.*; import com.smartgwt.client.widgets.form.*; import com.smartgwt.client.widgets.form.validator.*; import com.smartgwt.client.widgets.form.fields.*; import com.smartgwt.client.widgets.tile.*; import com.smartgwt.client.widgets.tile.events.*; import com.smartgwt.client.widgets.grid.*; import com.smartgwt.client.widgets.grid.events.*; import com.smartgwt.client.widgets.chart.*; import com.smartgwt.client.widgets.layout.*; import com.smartgwt.client.widgets.layout.events.*; import com.smartgwt.client.widgets.menu.*; import com.smartgwt.client.widgets.tab.*; import com.smartgwt.client.widgets.toolbar.*; import com.smartgwt.client.widgets.tree.*; import com.smartgwt.client.widgets.tree.events.*; import com.smartgwt.client.widgets.viewer.*; import com.smartgwt.client.widgets.calendar.*; import com.smartgwt.client.widgets.calendar.events.*; import com.smartgwt.client.widgets.cube.*; import java.util.Date; import java.util.List; import java.util.Map; import java.util.HashMap; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.Element; import com.smartgwt.client.util.*; import com.google.gwt.event.shared.*; import com.google.gwt.event.shared.HasHandlers; /** * Encapsulates an RPC response from the server. Instances of this class are automatically created and optionally passed * to you in the callback you specify as part of your RPCRequest. * @see com.smartgwt.client.rpc.RPCRequest */ public class RPCResponse extends DataClass { public static RPCResponse getOrCreateRef(JavaScriptObject jsObj) { if(jsObj == null) return null; return new RPCResponse(jsObj); } public RPCResponse(){ } public RPCResponse(JavaScriptObject jsObj){ super(jsObj); } // ********************* Properties / Attributes *********************** /** * This attribute (available when using the the <code>xmlHttpRequest</code> transport) contains the HTTP response code sent * by the server. <p> Note that this is different from {@link com.smartgwt.client.rpc.RPCResponse#getStatus status} - that * attribute is used to indicate a status code for the RPC itself whereas httpResponseCode is the raw HTTP response code * for the HTTP request that contained the RPCRequest. <p> This feature relies on the XMLHttpRequest object which can be * disabled by end-users in some supported browsers. See {@link com.smartgwt.client.docs.PlatformDependencies} for more * information. <p> If you're using this attribute, you'll typically want to avoid the default error handling response of * RPCManager. To do so, set {@link com.smartgwt.client.rpc.RPCRequest#getWillHandleError willHandleError} to * <code>true</code>. * * * @return Integer */ public Integer getHttpResponseCode() { return getAttributeAsInt("httpResponseCode"); } /** * Status code for this response. Status codes less than zero are considered errors by the RPCManager, those greater than * or equal to zero are considered successes. Please see the error handling section the {@link * com.smartgwt.client.rpc.RPCManager RPCManager docs} for more information on what the RPCManager does with the status * code and how you can override this behavior. <P> When using the Smart GWT server you can set the rpcResponse.status by * calling the server-side method RPCResponse.setStatus(). <P> When not using the Smart GWT server, the RPCManager makes * no assumptions about the structure of the response, so the status code just reflects the {@link * com.smartgwt.client.rpc.RPCResponse#getHttpResponseCode httpResponseCode}: status will be {@link * com.smartgwt.client.rpc.RPCResponse#STATUS_TRANSPORT_ERROR STATUS_TRANSPORT_ERROR} if an HTTP-level error occurred such * as "500 server error". If you have a status code you need to transmit you can simply embed it in the response (as part * of {@link com.smartgwt.client.rpc.RPCResponse#getData data}) and interpret it from the callback. <P> With or without the * Smart GWT server, the {@link com.smartgwt.client.docs.Relogin} status codes (such as {@link * com.smartgwt.client.rpc.RPCResponse#STATUS_LOGIN_REQUIRED STATUS_LOGIN_REQUIRED}) are triggered whenever special * markers, such as the loginRequiredMarker, appear in the body of the response. See the {@link * com.smartgwt.client.docs.Relogin Relogin Overview} for details. * * * @return int */ public int getStatus() { return getAttributeAsInt("status"); } /** * ID of the transaction sent to the server via {@link com.smartgwt.client.rpc.RPCManager#sendQueue RPCManager.sendQueue} * containing the {@link com.smartgwt.client.rpc.RPCRequest} associated with this response. * * * @return Integer */ public Integer getTransactionNum() { return getAttributeAsInt("transactionNum"); } // ********************* Methods *********************** // ********************* Static Methods *********************** // *********************************************************** public static int STATUS_FAILURE = -1; public static int STATUS_LOGIN_INCORRECT = -5; public static int STATUS_LOGIN_REQUIRED = -7; public static int STATUS_LOGIN_SUCCESS = -8; public static int STATUS_MAX_LOGIN_ATTEMPTS_EXCEEDED = -6; public static int STATUS_SERVER_TIMEOUT = -100; public static int STATUS_SUCCESS = 0; public static int STATUS_TRANSPORT_ERROR = -90; public static int STATUS_VALIDATION_ERROR = -4; /** * Status code for this response. Status codes less than zero are considered errors by the RPCManager, those * greater than or equal to zero are considered successes. Please see the error handling section the {@link * com.smartgwt.client.rpc.RPCManager} for more information on what the RPCManager does with the status code and how * you can override this behavior. <P> When using the Smart GWT server you can set the rpcResponse.status by * calling the server-side method RPCResponse.setStatus(). <P> When not using the Smart GWT server, the * RPCManager makes no assumptions about the structure of the response, so the status code just reflects the {@link * com.smartgwt.client.rpc.RPCResponse#getHttpResponseCode httpResponseCode}: status will be {@link * com.smartgwt.client.rpc.RPCResponse#STATUS_TRANSPORT_ERROR} if an HTTP-level error occurred such as "500 server * error". If you have a status code you need to transmit you can simply embed it in the response (as part of * {@link com.smartgwt.client.rpc.RPCResponse#getData data}) and interpret it from the callback. <P> With or without * the Smart GWT server, the Relogin Overview for details. * * @param status status */ public void setStatus(int status) { setAttribute("status", status); } /** * HTTP headers returned by the server, as a Map of Header name -> Header value * <p> * Headers are available only when the default {@link com.smartgwt.client.types.RPCTransport} * "xmlHttpRequest" is in use, and browsers may limit access to headers for cross-domain requests * or in other security-sensitive scenarios. * * @return the http headers */ public Map getHttpHeaders() { return getAttributeAsMap("httpHeaders"); } }