* @param params
* the resource method's parameters
* @return the URL statement
*/
private Statement generateUrl(final JaxrsResourceMethodParameters params) {
BlockStatement block = new BlockStatement();
block.addStatement(Stmt.declareVariable("url", StringBuilder.class,
Stmt.newObject(StringBuilder.class, new StringStatement("getBaseUrl()"))));
// construct path using @PathParams and @MatrixParams
String path = resourceMethod.getPath();
ContextualStatementBuilder pathValue = Stmt.loadLiteral(path);
for (String pathParamName : JaxrsResourceMethodParameters.getPathParameterNames(path)) {
String pathParamId = pathParamName;
if (pathParamName.contains(":")) {
pathParamId = pathParamName.split(":")[0];
}
Statement pathParam = marshal(params.getPathParameter(pathParamId));
if (params.needsEncoding(pathParamId)) {
pathParam = encodePath(pathParam);
}
pathValue = pathValue.invoke("replace", "{" + pathParamName + "}", pathParam);
}
if (params.getMatrixParameters() != null) {
for (String matrixParamName : params.getMatrixParameters().keySet()) {
pathValue = pathValue.invoke("concat", ";" + matrixParamName + "=")
.invoke("concat", encodePath(marshal(params.getMatrixParameter(matrixParamName))));
}
}
ContextualStatementBuilder urlBuilder = Stmt.loadVariable("url").invoke(APPEND, pathValue);
// construct query using @QueryParams
if (params.getQueryParameters() != null) {
urlBuilder = urlBuilder.invoke(APPEND, "?");
int i = 0;
for (String queryParamName : params.getQueryParameters().keySet()) {
for (Statement queryParam : params.getQueryParameters(queryParamName)) {
if (i++ > 0)
urlBuilder = urlBuilder.invoke(APPEND, "&");
urlBuilder = urlBuilder.invoke(APPEND, queryParamName).invoke(APPEND, "=")
.invoke(APPEND, encodeQuery(marshal(queryParam)));
}
}
}
if (urlBuilder != null)
block.addStatement(urlBuilder);
return block;
}