blob: 8f14fdd1b2f8bc4e0a969d74913e39bc00eae064 [file] [log] [blame]
/*
* 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 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;
/**
* {@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 = method;
this.parameters = parameters;
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;
}
/**
* 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();
}
}