📄 portleturlhelper.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: PortletUrlHelper.java
package org.apache.struts2.portlet.util;
import com.opensymphony.xwork2.util.TextUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import javax.portlet.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsException;
import org.apache.struts2.portlet.context.PortletActionContext;
public class PortletUrlHelper
{
public static final String ENCODING = "UTF-8";
private static final Log LOG = LogFactory.getLog(org/apache/struts2/portlet/util/PortletUrlHelper);
public PortletUrlHelper()
{
}
public static String buildUrl(String action, String namespace, String method, Map params, String type, String mode, String state)
{
return buildUrl(action, namespace, method, params, null, type, mode, state, true, true);
}
public static String buildUrl(String action, String namespace, String method, Map params, String scheme, String type, String portletMode, String windowState,
boolean includeContext, boolean encodeResult)
{
StringBuffer resultingAction = new StringBuffer();
RenderRequest request = PortletActionContext.getRenderRequest();
RenderResponse response = PortletActionContext.getRenderResponse();
LOG.debug((new StringBuilder()).append("Creating url. Action = ").append(action).append(", Namespace = ").append(namespace).append(", Type = ").append(type).toString());
namespace = prependNamespace(namespace, portletMode);
if (!TextUtils.stringSet(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);
String key;
String val;
for (StringTokenizer tok = new StringTokenizer(queryStr, "&"); tok.hasMoreTokens(); params.put(key, new String[] {
val
}))
{
String paramVal = tok.nextToken();
key = paramVal.substring(0, paramVal.indexOf('='));
val = paramVal.substring(paramVal.indexOf('=') + 1);
}
}
if (TextUtils.stringSet(namespace))
{
resultingAction.append(namespace);
if (!action.startsWith("/") && !namespace.endsWith("/"))
resultingAction.append("/");
}
resultingAction.append(action);
if (TextUtils.stringSet(method))
resultingAction.append("!").append(method);
LOG.debug((new StringBuilder()).append("Resulting actionPath: ").append(resultingAction).toString());
params.put("struts.portlet.action", new String[] {
resultingAction.toString()
});
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("struts.portlet.mode", portletMode);
url.setParameters(ensureParamsAreStringArrays(params));
if ("HTTPS".equalsIgnoreCase(scheme))
try
{
url.setSecure(true);
}
catch (PortletSecurityException e)
{
LOG.error("Cannot set scheme to https", e);
}
try
{
url.setPortletMode(getPortletMode(request, portletMode));
url.setWindowState(getWindowState(request, windowState));
}
catch (Exception e)
{
LOG.error((new StringBuilder()).append("Unable to set mode or state:").append(e.getMessage()).toString(), e);
}
result = url.toString();
if (result.indexOf("&") >= 0)
result = result.replace("&", "&");
return result;
}
private static String prependNamespace(String namespace, String portletMode)
{
StringBuffer sb = new StringBuffer();
PortletMode mode = PortletActionContext.getRenderRequest().getPortletMode();
if (TextUtils.stringSet(portletMode))
mode = new PortletMode(portletMode);
String portletNamespace = PortletActionContext.getPortletNamespace();
String modeNamespace = (String)PortletActionContext.getModeNamespaceMap().get(mode);
LOG.debug((new StringBuilder()).append("PortletNamespace: ").append(portletNamespace).append(", modeNamespace: ").append(modeNamespace).toString());
if (TextUtils.stringSet(portletNamespace))
sb.append(portletNamespace);
if (TextUtils.stringSet(modeNamespace))
{
if (!modeNamespace.startsWith("/"))
sb.append("/");
sb.append(modeNamespace);
}
if (TextUtils.stringSet(namespace))
{
if (!namespace.startsWith("/"))
sb.append("/");
sb.append(namespace);
}
LOG.debug((new StringBuilder()).append("Resulting namespace: ").append(sb).toString());
return sb.toString();
}
public static String buildResourceUrl(String value, Map params)
{
StringBuffer sb = new StringBuffer();
if (!value.startsWith("/"))
sb.append("/");
sb.append(value);
if (params != null && params.size() > 0)
{
sb.append("?");
Iterator it = params.keySet().iterator();
do
try
{
if (!it.hasNext())
break;
String key = (String)it.next();
String val = (String)params.get(key);
sb.append(URLEncoder.encode(key, "UTF-8")).append("=");
sb.append(URLEncoder.encode(val, "UTF-8"));
if (it.hasNext())
sb.append("&");
}
catch (UnsupportedEncodingException e)
{
throw new StrutsException("Encoding UTF-8 not found");
}
while (true);
}
RenderResponse resp = PortletActionContext.getRenderResponse();
RenderRequest req = PortletActionContext.getRenderRequest();
return resp.encodeURL((new StringBuilder()).append(req.getContextPath()).append(sb.toString()).toString());
}
public static Map ensureParamsAreStringArrays(Map params)
{
Map result = null;
if (params != null)
{
result = new LinkedHashMap(params.size());
for (Iterator it = params.keySet().iterator(); it.hasNext();)
{
Object key = it.next();
Object val = params.get(key);
if (val instanceof String[])
result.put(key, val);
else
result.put(key, new String[] {
val.toString()
});
}
}
return result;
}
private static WindowState getWindowState(RenderRequest portletReq, String windowState)
{
WindowState state = portletReq.getWindowState();
if (TextUtils.stringSet(windowState))
{
state = portletReq.getWindowState();
if ("maximized".equalsIgnoreCase(windowState))
state = WindowState.MAXIMIZED;
else
if ("normal".equalsIgnoreCase(windowState))
state = WindowState.NORMAL;
else
if ("minimized".equalsIgnoreCase(windowState))
state = WindowState.MINIMIZED;
}
if (state == null)
state = WindowState.NORMAL;
return state;
}
private static PortletMode getPortletMode(RenderRequest portletReq, String portletMode)
{
PortletMode mode = portletReq.getPortletMode();
if (TextUtils.stringSet(portletMode))
{
mode = portletReq.getPortletMode();
if ("edit".equalsIgnoreCase(portletMode))
mode = PortletMode.EDIT;
else
if ("view".equalsIgnoreCase(portletMode))
mode = PortletMode.VIEW;
else
if ("help".equalsIgnoreCase(portletMode))
mode = PortletMode.HELP;
}
if (mode == null)
mode = PortletMode.VIEW;
return mode;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -