blob: efa6b4c293813d588660e42b1d8dd36260310e9a [file] [log] [blame]
/*
* 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() + "()";
}
}