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