|  | /* | 
|  | * Copyright 2011 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.web.bindery.requestfactory.server.impl.FindService; | 
|  | import com.google.web.bindery.requestfactory.shared.EntityProxyId; | 
|  | import com.google.web.bindery.requestfactory.shared.RequestContext; | 
|  | import com.google.web.bindery.requestfactory.shared.impl.Constants; | 
|  | import com.google.web.bindery.requestfactory.shared.impl.FindRequest; | 
|  |  | 
|  | import java.lang.reflect.Method; | 
|  |  | 
|  | /** | 
|  | * Allows the use of a very short operation name for the find method. This also | 
|  | * avoids the need to introduce special-case code for FindRequest into | 
|  | * RequestFactoryInterfaceValidator. | 
|  | */ | 
|  | public class FindServiceLayer extends ServiceLayerDecorator { | 
|  |  | 
|  | @Override | 
|  | public Method resolveDomainMethod(String operation) { | 
|  | if (Constants.FIND_METHOD_OPERATION.equals(operation)) { | 
|  | Throwable ex; | 
|  | try { | 
|  | return FindService.class.getMethod("find", Object.class); | 
|  | } catch (SecurityException e) { | 
|  | ex = e; | 
|  | } catch (NoSuchMethodException e) { | 
|  | ex = e; | 
|  | } | 
|  | die(ex, "Could not retrieve %s.find() method", FindService.class.getCanonicalName()); | 
|  | } | 
|  | return super.resolveDomainMethod(operation); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public Class<? extends RequestContext> resolveRequestContext(String operation) { | 
|  | if (Constants.FIND_METHOD_OPERATION.equals(operation)) { | 
|  | return FindRequest.class; | 
|  | } | 
|  | return super.resolveRequestContext(operation); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public Method resolveRequestContextMethod(String operation) { | 
|  | if (Constants.FIND_METHOD_OPERATION.equals(operation)) { | 
|  | Throwable ex; | 
|  | try { | 
|  | return FindRequest.class.getMethod("find", EntityProxyId.class); | 
|  | } catch (SecurityException e) { | 
|  | ex = e; | 
|  | } catch (NoSuchMethodException e) { | 
|  | ex = e; | 
|  | } | 
|  | die(ex, "Could not retrieve %s.find() method", FindRequest.class.getCanonicalName()); | 
|  | } | 
|  | return super.resolveRequestContextMethod(operation); | 
|  | } | 
|  | } |