/*
* RemoteServerError.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.server.remote;
import com.google.gwt.json.client.JSONNull;
import com.google.gwt.json.client.JSONValue;
import org.rstudio.core.client.jsonrpc.RpcError;
import org.rstudio.core.client.jsonrpc.RpcUnderlyingError;
import org.rstudio.studio.client.server.ServerError;
import org.rstudio.studio.client.server.ServerErrorCause;
class RemoteServerError implements ServerError
{
public RemoteServerError(RpcError rpcError)
{
code_ = codeFromRpcErrorCode(rpcError.getCode());
message_ = rpcError.getMessage();
RpcUnderlyingError rpcErrorCause = rpcError.getError();
if (rpcErrorCause != null)
{
cause_ = new ServerErrorCause(rpcErrorCause.getCode(),
rpcErrorCause.getCategory(),
rpcErrorCause.getMessage());
}
else
{
cause_ = null;
}
clientInfo_ = rpcError.getClientInfo();
}
@Override
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append(code_ + ": " + message_ + "\n");
if (cause_ != null)
sb.append(cause_.toString());
return sb.toString();
}
public int getCode()
{
return code_;
}
public String getMessage()
{
return message_ ;
}
public ServerErrorCause getCause()
{
return cause_ ;
}
public String getUserMessage()
{
if (cause_ != null)
return cause_.getMessage();
else
return message_ ;
}
@Override
public JSONValue getClientInfo()
{
return clientInfo_ == null ? JSONNull.getInstance() : clientInfo_;
}
private int codeFromRpcErrorCode(int code)
{
switch(code)
{
case RpcError.SUCCESS:
return ServerError.SUCCESS;
case RpcError.CONNECTION_ERROR:
return ServerError.CONNECTION;
case RpcError.UNAVAILABLE:
return ServerError.UNAVAILABLE;
case RpcError.UNAUTHORIZED:
return ServerError.UNAUTHORIZED;
case RpcError.PARSE_ERROR:
case RpcError.INVALID_REQUEST:
case RpcError.METHOD_NOT_FOUND:
case RpcError.PARAM_MISSING:
case RpcError.PARAM_TYPE_MISMATCH:
case RpcError.PARAM_INVALID:
case RpcError.METHOD_UNEXEPECTED:
return ServerError.PROTOCOL;
case RpcError.EXECUTION_ERROR:
return ServerError.EXECUTION;
case RpcError.TRANSMISSION_ERROR:
return ServerError.TRANSMISSION;
default:
return ServerError.SUCCESS;
}
}
private int code_ ;
private String message_ ;
private ServerErrorCause cause_ ;
private JSONValue clientInfo_;
}