📄 portlethref.java
字号:
/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.portlet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletSecurityException;
import javax.portlet.PortletURL;
import javax.portlet.RenderResponse;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.AnyPredicate;
import org.apache.commons.collections.functors.InstanceofPredicate;
import org.apache.commons.collections.functors.NullPredicate;
import org.apache.commons.collections.map.PredicatedMap;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.displaytag.util.Href;
/**
* Implementation of the Href interface that generates URLs using the javax.portlet APIs. As the portlet API supports
* the concept of WindowStates, PorletModes, secure URLs and actions versus render the implementation supports these
* concepts as well through the standard {@link Href} APIs. <br>
* <br>
* The features are manipulated using special parameter names and values: <table>
* <tr>
* <th>Feature</th>
* <th>Parameter Name</th>
* <th>Parameter Value</th>
* </tr>
* <tr>
* <td>Render vs Action URL</td>
* <td>{@link #PARAM_TYPE} (portlet:type)</td>
* <td>"render" for RenderURLs, "action" for ActionURLs</td>
* </tr>
* <tr>
* <td>WindowState</td>
* <td>{@link #PARAM_STATE} (portlet:state)</td>
* <td>The value is used directly for the WindowState name</td>
* </tr>
* <tr>
* <td>PorltetMode</td>
* <td>{@link #PARAM_MODE} (portlet:mode)</td>
* <td>The value is used directly for the PortletMode name</td>
* </tr>
* <tr>
* <td>Secure URL</td>
* <td>{@link #PARAM_SECURE} (portlet:secure)</td>
* <td>"true" requests a secure URL, anything else requests a standard URL</td>
* </tr>
* </table>
* @author Eric Dalquist <a href="mailto:dalquist@gmail.com">dalquist@gmail.com</a>
* @version $Id: PortletHref.java 999 2006-01-22 20:01:46Z fgiust $
*/
public class PortletHref implements Href
{
// Constants for working with the special parameters
private static final String PARAM_PREFIX = "portlet:";
public static final String PARAM_MODE = PARAM_PREFIX + "mode";
public static final String PARAM_STATE = PARAM_PREFIX + "state";
public static final String PARAM_SECURE = PARAM_PREFIX + "secure";
public static final String PARAM_TYPE = PARAM_PREFIX + "type";
public static final String TYPE_RENDER = "render";
public static final String TYPE_ACTION = "action";
/**
* D1597A17A6.
*/
private static final long serialVersionUID = 899149338534L;
// Predicated for type checking the parameter map
private static final Predicate PRED_TYPE_OF_STRING = new InstanceofPredicate(String.class);
private static final Predicate PRED_TYPE_OF_STRING_ARRY = new InstanceofPredicate(String[].class);
private static final Predicate PRED_OR_STR_STRARR = new AnyPredicate(new Predicate[]{
PRED_TYPE_OF_STRING,
PRED_TYPE_OF_STRING_ARRY,
NullPredicate.INSTANCE});
// Portlet request and response are needed for feature checking and generating the URLs
private final PortletRequest portletRequest;
private final RenderResponse renderResponse;
private Map parameters = this.createParameterMap();
private boolean isAction;
private PortletMode requestedMode;
private WindowState requestedState;
private boolean requestedSecure;
private String anchor;
/**
* Creates a new PortletHref. The actual PortletURL object is not generated until the toString method is called.
* @param portletRequest request to to feature checking with, may not be null.
* @param renderResponse response to generate the URLs from, may not be null.
*/
public PortletHref(PortletRequest portletRequest, RenderResponse renderResponse)
{
if (portletRequest == null)
{
throw new IllegalArgumentException("portletRequest may not be null");
}
if (renderResponse == null)
{
throw new IllegalArgumentException("renderResponse may not be null");
}
this.portletRequest = portletRequest;
this.renderResponse = renderResponse;
}
/**
* @see org.displaytag.util.Href#setFullUrl(java.lang.String)
*/
public void setFullUrl(String baseUrl)
{
// do nothing
}
/**
* @return Returns the isAction.
*/
public boolean isAction()
{
return this.isAction;
}
/**
* @param isAction The isAction to set.
*/
public void setAction(boolean isAction)
{
this.isAction = isAction;
}
/**
* @return Returns the requestedMode.
*/
public PortletMode getRequestedMode()
{
return this.requestedMode;
}
/**
* @param requestedMode The requestedMode to set.
*/
public void setRequestedMode(PortletMode requestedMode)
{
this.requestedMode = requestedMode;
}
/**
* @return Returns the requestedSecure.
*/
public boolean isRequestedSecure()
{
return this.requestedSecure;
}
/**
* @param requestedSecure The requestedSecure to set.
*/
public void setRequestedSecure(boolean requestedSecure)
{
this.requestedSecure = requestedSecure;
}
/**
* @return Returns the requestedState.
*/
public WindowState getRequestedState()
{
return this.requestedState;
}
/**
* @param requestedState The requestedState to set.
*/
public void setRequestedState(WindowState requestedState)
{
this.requestedState = requestedState;
}
/**
* @see org.displaytag.util.Href#addParameter(java.lang.String, int)
*/
public Href addParameter(String name, int value)
{
return this.addParameter(name, Integer.toString(value));
}
/**
* @see org.displaytag.util.Href#addParameter(String, Object)
*/
public Href addParameter(String name, Object objValue)
{
String value = ObjectUtils.toString(objValue, null);
if (name != null && name.startsWith(PARAM_PREFIX))
{
if (PARAM_TYPE.equals(name))
{
if (TYPE_RENDER.equals(value))
{
this.setAction(false);
}
else if (TYPE_ACTION.equals(value))
{
this.setAction(true);
}
else
{
throw new IllegalArgumentException("Value of parameter '"
+ name
+ "' must be equal to '"
+ TYPE_RENDER
+ "' or '"
+ TYPE_ACTION
+ "'. '"
+ value
+ "' is not allowed.");
}
}
else if (PARAM_SECURE.equals(name))
{
if (new Boolean(value).booleanValue())
{
this.setRequestedSecure(true);
}
else
{
this.setRequestedSecure(false);
}
}
else if (PARAM_MODE.equals(name))
{
if (value == null)
{
this.setRequestedMode(null);
}
else
{
final PortletMode mode = new PortletMode(value);
if (!this.portletRequest.isPortletModeAllowed(mode))
{
throw new IllegalArgumentException("PortletMode '"
+ mode
+ "' is not allowed for this request.");
}
this.setRequestedMode(mode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -