com.google.gwt.user.server.rpc.RPCRequest.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.user.server.rpc.RPCRequest.java

Source

/*
 * 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();
    }
}