📄 portleturlproviderimpl.java
字号:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.pluto.driver.services.container;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.portlet.PortletMode;
import javax.portlet.PortletSecurityException;
import javax.portlet.WindowState;
import javax.servlet.http.HttpServletRequest;
import org.apache.pluto.PortletWindow;
import org.apache.pluto.driver.core.PortalRequestContext;
import org.apache.pluto.driver.url.PortalURL;
import org.apache.pluto.driver.url.PortalURLParameter;
import org.apache.pluto.spi.PortletURLProvider;
/**
*
*/
public class PortletURLProviderImpl implements PortletURLProvider {
private PortalURL url;
private String window;
/** The parameters including parameters appended to the dispatching URI. */
protected Map<String, String[]> parameters = null;
public PortletURLProviderImpl(HttpServletRequest request,
PortletWindow portletWindow) {
PortalRequestContext ctx = (PortalRequestContext)
request.getAttribute(PortalRequestContext.REQUEST_KEY);
url = ctx.createPortalURL();
this.window = portletWindow.getId().getStringId();
}
public void setPortletMode(PortletMode mode) {
url.setPortletMode(window, mode);
}
public void setWindowState(WindowState state) {
url.setWindowState(window, state);
}
public void setResourceServing(boolean resourceServing) {
if (resourceServing) {
url.setResourceWindow(window);
} else {
url.setResourceWindow(null);
}
}
public boolean isResourceServing(){
if (url.getResourceWindow() != null)
return true;
else
return false;
}
public void setAction(boolean action) {
if (action) {
url.setActionWindow(window);
} else {
url.setActionWindow(null);
}
}
public void setSecure() throws PortletSecurityException {
throw new PortletSecurityException("Secure URLs (via PortletURLProvider.setSecure()) is not supported.");
}
public boolean isSecureSupported() {
return false;
}
public void clearParameters() {
url.clearParameters(window);
}
public void setParameters(Map parameters) {
Iterator it = parameters.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
PortalURLParameter param = new PortalURLParameter(
window,
(String) entry.getKey(),
(String[]) entry.getValue());
url.addParameter(param);
}
}
public String[] getPrivateRenderParameters(String name){
String[] values = null;
for (Iterator it=url.getParameters().iterator();it.hasNext();){
PortalURLParameter param = (PortalURLParameter)it.next();
if (param.getName().equals(name))
values = param.getValues();
}
return values;
}
public String[] getPublicRenderParameters(String name){
Map publicRenderParaMap = url.getPublicParameters();
String[] values = null;
for (Iterator it=publicRenderParaMap.keySet().iterator();it.hasNext();){
String tmp = (String) it.next();
if (tmp.equals(name)){
values = (String[])publicRenderParaMap.get(tmp);
}
}
return values;
}
public void setPublicRenderParameters(Map parameters) {
url.addPublicRenderParametersNew(parameters);
}
public String toString() {
return url.toString();
}
public void savePortalURL(HttpServletRequest request) {
PortalRequestContext ctx = (PortalRequestContext)
request.getAttribute(PortalRequestContext.REQUEST_KEY);
ctx.setPortalURL(url);
}
public Map<String, String[]> getRenderParameters()
{
return this.parameters;
}
public Map<String, String[]> parseRenderParameters(Map<String, String[]> parentMap, String queryString)
{
if (parentMap == null)
{
parameters = null;
}
else
{
// Copy all the original render parameters.
parameters = new HashMap<String, String[]>(parentMap);
if (queryString != null && queryString.trim().length() > 0)
{
// Merge the appended parameters to the render parameter map.
// The original render parameters should not be overwritten.
mergeQueryString(parameters, queryString);
}
}
return parameters;
}
/**
* Parses the appended query string and merges the appended parameters to
* the original parameters. Query parameters are name-value pairs separated
* by the '<code>&</code>' character.
*
* @param parameters
* the original parameters map.
* @param queryString
* the appended query string.
*/
private void mergeQueryString(Map parameters, String queryString)
{
// Create the appended parameters map:
// key is the parameter name as a string,
// value is a List of parameter values (List of String).
Map appendedParameters = new HashMap();
StringTokenizer st = new StringTokenizer(queryString, "&", false);
while (st.hasMoreTokens())
{
String token = st.nextToken();
int equalIndex = token.indexOf("=");
if (equalIndex > 0)
{
String key = token.substring(0, equalIndex);
String value = null;
if (equalIndex < token.length() - 1)
{
value = token.substring(equalIndex + 1);
}
else
{
value = "";
}
List values = (List) appendedParameters.get(key);
if (values == null)
{
values = new ArrayList();
}
values.add(value);
appendedParameters.put(key, values);
}
}
// Merge the appended parameters and the original parameters.
for (Iterator it = appendedParameters.keySet().iterator(); it.hasNext();)
{
String key = (String) it.next();
List values = (List) appendedParameters.get(key);
// If the parameter name (key) exists, merge parameter values.
if (parameters.containsKey(key))
{
String[] originalValues = (String[]) parameters.get(key);
if (originalValues != null)
{
for (int i = 0; i < originalValues.length; i++)
{
values.add(originalValues[i]);
}
}
}
parameters.put(key, values.toArray(new String[values.size()]));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -