| /* |
| * Copyright 2010 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.gwt.rebind.model; |
| |
| import com.google.gwt.core.ext.typeinfo.JClassType; |
| import com.google.gwt.core.ext.typeinfo.JMethod; |
| import com.google.web.bindery.requestfactory.shared.JsonRpcService; |
| import com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext.Dialect; |
| |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * Represents a service endpoint. |
| */ |
| public class ContextMethod implements AcceptsModelVisitor, HasExtraTypes { |
| |
| /** |
| * Builds a {@link ContextMethod}. |
| */ |
| public static class Builder { |
| private ContextMethod toReturn = new ContextMethod(); |
| |
| public ContextMethod build() { |
| try { |
| return toReturn; |
| } finally { |
| toReturn = null; |
| } |
| } |
| |
| public Builder setDeclaredMethod(JMethod method) { |
| toReturn.methodName = method.getName(); |
| JClassType returnClass = method.getReturnType().isClassOrInterface(); |
| toReturn.interfaceName = returnClass.getQualifiedSourceName(); |
| toReturn.packageName = returnClass.getPackage().getName(); |
| toReturn.simpleSourceName = returnClass.getName().replace('.', '_') + "Impl"; |
| toReturn.dialect = |
| returnClass.isAnnotationPresent(JsonRpcService.class) ? Dialect.JSON_RPC |
| : Dialect.STANDARD; |
| return this; |
| } |
| |
| public Builder setExtraTypes(List<EntityProxyModel> extraTypes) { |
| toReturn.extraTypes = extraTypes; |
| return this; |
| } |
| |
| public Builder setRequestMethods(List<RequestMethod> requestMethods) { |
| toReturn.requestMethods = requestMethods; |
| return this; |
| } |
| } |
| |
| private Dialect dialect; |
| private List<EntityProxyModel> extraTypes; |
| private String interfaceName; |
| private String methodName; |
| private String packageName; |
| private List<RequestMethod> requestMethods; |
| private String simpleSourceName; |
| |
| private ContextMethod() { |
| } |
| |
| public void accept(ModelVisitor visitor) { |
| if (visitor.visit(this)) { |
| for (RequestMethod method : getRequestMethods()) { |
| method.accept(visitor); |
| } |
| } |
| visitor.endVisit(this); |
| } |
| |
| public Dialect getDialect() { |
| return dialect; |
| } |
| |
| public List<EntityProxyModel> getExtraTypes() { |
| return Collections.unmodifiableList(extraTypes); |
| } |
| |
| /** |
| * The qualified source name of the RequestContext sub-interface (i.e., the |
| * return type of the method declaration). |
| */ |
| public String getImplementedInterfaceQualifiedSourceName() { |
| return interfaceName; |
| } |
| |
| public String getMethodName() { |
| return methodName; |
| } |
| |
| public String getPackageName() { |
| return packageName; |
| } |
| |
| /** |
| * The qualified source name of the implementation. |
| */ |
| public String getQualifiedSourceName() { |
| return getPackageName() + "." + getSimpleSourceName(); |
| } |
| |
| public List<RequestMethod> getRequestMethods() { |
| return Collections.unmodifiableList(requestMethods); |
| } |
| |
| public String getSimpleSourceName() { |
| return simpleSourceName; |
| } |
| |
| /** |
| * For debugging use only. |
| */ |
| @Override |
| public String toString() { |
| return getQualifiedSourceName() + " " + getMethodName() + "()"; |
| } |
| } |