*/
public static String buildUrl(String action, String namespace, Map params,
String scheme, String type, String portletMode, String windowState,
boolean includeContext, boolean encodeResult) {
RenderRequest request = PortletActionContext.getRenderRequest();
RenderResponse response = PortletActionContext.getRenderResponse();
LOG.debug("Creating url. Action = " + action + ", Namespace = "
+ namespace + ", Type = " + type);
namespace = prependNamespace(namespace, portletMode);
if(StringUtils.isEmpty(portletMode)) {
portletMode = PortletActionContext.getRenderRequest().getPortletMode().toString();
}
String result = null;
int paramStartIndex = action.indexOf('?');
if (paramStartIndex > 0) {
String value = action;
action = value.substring(0, value.indexOf('?'));
String queryStr = value.substring(paramStartIndex + 1);
StringTokenizer tok = new StringTokenizer(queryStr, "&");
while (tok.hasMoreTokens()) {
String paramVal = tok.nextToken();
String key = paramVal.substring(0, paramVal.indexOf('='));
String val = paramVal.substring(paramVal.indexOf('=') + 1);
params.put(key, new String[] { val });
}
}
if (StringUtils.isNotEmpty(namespace)) {
StringBuffer sb = new StringBuffer();
sb.append(namespace);
if(!action.startsWith("/") && !namespace.endsWith("/")) {
sb.append("/");
}
action = sb.append(action).toString();
LOG.debug("Resulting actionPath: " + action);
}
params.put(PortletActionConstants.ACTION_PARAM, new String[] { action });
PortletURL url = null;
if ("action".equalsIgnoreCase(type)) {
LOG.debug("Creating action url");
url = response.createActionURL();
} else {
LOG.debug("Creating render url");
url = response.createRenderURL();
}
params.put(PortletActionConstants.MODE_PARAM, portletMode);
url.setParameters(ensureParamsAreStringArrays(params));