int port = request.getServerPort();
String contextPath = request.getContextPath();
String servletName = request.getServletPath();
// Construct portal URL using info retrieved from servlet request.
PortalURL portalURL = null;
if ((request.isSecure() && port != 443)
|| (!request.isSecure() && port != 80)) {
portalURL = new PortalURLImpl(protocol, server, port, contextPath, servletName);
} else {
portalURL = new PortalURLImpl(protocol, server, contextPath, servletName);
}
String pathInfo = request.getPathInfo();
if (pathInfo == null) {
return portalURL;
}
if (LOG.isDebugEnabled()) {
LOG.debug("Parsing request pathInfo: " + pathInfo);
}
StringBuffer renderPath = new StringBuffer();
StringTokenizer st = new StringTokenizer(pathInfo, "/", false);
while (st.hasMoreTokens()) {
String token = st.nextToken();
// Part of the render path: append to renderPath.
if (!token.startsWith(PREFIX)) {
// renderPath.append(token);
//Fix for PLUTO-243
renderPath.append('/').append(token);
}
// Action window definition: portalURL.setActionWindow().
else if (token.startsWith(PREFIX + ACTION)) {
portalURL.setActionWindow(decodeControlParameter(token)[0]);
}
// Window state definition: portalURL.setWindowState().
else if (token.startsWith(PREFIX + WINDOW_STATE)) {
String[] decoded = decodeControlParameter(token);
portalURL.setWindowState(decoded[0], new WindowState(decoded[1]));
}
// Portlet mode definition: portalURL.setPortletMode().
else if (token.startsWith(PREFIX + PORTLET_MODE)) {
String[] decoded = decodeControlParameter(token);
portalURL.setPortletMode(decoded[0], new PortletMode(decoded[1]));
}
// Portal URL parameter: portalURL.addParameter().
else {
String value = null;
if (st.hasMoreTokens()) {
value = st.nextToken();
}
portalURL.addParameter(decodeParameter(token, value));
}
}
if (renderPath.length() > 0) {
portalURL.setRenderPath(renderPath.toString());
}
// Return the portal URL.
return portalURL;
}