PortletRedirectionUrl portletUrl = (PortletRedirectionUrl) url;
// create the base URL for the portlet
final IPortletWindow portletWindow = this.portletWindowRegistry.getOrCreateDefaultPortletWindowByFname(request, portletUrl.getFname());
final IPortalUrlBuilder portalUrlBuilder = this.portalUrlProvider.getPortalUrlBuilderByPortletWindow(request, portletWindow.getPortletWindowId(), portletUrl.getType());
final IPortletUrlBuilder portletUrlBuilder = portalUrlBuilder.getTargetedPortletUrlBuilder();
portletUrlBuilder.setPortletMode(portletUrl.getMode());
portletUrlBuilder.setWindowState(WindowState.MAXIMIZED);
// for each of the defined additional parameters, add a matching
// parameter to the portlet URL
for (Map.Entry<String, String[]> param : portletUrl.getAdditionalParameters().entrySet()) {
portletUrlBuilder.addParameter(param.getKey(), param.getValue());
}
// for each of the defined dynamic parameters, add a parameter if
// the value submitted to this service was non-null
for (Map.Entry<String, String> param : portletUrl.getDynamicParameters().entrySet()) {
String[] values = request.getParameterValues(param.getKey());
if (values != null) {
portletUrlBuilder.addParameter(param.getValue(), values);
}
}
if (!extraPath.isEmpty()) {
List<String> paramNames = portletUrl.getPathParameters();
ListIterator<String> itt = paramNames.listIterator();
while(itt.hasNext() && !extraPath.isEmpty()) {
String param = itt.next();
String value;
if (itt.hasNext()){
value = extraPath.remove(0);
} else {
value = StringUtils.join(extraPath, "/");
}
if (StringUtils.isEmpty(value)) {
break;
} else
portletUrlBuilder.addParameter(param, value);
}
}
return portalUrlBuilder.getUrlString();
}