blob: 0113e76ac36cfbcc339db771a2e296b3571f5492 [file] [log] [blame]
/*
* Copyright 2014 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.web.bindery.requestfactory.server;
import com.google.gwt.http.client.Request;
import com.google.web.bindery.requestfactory.shared.InstanceRequest;
import com.google.web.bindery.requestfactory.shared.MethodProvidedByServiceLayerTest;
import com.google.web.bindery.requestfactory.vm.impl.OperationKey;
import java.lang.reflect.Method;
/**
* JRE version of {@link MethodProvidedByServiceLayerTest}.
*/
public class MethodProvidedByServiceLayerJreTest extends MethodProvidedByServiceLayerTest {
static class Decorator extends ServiceLayerDecorator {
private static final String MISSING_DOMAIN_METHOD;
private static final String MISSING_DOMAIN_TYPE;
private static final String MISSING_DOMAIN_TYPE_INSTANCE_METHOD;
private static String getTypeDescriptor(Class<?> clazz) {
return "L" + clazz.getName().replace('.', '/') + ";";
}
static {
String proxyTypeDescriptor = getTypeDescriptor(Proxy.class);
String requestTypeDescriptor = getTypeDescriptor(Request.class);
MISSING_DOMAIN_METHOD =
new OperationKey(Context.class.getName(), "missingDomainMethod", "("
+ getTypeDescriptor(String.class) + ")" + requestTypeDescriptor).get();
MISSING_DOMAIN_TYPE =
new OperationKey(Context.class.getName(), "missingDomainType", "(" + proxyTypeDescriptor
+ ")" + requestTypeDescriptor).get();
MISSING_DOMAIN_TYPE_INSTANCE_METHOD =
new OperationKey(Context.class.getName(), "missingDomainTypeInstanceMethod", "()"
+ getTypeDescriptor(InstanceRequest.class)).get();
}
@Override
public Method resolveDomainMethod(String operation) {
if (MISSING_DOMAIN_METHOD.equals(operation)) {
try {
return getClass().getDeclaredMethod("echo", String.class);
} catch (NoSuchMethodException e) {
return this.die(e, "Cannot find " + getClass().getCanonicalName() + "::echo method");
}
} else if (MISSING_DOMAIN_TYPE.equals(operation)) {
try {
return SimpleFoo.class.getDeclaredMethod("echo", SimpleFoo.class);
} catch (NoSuchMethodException e) {
return this.die(e, "Cannot find " + SimpleFoo.class.getCanonicalName() + "::echo method");
}
} else if (MISSING_DOMAIN_TYPE_INSTANCE_METHOD.equals(operation)) {
try {
return SimpleFoo.class.getDeclaredMethod("persistAndReturnSelf");
} catch (NoSuchMethodException e) {
return this.die(e, "Cannot find " + SimpleFoo.class.getCanonicalName()
+ "::persistAndReturnSelf method");
}
}
return super.resolveDomainMethod(operation);
}
@Override
public Class<?> resolveDomainClass(Class<?> clazz) {
if (Proxy.class.equals(clazz)) {
return SimpleFoo.class;
}
return super.resolveDomainClass(clazz);
}
@Override
public <T> Class<? extends T> resolveClientType(Class<?> domainClass, Class<T> clientType,
boolean required) {
if (SimpleFoo.class.equals(domainClass) && Proxy.class.equals(clientType)) {
return Proxy.class.asSubclass(clientType);
}
return super.resolveClientType(domainClass, clientType, required);
}
public static final String echo(String s) {
return s;
}
}
@Override
public String getModuleName() {
return null;
}
@Override
protected Factory createFactory() {
return RequestFactoryJreTest.createInProcess(Factory.class);
}
}