?? baseurlimpl.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.internal.impl;
import java.io.IOException;
import java.io.Writer;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.portlet.BaseURL;
import javax.portlet.PortalContext;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.PortletSecurityException;
import javax.portlet.ResourceURL;
import javax.portlet.WindowState;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.PortletContainer;
import org.apache.pluto.PortletContainerException;
import org.apache.pluto.PortletWindow;
import org.apache.pluto.om.portlet.PortletDefinition;
import org.apache.pluto.om.portlet.PortletApplicationDefinition;
import org.apache.pluto.om.portlet.Supports;
import org.apache.pluto.spi.PortletURLListener;
import org.apache.pluto.spi.PortletURLProvider;
import org.apache.pluto.util.StringManager;
import org.apache.pluto.util.StringUtils;
/**
* Implementation of JSR-286 <code>BaseURL</code>, which includes a refactoring
* of <code>PortletURLImpl</code>.
*
* @since 2.0
*/
public class BaseURLImpl implements BaseURL {
private static final Log LOG = LogFactory.getLog(BaseURLImpl.class);
private static final StringManager EXCEPTIONS = StringManager.getManager(PortletURLImpl.class.getPackage().getName());
private boolean escapeXML;
protected Map parameters = new HashMap();
protected Map<String, String[]> publicRenderParameters = new HashMap<String, String[]>();
protected boolean secure;
protected PortletContainer container;
protected PortletMode mode = null;
protected PortletWindow portletWindow;
protected javax.servlet.http.HttpServletRequest servletRequest;
protected javax.servlet.http.HttpServletResponse servletResponse;
protected WindowState state;
protected boolean isAction;
protected boolean isResourceServing;
protected PortalContext context;
public BaseURLImpl(PortletContainer container,
PortletWindow portletWindow,
javax.servlet.http.HttpServletRequest servletRequest,
javax.servlet.http.HttpServletResponse servletResponse,
boolean isAction, boolean isResourceServing) {
this.container = container;
this.portletWindow = portletWindow;
this.servletRequest = servletRequest;
this.servletResponse = servletResponse;
secure = servletRequest.isSecure();
this.isAction = isAction;
this.isResourceServing = isResourceServing;
this.context = container.getRequiredContainerServices().getPortalContext();
if (!isResourceServing)
checkCacheLevel();
}
private String getCacheability() {
String cacheLevel[] = getRenderParameters("CACHABILITY");
if (cacheLevel == null)
return ResourceURL.PAGE;
else
return cacheLevel[0];
}
private void checkCacheLevel(){
if (getCacheability().equals(ResourceURL.FULL) || getCacheability().equals(ResourceURL.PORTLET))
throw new IllegalStateException("Action or RenderURLs have no FULL or PORTLET cache level.");
}
public void setParameter(String name, String value) {
if (name == null || value == null) {
throw new IllegalArgumentException(
"name and value must not be null");
}
List<String> publicRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();
if (publicRenderParameterNames == null){
parameters.put(name, new String[]{value});
}
else{
if (publicRenderParameterNames.contains(name) && !this.isAction && !this.isResourceServing){
publicRenderParameters.put(name,new String[] {value});
}
else{
parameters.put(name, new String[]{value});
}
}
}
public void setParameter(String name, String[] values) {
if (name == null || values == null) {
throw new IllegalArgumentException(
"name and values must not be null or values be an empty array");
}
List<String> publicRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();
if (publicRenderParameterNames == null){
parameters.put(name, StringUtils.copy(values));
}
else{
if (publicRenderParameterNames.contains(name)&& !this.isAction && !this.isResourceServing){
publicRenderParameters.put(name,StringUtils.copy(values));
}
else{
parameters.put(name, StringUtils.copy(values));
}
}
}
public void setParameters(Map<String, String[]> parameters) {
if (parameters == null) {
throw new IllegalArgumentException(
"Render parameters must not be null.");
}
for (Iterator iter = parameters.entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
if (!(entry.getKey() instanceof String)) {
throw new IllegalArgumentException(
"Key must not be null and of type java.lang.String.");
}
if (!(entry.getValue() instanceof String[])) {
throw new IllegalArgumentException(
"Value must not be null and of type java.lang.String[].");
}
}
this.parameters.clear();
this.publicRenderParameters.clear();
List<String> publicPortletRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();
if (parameters.keySet()!= null){
for (Object key : parameters.keySet()) {
if (publicPortletRenderParameterNames == null)
this.setParameter((String)key, (String[])parameters.get(key));
else{
//test if this is a public parameter
if (publicPortletRenderParameterNames.contains(key)&& !this.isAction && !this.isResourceServing)
publicRenderParameters.put((String)key, (String[])parameters.get(key));
else
this.setParameter((String)key, (String[])parameters.get(key));
}
}
}
}
public void setSecure(boolean secure) throws PortletSecurityException {
PortletURLProvider urlProvider = container
.getRequiredContainerServices()
.getPortalCallbackService()
.getPortletURLProvider(servletRequest, portletWindow);
if(urlProvider.isSecureSupported()) {
urlProvider.setSecure();
} else {
LOG.info("Secure URLs not supported.");
}
}
public String toString(){
PortletURLProvider urlProvider = container
.getRequiredContainerServices()
.getPortalCallbackService()
.getPortletURLProvider(servletRequest, portletWindow);
PortletURLListener portletURLFilterListener = container
.getRequiredContainerServices()
.getPortalCallbackService().getPortletURLListener();
if (mode != null) {
urlProvider.setPortletMode(mode);
}
if (state != null) {
urlProvider.setWindowState(state);
}
if (isAction) {
urlProvider.setAction(true);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -