blob: d54143cde63feca5a2ab3eb4ae2d745a709adff2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.netbeans.modules.websvc.rest.client;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import org.netbeans.api.java.source.Comment;
import org.netbeans.api.java.source.Comment.Style;
import org.netbeans.api.java.source.TreeMaker;
import org.netbeans.api.java.source.WorkingCopy;
import org.netbeans.modules.websvc.rest.client.ClientJavaSourceHelper.HttpMimeType;
import org.netbeans.modules.websvc.rest.client.ClientJavaSourceHelper.PathFormat;
import org.netbeans.modules.websvc.rest.model.api.HttpMethod;
import org.netbeans.modules.websvc.rest.support.JavaSourceHelper;
import org.netbeans.modules.websvc.saas.model.WadlSaasMethod;
import org.netbeans.modules.websvc.saas.model.oauth.Metadata;
import org.netbeans.modules.websvc.saas.model.wadl.Response;
import org.openide.nodes.Node;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.ExpressionTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.ModifiersTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.TypeParameterTree;
import com.sun.source.tree.VariableTree;
import java.util.EnumSet;
/**
* Jersey 1.X generation strategy
*
* @author ads
*
*/
class JerseyGenerationStrategy extends ClientGenerationStrategy {
@Override
public ClassTree generateFields(TreeMaker maker, WorkingCopy copy,
ClassTree classTree,String resourceURI,Security security)
{
// add 3 fields
ModifiersTree fieldModif = maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
Tree typeTree = JavaSourceHelper.createTypeTree(copy, "com.sun.jersey.api.client.WebResource"); //NOI18N
VariableTree fieldTree = maker.Variable(fieldModif, "webResource", typeTree, null); //NOI18N
ClassTree modifiedClass = maker.addClassMember(classTree, fieldTree);
fieldModif = maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
typeTree = JavaSourceHelper.createTypeTree(copy, "com.sun.jersey.api.client.Client"); //NOI18N
fieldTree = maker.Variable(fieldModif, "client", typeTree, null); //NOI18N
modifiedClass = maker.addClassMember(modifiedClass, fieldTree);
Set<Modifier> modifiersSet = new HashSet<Modifier>();
modifiersSet.add(Modifier.PRIVATE);
modifiersSet.add(Modifier.STATIC);
modifiersSet.add(Modifier.FINAL);
fieldModif = maker.Modifiers(modifiersSet);
typeTree = maker.Identifier("String"); //NOI18N
String baseUri = resourceURI;
if (security.isSSL() && resourceURI.startsWith("http:")) { //NOI18N
baseUri = "https:"+resourceURI.substring(5); //NOI18N
}
fieldTree = maker.Variable(fieldModif, "BASE_URI", typeTree, maker.Literal(baseUri)); //NOI18N
modifiedClass = maker.addClassMember(modifiedClass, fieldTree);
return modifiedClass;
}
/* (non-Javadoc)
* @see org.netbeans.modules.websvc.rest.client.ClientGenerationStrategy#buildQueryFormParams(java.lang.StringBuilder)
*/
@Override
protected void buildQueryFormParams( StringBuilder queryString ) {
queryString.append(".queryParams(getQueryOrFormParams(queryParamNames, queryParamValues))");//NOI18N
}
@Override
protected void buildQParams(StringBuilder queryString){
queryString.append( ".queryParams(getQParams(optionalQueryParams))");//NOI18N
}
/* (non-Javadoc)
* @see org.netbeans.modules.websvc.rest.client.ClientGenerationStrategy#requiresJersey(org.openide.nodes.Node, org.netbeans.modules.websvc.rest.client.Security)
*/
@Override
boolean requiresJersey( Node context, Security security ) {
// Jersey client generation strategy is completely based on Jersey and requires it in the classpath
return true;
}
@Override
MethodTree generateConstructor(TreeMaker maker, WorkingCopy copy,
ClassTree classTree, PathFormat pf, Security security)
{
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
TypeElement clientEl = copy.getElements().getTypeElement(
"com.sun.jersey.api.client.Client"); // NOI18N
boolean isSubresource = (pf.getArguments().length>0);
List<VariableTree> paramList = new ArrayList<VariableTree>();
if (isSubresource) {
for (String arg : pf.getArguments()) {
Tree argTypeTree = maker.Identifier("String"); //NOI18N
ModifiersTree fieldModifier = maker.Modifiers(
Collections.<Modifier>emptySet());
VariableTree argFieldTree = maker.Variable(fieldModifier,
arg, argTypeTree, null); //NOI18N
paramList.add(argFieldTree);
}
}
String resURI = null; //NOI18N
String subresourceExpr = ""; //NOI18N
if (isSubresource) {
subresourceExpr = " String resourcePath = "+
getPathExpression(pf)+";"; //NOI18N
resURI = "resourcePath"; //NOI18N
} else {
resURI = getPathExpression(pf); //NOI18N
}
String SSLExpr = security.isSSL() ?
"// SSL configuration\n" + //NOI18N
"config.getProperties().put(" +
"com.sun.jersey.client.urlconnection.HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, " + //NOI18N
"new com.sun.jersey.client.urlconnection.HTTPSProperties(getHostnameVerifier(), getSSLContext()));": //NOI18N
""; //NOI18N
String body =
"{"+ //NOI18N
" com.sun.jersey.api.client.config.ClientConfig config = " + //NOI18N
"new com.sun.jersey.api.client.config.DefaultClientConfig();"+ //NOI18N
SSLExpr+
" client = "+(clientEl == null ? "com.sun.jersey.api.client.":"")+"Client.create(config);"+ //NOI18N
subresourceExpr +
("\"\"".equals(resURI) ?
" webResource = client.resource(BASE_URI);" : //NOI18N
" webResource = client.resource(BASE_URI).path("+resURI+");") + //NOI18N
"}"; //NOI18N
return maker.Constructor (
methodModifier,
Collections.<TypeParameterTree>emptyList(),
paramList,
Collections.<ExpressionTree>emptyList(),
body);
}
@Override
MethodTree generateSubresourceMethod(TreeMaker maker, WorkingCopy copy,
ClassTree classTree,PathFormat pf)
{
String body =
"{"+ //NOI18N
" String resourcePath = "+getPathExpression(pf)+";"+ //NOI18N
" webResource = client.resource(BASE_URI).path(resourcePath);"+ //NOI18N
"}"; //NOI18N
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
List<VariableTree> paramList = new ArrayList<VariableTree>();
for (String arg : pf.getArguments()) {
Tree argTypeTree = maker.Identifier("String"); // NOI18N
ModifiersTree fieldModifier = maker.Modifiers(Collections
.<Modifier> emptySet());
VariableTree argFieldTree = maker.Variable(fieldModifier, arg,
argTypeTree, null); // NOI18N
paramList.add(argFieldTree);
}
return maker.Method(methodModifier,
"setResourcePath", // NOI18N
JavaSourceHelper.createTypeTree(copy, "void"), // NOI18N
Collections.<TypeParameterTree> emptyList(), paramList,
Collections.<ExpressionTree> emptyList(), body, null); // NOI18N
}
@Override
MethodTree generateBasicAuth(TreeMaker maker, WorkingCopy copy,
List<VariableTree> authParams)
{
ModifiersTree methodModifier = maker.Modifiers(EnumSet.of(Modifier.PUBLIC, Modifier.FINAL));
String body =
"{"+ //NOI18N
" client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(username, password));"+ //NOI18N
"}"; //NOI18N
return maker.Method(methodModifier,
"setUsernamePassword", // NOI18N
JavaSourceHelper.createTypeTree(copy, "void"), // NOI18N
Collections.<TypeParameterTree> emptyList(), authParams,
Collections.<ExpressionTree> emptyList(), body, null); // NOI18N
}
@Override
MethodTree generateClose(TreeMaker maker, WorkingCopy copy){
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
return maker.Method (
methodModifier,
"close", //NOI18N
JavaSourceHelper.createTypeTree(copy, "void"), //NOI18N
Collections.<TypeParameterTree>emptyList(),
Collections.<VariableTree>emptyList(),
Collections.<ExpressionTree>emptyList(),
"{"+ //NOI18N
" client.destroy();"+ //NOI18N
"}", //NOI18N
null);
}
@Override
MethodTree generateHttpGETMethod(WorkingCopy copy,
WadlSaasMethod saasMethod, HttpMimeType mimeType,
boolean multipleMimeTypes, HttpParams httpParams, Security security)
{
String methodName = Wadl2JavaHelper.makeJavaIdentifier(saasMethod.getName()) +
(multipleMimeTypes ? "_"+mimeType.name() : ""); //NOI18N
TreeMaker maker = copy.getTreeMaker();
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
ModifiersTree paramModifier = maker.Modifiers(Collections.<Modifier>emptySet());
VariableTree classParam = maker.Variable(paramModifier,
"responseType", maker.Identifier("Class<T>"), null); //NOI18N
ExpressionTree responseTree = maker.Identifier("T");
String bodyParam = "responseType"; //NOI18N
List<TypeParameterTree> typeParams = Collections.<TypeParameterTree>
singletonList(maker.TypeParameter("T", Collections.<ExpressionTree>emptyList()));
List<VariableTree> paramList = new ArrayList<VariableTree>();
if (classParam != null) {
paramList.add(classParam);
}
StringBuilder queryP = new StringBuilder();
StringBuilder queryParamPart = new StringBuilder();
StringBuilder commentBuffer = new StringBuilder("@param responseType Class representing the response\n"); //NOI18N
if (httpParams.hasQueryParams() || httpParams.hasHeaderParams()) {
addQueryParams(maker, httpParams, security, paramList, queryP, queryParamPart, commentBuffer);
addHeaderParams(maker, httpParams, paramList, queryP, commentBuffer);
}
commentBuffer.append("@return response object (instance of responseType class)"); //NOI18N
String body =
"{"+queryParamPart+ //NOI18N
(mimeType == null ?
" return webResource"+queryP+".get("+bodyParam+");" : //NOI18N
" return webResource"+queryP+".accept("+mimeType.getMediaType()+").get("+bodyParam+");") + //NOI18N
"}"; //NOI18N
List<ExpressionTree> throwsList = new ArrayList<ExpressionTree>();
ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
"com.sun.jersey.api.client.UniformInterfaceException"); //NOI18N
throwsList.add(throwsTree);
if (Security.Authentication.SESSION_KEY == security.getAuthentication())
{
ExpressionTree ioExceptionTree = JavaSourceHelper.createTypeTree(copy,
"java.io.IOException"); //NOI18N
throwsList.add(ioExceptionTree);
}
MethodTree method = maker.Method (
methodModifier,
methodName,
responseTree,
typeParams,
paramList,
throwsList,
body,
null);
if (method != null) {
Comment comment = Comment.create(Style.JAVADOC, commentBuffer.toString());
maker.addComment(method, comment, true);
}
return method;
}
@Override
MethodTree generateHttpPOSTMethod(WorkingCopy copy,
WadlSaasMethod saasMethod, HttpMimeType requestMimeType,
boolean multipleMimeTypes, HttpParams httpParams, Security security) {
String methodName = saasMethod.getName() +
(multipleMimeTypes ? "_"+requestMimeType.name() : ""); //NOI18N
String methodPrefix = saasMethod.getWadlMethod().getName().toLowerCase();
TreeMaker maker = copy.getTreeMaker();
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
ModifiersTree paramModifier = maker.Modifiers(Collections.<Modifier>emptySet());
List<Response> response = saasMethod.getWadlMethod().getResponse();
List<VariableTree> paramList = new ArrayList<VariableTree>();
ExpressionTree responseTree = null;
List<TypeParameterTree> typeParams = null;
String bodyParam1 = "";
String bodyParam2 = "";
String ret = ""; //NOI18N
if (response != null && !response.isEmpty()) {
VariableTree classParam = maker.Variable(paramModifier,
"responseType", maker.Identifier("Class<T>"), null); //NOI18N
responseTree = maker.Identifier("T");
bodyParam1 = "responseType"; //NOI18N
typeParams = Collections.<TypeParameterTree>singletonList(
maker.TypeParameter("T", Collections.<ExpressionTree>emptyList()));
if (classParam != null) {
paramList.add(classParam);
}
ret = "return "; //NOI18N
} else {
responseTree = maker.Identifier("void");
typeParams = Collections.<TypeParameterTree>emptyList();
}
StringBuilder queryP = new StringBuilder();
StringBuilder queryParamPart = new StringBuilder();
StringBuilder commentBuffer = new StringBuilder("@param responseType Class representing the response\n"); //NOI18N
if (httpParams.hasFormParams() || httpParams.hasQueryParams() ||
httpParams.hasHeaderParams())
{
addQueryParams(maker, httpParams, security, paramList,
queryP, queryParamPart, commentBuffer);
addHeaderParams(maker, httpParams, paramList, queryP, commentBuffer);
}
if (requestMimeType != null) {
if (requestMimeType == HttpMimeType.FORM && httpParams.hasFormParams()) {
bodyParam2=(bodyParam1.length() > 0 ? ", " : "") +
"getQueryOrFormParams(formParamNames, formParamValues)"; //NOI18N
}
else {
VariableTree objectParam = maker.Variable(paramModifier,
"requestEntity", maker.Identifier("Object"), null); //NOI18N
paramList.add(0, objectParam);
bodyParam2=(bodyParam1.length() > 0 ? ", " : "") + "requestEntity"; //NOI18N
commentBuffer.append("@param requestEntity request data");
}
}
commentBuffer.append("@return response object (instance of responseType class)"); //NOI18N
List<ExpressionTree> throwsList = new ArrayList<ExpressionTree>();
ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
"com.sun.jersey.api.client.UniformInterfaceException"); //NOI18N
throwsList.add(throwsTree);
if (Security.Authentication.SESSION_KEY == security.getAuthentication()) {
ExpressionTree ioExceptionTree = JavaSourceHelper.createTypeTree(copy, "java.io.IOException"); //NOI18N
throwsList.add(ioExceptionTree);
}
String body =
"{"+queryParamPart + //NOI18N
(requestMimeType == null ?
" "+ret+"webResource"+queryP+"."+methodPrefix+"("+bodyParam1+bodyParam2+");" : //NOI18N
" "+ret+"webResource"+queryP+".type("+requestMimeType.getMediaType()+
")."+methodPrefix+"("+bodyParam1+bodyParam2+");") + //NOI18N
"}"; //NOI18N
MethodTree method = maker.Method (
methodModifier,
methodName,
responseTree,
typeParams,
paramList,
throwsList,
body,
null); //NOI18N
if (method != null) {
Comment comment = Comment.create(Style.JAVADOC, commentBuffer.toString());
maker.addComment(method, comment, true);
}
return method;
}
@Override
MethodTree generateFormMethod(TreeMaker maker, WorkingCopy copy){
String mvMapClass = "javax.ws.rs.core.MultivaluedMap"; //NOI18N
TypeElement mvMapEl = copy.getElements().getTypeElement(mvMapClass);
String mvType = mvMapEl == null ? mvMapClass : "MultivaluedMap"; //NOI18N
String body =
"{"+ //NOI18N
mvType+"<String,String> qParams = new com.sun.jersey.api.representation.Form();"+ //NOI18N
"for (int i=0;i< paramNames.length;i++) {" + //NOI18N
" if (paramValues[i] != null) {"+ //NOI18N
" qParams.add(paramNames[i], paramValues[i]);"+ //NOI18N
" }"+ //NOI18N
"}"+ //NOI18N
"return qParams;"+ //NOI18N
"}"; //NOI18N
ModifiersTree methodModifier = maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
ExpressionTree returnTree =
mvMapEl == null ?
copy.getTreeMaker().Identifier(mvMapClass) :
copy.getTreeMaker().QualIdent(mvMapEl);
List<VariableTree> paramList = new ArrayList<VariableTree>();
ModifiersTree paramModifier = maker.Modifiers(Collections.<Modifier>emptySet());
paramList.add(maker.Variable(paramModifier, "paramNames", maker.Identifier("String[]"), null)); //NOI18N
paramList.add(maker.Variable(paramModifier, "paramValues", maker.Identifier("String[]"), null)); //NOI18N
return maker.Method (
methodModifier,
"getQueryOrFormParams", //NOI18N
returnTree,
Collections.<TypeParameterTree>emptyList(),
paramList,
Collections.<ExpressionTree>emptyList(),
body,
null); //NOI18N
}
@Override
MethodTree generateOptionalFormMethod(TreeMaker maker , WorkingCopy copy ){
String mvMapClass = "javax.ws.rs.core.MultivaluedMap"; //NOI18N
TypeElement mvMapEl = copy.getElements().getTypeElement(mvMapClass);
String mvType = mvMapEl == null ? mvMapClass : "MultivaluedMap"; //NOI18N
String body =
"{"+ //NOI18N
mvType+"<String,String> qParams = new com.sun.jersey.api.representation.Form();"+ //NOI18N
"for (String qParam : optionalParams) {" + //NOI18N
" String[] qPar = qParam.split(\"=\");"+ //NOI18N
" if (qPar.length > 1) qParams.add(qPar[0], qPar[1])"+ //NOI18N
"}"+ //NOI18N
"return qParams;"+ //NOI18N
"}"; //NOI18N
ModifiersTree methodModifier = maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
ExpressionTree returnTree =
mvMapEl == null ?
copy.getTreeMaker().Identifier(mvMapClass) :
copy.getTreeMaker().QualIdent(mvMapEl);
ModifiersTree paramModifier = maker.Modifiers(Collections.<Modifier>emptySet());
VariableTree param = maker.Variable(paramModifier, "optionalParams", maker.Identifier("String..."), null); //NOI18N
return maker.Method (
methodModifier,
"getQParams", //NOI18N
returnTree,
Collections.<TypeParameterTree>emptyList(),
Collections.<VariableTree>singletonList(param),
Collections.<ExpressionTree>emptyList(),
body,
null); //NOI18N
}
@Override
ClassTree generateOAuthMethods( String projectType,
WorkingCopy copy, ClassTree classTree, Metadata oauthMetadata)
{
return OAuthHelper.addOAuthMethods( projectType, copy, classTree,
oauthMetadata, classTree.getSimpleName().toString());
}
@Override
Collection<MethodTree> generateHttpGETMethod(WorkingCopy copy,
HttpMethod httpMethod, HttpMimeType mimeType, boolean multipleMimeTypes)
{
Collection<MethodTree> result = new ArrayList<MethodTree>(2);
String responseType = httpMethod.getReturnType();
String path = httpMethod.getPath();
String methodName = httpMethod.getName() + (multipleMimeTypes ?
"_"+mimeType.name() : ""); //NOI18N
TreeMaker maker = copy.getTreeMaker();
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
ModifiersTree paramModifier = maker.Modifiers(
Collections.<Modifier>emptySet());
VariableTree classParam = null;
ExpressionTree responseTree = null;
String bodyParam = ""; //NOI18N
List<TypeParameterTree> typeParams = null;
if (String.class.getName().equals(responseType)) {
responseTree = maker.Identifier("String"); //NOI18N
bodyParam="String.class"; //NOI18N
typeParams = Collections.<TypeParameterTree>emptyList();
} else {
responseTree = maker.Identifier("T"); //NOI18N
bodyParam="responseType"; //NOI18N
classParam = maker.Variable(paramModifier, "responseType",
maker.Identifier("Class<T>"), null); //NOI18N
typeParams = Collections.<TypeParameterTree>singletonList(
maker.TypeParameter("T",
Collections.<ExpressionTree>emptyList())); //NOI18N
}
List<VariableTree> paramList = new ArrayList<VariableTree>();
if (classParam != null) {
paramList.add(classParam);
}
ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
"com.sun.jersey.api.client.UniformInterfaceException"); //NOI18N
StringBuilder body = new StringBuilder(
"{ WebResource resource = webResource;"); // NOI18N
StringBuilder resourceBuilder = new StringBuilder();
if (path.length() == 0) {
if ( mimeType != null ){
resourceBuilder.append(".accept("); // NOI18N
resourceBuilder.append(mimeType.getMediaType());
resourceBuilder.append(')');
}
buildQueryParams( body , httpMethod, paramList , maker );
}
else {
PathFormat pf = getPathFormat(path);
for (String arg : pf.getArguments()) {
Tree typeTree = maker.Identifier("String"); //NOI18N
ModifiersTree fieldModifier = maker.Modifiers(Collections.<Modifier>emptySet());
VariableTree fieldTree = maker.Variable(fieldModifier, arg, typeTree, null); //NOI18N
paramList.add(fieldTree);
}
buildQueryParams( body , httpMethod, paramList , maker );
body.append("resource=resource.path("); // NOI18N
body.append(getPathExpression(pf));
body.append(')');
if ( mimeType != null ){
resourceBuilder.append(".accept("); // NOI18N
resourceBuilder.append(mimeType.getMediaType());
resourceBuilder.append(')');
}
}
body.append( "return resource"); // NOI18N
body.append(resourceBuilder);
body.append(".get("); // NOI18N
body.append(bodyParam);
body.append(");"); // NOI18N
body.append('}'); // NOI18N
MethodTree method = maker.Method (
methodModifier,
methodName,
responseTree,
typeParams,
paramList,
Collections.<ExpressionTree>singletonList(throwsTree),
body.toString(),
null);
result.add( method );
return result;
}
@Override
MethodTree generateHttpPOSTMethod(WorkingCopy copy, HttpMethod httpMethod,
HttpMimeType requestMimeType, boolean multipleMimeTypes)
{
String methodPrefix = httpMethod.getType().toLowerCase();
String responseType = httpMethod.getReturnType();
String path = httpMethod.getPath();
String methodName = httpMethod.getName() +
(multipleMimeTypes ? "_"+requestMimeType.name() : ""); //NOI18N
TreeMaker maker = copy.getTreeMaker();
ModifiersTree methodModifier = maker.Modifiers(
Collections.<Modifier>singleton(Modifier.PUBLIC));
ModifiersTree paramModifier = maker.Modifiers(Collections.<Modifier>emptySet());
VariableTree classParam = null;
ExpressionTree responseTree = null;
String bodyParam1 = ""; //NOI18N
String ret = ""; //NOI18N
List<TypeParameterTree> typeParams =
Collections.<TypeParameterTree>emptyList();
if ("javax.ws.rs.core.Response".equals(responseType)) { //NOI18N
TypeElement clientResponseEl = copy.getElements().getTypeElement(
"com.sun.jersey.api.client.ClientResponse"); //NOI18N
ret = "return "; //NOI18N
responseTree = (clientResponseEl == null ?
copy.getTreeMaker().Identifier("com.sun.jersey.api.client.ClientResponse") : // NOI18N
copy.getTreeMaker().QualIdent(clientResponseEl));
bodyParam1 = (clientResponseEl == null ?
"com.sun.jersey.api.client.ClientResponse.class" : //NOI18N
"ClientResponse.class"); //NOI18N
}
else if ("void".equals(responseType)) { //NOI18N
responseTree = maker.Identifier("void"); //NOI18N
}
else if (String.class.getName().equals(responseType)) {
responseTree = maker.Identifier("String"); //NOI18N
ret = "return "; //NOI18N
bodyParam1="String.class"; //NOI18N
}
else {
responseTree = maker.Identifier("T"); //NOI18N
ret = "return "; //NOI18N
bodyParam1="responseType"; //NOI18N
classParam = maker.Variable(paramModifier, "responseType",
maker.Identifier("Class<T>"), null); //NOI18N
typeParams = Collections.<TypeParameterTree>singletonList(
maker.TypeParameter("T", Collections.<ExpressionTree>emptyList()));
}
// create param list
List<VariableTree> paramList = new ArrayList<VariableTree>();
if (classParam != null) {
paramList.add(classParam);
}
String bodyParam2 = "";
if (requestMimeType != null) {
if (requestMimeType == HttpMimeType.FORM) {
// PENDING
} else {
VariableTree objectParam = maker.Variable(paramModifier,
"requestEntity", maker.Identifier("Object"), null); //NOI18N
paramList.add(objectParam);
bodyParam2=(bodyParam1.length() > 0 ? ", " : "") + "requestEntity"; //NOI18N
}
}
// throws
ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
"com.sun.jersey.api.client.UniformInterfaceException"); //NOI18N
if (path.length() == 0) {
// body
String body =
"{"+
(requestMimeType == null ?
" "+ret+"webResource."+methodPrefix+"("+
bodyParam1+bodyParam2+");" : //NOI18N
" "+ret+"webResource.type("+
requestMimeType.getMediaType()+")."+methodPrefix+
"("+bodyParam1+bodyParam2+");") + //NOI18N
"}"; //NOI18N
return maker.Method (
methodModifier,
methodName,
responseTree,
typeParams,
paramList,
Collections.singletonList(throwsTree),
body,
null);
} else {
// add path params to param list
PathFormat pf = getPathFormat(path);
for (String arg : pf.getArguments()) {
Tree typeTree = maker.Identifier("String"); //NOI18N
ModifiersTree fieldModifier = maker.Modifiers(
Collections.<Modifier>emptySet());
VariableTree fieldTree = maker.Variable(fieldModifier, arg,
typeTree, null);
paramList.add(fieldTree);
}
// body
String body =
"{"+ //NOI18N
(requestMimeType == null ?
" "+ret+"webResource.path("+getPathExpression(pf)+
")."+methodPrefix+"("+bodyParam1+bodyParam2+");" : //NOI18N
" "+ret+"webResource.path("+getPathExpression(pf)+
").type("+requestMimeType.getMediaType()+")."+
methodPrefix+"("+bodyParam1+bodyParam2+");") + //NOI18N
"}"; //NOI18N
return maker.Method (
methodModifier,
methodName,
responseTree,
typeParams,
paramList,
Collections.<ExpressionTree>singletonList(throwsTree),
body,
null); //NOI18N
}
}
}