org.opencms.gwt.rebind.rpc.CmsRpcProxyCreator Maven / Gradle / Ivy
Show all versions of opencms-gwt Show documentation
/*
* 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.
*/
public class CmsRpcProxyCreator extends ProxyCreator {
/**
* Constructor.
*
* @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 syncMethToAsyncMethMap) {
super.generateProxyMethods(w, serializableTypeOracle, typeOracle, syncMethToAsyncMethMap);
generateSyncOverride(w, syncMethToAsyncMethMap);
}
/**
* Generates a method to check if a given RPC method has to be synchronized.
*
* @param srcWriter the source write to generate the code with
* @param syncMethToAsyncMethMap the method map
*/
protected void generateSyncOverride(SourceWriter srcWriter, Map 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("}");
}
}