org.opencms.gwt.rebind.rpc.CmsRpcProxyCreator.java Source code

Java tutorial

Introduction

Here is the source code for org.opencms.gwt.rebind.rpc.CmsRpcProxyCreator.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 org.opencms.gwt.rebind.rpc;

import java.util.Map;

import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.client.rpc.SynchronizedRpcRequest;
import com.google.gwt.user.rebind.SourceWriter;
import com.google.gwt.user.rebind.rpc.ProxyCreator;
import com.google.gwt.user.rebind.rpc.SerializableTypeOracle;

/**
 * Creates proxies supporting optionally synchronized RPC methods 
 * using the {@link SynchronizedRpcRequest} annotation.<p>
 */
public class CmsRpcProxyCreator extends ProxyCreator {

    /**
     * Constructor.<p>
     * 
     * @param serviceIntf the service interface
     */
    public CmsRpcProxyCreator(@SuppressWarnings("hiding") JClassType serviceIntf) {

        super(serviceIntf);
    }

    /**
     * @see com.google.gwt.user.rebind.rpc.ProxyCreator#generateProxyMethods(com.google.gwt.user.rebind.SourceWriter, com.google.gwt.user.rebind.rpc.SerializableTypeOracle, com.google.gwt.core.ext.typeinfo.TypeOracle, java.util.Map)
     */
    @Override
    protected void generateProxyMethods(SourceWriter w, SerializableTypeOracle serializableTypeOracle,
            TypeOracle typeOracle, Map<JMethod, JMethod> syncMethToAsyncMethMap) {

        super.generateProxyMethods(w, serializableTypeOracle, typeOracle, syncMethToAsyncMethMap);
        generateSyncOverride(w, syncMethToAsyncMethMap);
    }

    /**
     * Generates a method to check if a given RPC method has to be synchronized.<p> 
     * 
     * @param srcWriter the source write to generate the code with
     * @param syncMethToAsyncMethMap the method map
     */
    protected void generateSyncOverride(SourceWriter srcWriter, Map<JMethod, JMethod> syncMethToAsyncMethMap) {

        srcWriter.println("@Override");
        srcWriter.println("public boolean isSync(String methodName) {");

        JMethod[] syncMethods = serviceIntf.getOverridableMethods();
        for (JMethod syncMethod : syncMethods) {
            JMethod asyncMethod = syncMethToAsyncMethMap.get(syncMethod);
            if (!asyncMethod.isAnnotationPresent(SynchronizedRpcRequest.class)) {
                continue;
            }
            srcWriter.indentln(
                    "if (methodName.equals(\"" + getProxySimpleName() + "." + syncMethod.getName() + "\")) {");
            srcWriter.indentln("return true;");
            srcWriter.indentln("}");
        }
        srcWriter.indentln("return false;");
        srcWriter.println("}");
    }
}