/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.user.server.rpc; import com.google.gwt.user.client.rpc.RpcToken; import java.lang.reflect.Method; /** * Describes an incoming RPC request in terms of a resolved {@link Method} and * an array of arguments. */ public final class RPCRequest { /** * The flags associated with the RPC request. */ private final int flags; /** * The method for this request. */ private final Method method; /** * The parameters for this request. */ private final Object[] parameters; /** * The RPC token for this request. */ private final RpcToken rpcToken; /** * {@link SerializationPolicy} used for decoding this request and for encoding * the responses. */ private final SerializationPolicy serializationPolicy; /** * Construct an RPCRequest. */ public RPCRequest(Method method, Object[] parameters, SerializationPolicy serializationPolicy, int flags) { this(method, parameters, null, serializationPolicy, flags); } /** * Construct an RPCRequest. */ public RPCRequest(Method method, Object[] parameters, RpcToken rpcToken, SerializationPolicy serializationPolicy, int flags) { this.method = method; this.parameters = parameters; this.rpcToken = rpcToken; this.serializationPolicy = serializationPolicy; this.flags = flags; } public int getFlags() { return flags; } /** * Get the request's method. */ public Method getMethod() { return method; } /** * Get the request's parameters. */ public Object[] getParameters() { return parameters; } /** * Get the request's RPC token. */ public RpcToken getRpcToken() { return rpcToken; } /** * Returns the {@link SerializationPolicy} used to decode this request. This * is also the <code>SerializationPolicy</code> that should be used to encode * responses. * * @return {@link SerializationPolicy} used to decode this request */ public SerializationPolicy getSerializationPolicy() { return serializationPolicy; } /** * For debugging use only. */ @Override public String toString() { StringBuilder callSignature = new StringBuilder(); // Add the class and method names callSignature.append(method.getDeclaringClass().getName()); callSignature.append('.'); callSignature.append(method.getName()); // Add the list of parameters callSignature.append('('); for (Object param : parameters) { if (param instanceof String) { // Put it within quotes and escape quotes, for readability callSignature.append('"'); String strParam = (String) param; String escapedStrParam = strParam.replaceAll("\\\"", "\\\\\""); callSignature.append(escapedStrParam); callSignature.append('"'); } else if (param == null) { callSignature.append("null"); } else { // We assume that anyone who wants to use this method will implement // toString on his serializable objects. callSignature.append(param.toString()); } callSignature.append(", "); } // Remove the last ", " int length = callSignature.length(); callSignature.delete(length - 2, length); callSignature.append(')'); return callSignature.toString(); } }