You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by de...@apache.org on 2007/09/11 22:51:27 UTC
svn commit: r574692 - in /portals/pluto/branches/1.1-286-COMPATIBILITY:
pluto-container/src/main/java/org/apache/pluto/internal/impl/
pluto-container/src/main/java/org/apache/pluto/spi/
pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/po...
Author: dettborn
Date: Tue Sep 11 13:51:26 2007
New Revision: 574692
URL: http://svn.apache.org/viewvc?rev=574692&view=rev
Log:
Committed patch: PortletURLGenerationListener091107.patch from JIRA 431 (http://issues.apache.org/jira/browse/PLUTO-431).
Added:
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLListener.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLListenerImpl.java
Modified:
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceURLImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/BaseURLImpl.java Tue Sep 11 13:51:26 2007
@@ -22,6 +22,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import javax.portlet.BaseURL;
@@ -36,6 +37,7 @@
import org.apache.pluto.descriptors.portlet.PortletDD;
import org.apache.pluto.descriptors.portlet.SupportsDD;
import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.spi.PortletURLListener;
import org.apache.pluto.spi.PortletURLProvider;
import org.apache.pluto.spi.PublicRenderParameterProvider;
import org.apache.pluto.util.StringManager;
@@ -148,6 +150,7 @@
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)) {
@@ -162,9 +165,18 @@
this.parameters.clear();
this.publicRenderParameters.clear();
+ List<String> publicPortletRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
if (parameters.keySet()!= null){
for (Object key : parameters.keySet()) {
- this.setParameter((String)key, (String[])parameters.get(key));
+ if (publicPortletRenderParameterNames == null)
+ this.setParameter((String)key, (String[])parameters.get(key));
+ else{
+ //test if this is a public parameter
+ if (publicPortletRenderParameterNames.contains(key))
+ publicRenderParameters.put((String)key, (String[])parameters.get(key));
+ else
+ this.setParameter((String)key, (String[])parameters.get(key));
+ }
}
}
@@ -183,6 +195,9 @@
.getPortalCallbackService()
.getPortletURLProvider(servletRequest, internalPortletWindow);
+ PortletURLListener portletURLFilterListener = portletURLFilterListener = container
+ .getRequiredContainerServices()
+ .getPortalCallbackService().getPortletURLListener();
if (mode != null) {
urlProvider.setPortletMode(mode);
}
@@ -192,15 +207,19 @@
if (isAction) {
urlProvider.setAction(true);
}
- if (isResourceServing){
+ else if (isResourceServing){
urlProvider.setResourceServing(true);
}
+
+ portletURLFilterListener.callListener(internalPortletWindow,this,isAction,isResourceServing);
+
if (secure) {
urlProvider.setSecure();
}
if (!isResourceServing)
urlProvider.clearParameters();
+
urlProvider.setParameters(parameters);
urlProvider.setPublicRenderParameters(publicRenderParameters);
@@ -255,13 +274,15 @@
Iterator supports = dd.getSupports().iterator();
while(supports.hasNext()) {
SupportsDD support = (SupportsDD)supports.next();
- Iterator modes = support.getPortletModes().iterator();
- while(modes.hasNext()) {
- String md = (String)modes.next();
- if (md.toUpperCase().equals(
- mode.toString().toUpperCase())) {
- return true;
- }
+ if (support.getPortletModes() != null){
+ Iterator modes = support.getPortletModes().iterator();
+ while(modes.hasNext()) {
+ String md = (String)modes.next();
+ if (md.toUpperCase().equals(
+ mode.toString().toUpperCase())) {
+ return true;
+ }
+ }
}
}
String message = EXCEPTIONS.getString(
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java Tue Sep 11 13:51:26 2007
@@ -24,6 +24,7 @@
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -445,14 +446,14 @@
public String getParameter(String name) {
ArgumentUtility.validateNotNull("parameterName", name);
- PublicRenderParameterProvider provider = container
- .getRequiredContainerServices()
- .getPortalCallbackService()
- .getPublicRenderParameterProvider();
+ List<String> publicRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
PortletURLProvider urlProvider = container.getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(getHttpServletRequest(), internalPortletWindow);
String[] values = null;
- if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), name)){
- values = urlProvider.getPublicRenderParameters(name);
+ if (publicRenderParameterNames != null){
+ if (publicRenderParameterNames.contains(name))
+ values = urlProvider.getPublicRenderParameters(name);
+ else
+ values = (String[]) baseGetParameterMap().get(name);
}
else{
values = (String[]) baseGetParameterMap().get(name);
@@ -470,15 +471,17 @@
public String[] getParameterValues(String name) {
ArgumentUtility.validateNotNull("parameterName", name);
- PublicRenderParameterProvider provider = container
- .getRequiredContainerServices()
- .getPortalCallbackService()
- .getPublicRenderParameterProvider();
- PortletURLProvider urlProvider = container.getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(getHttpServletRequest(), internalPortletWindow);
+ List<String> publicRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
+ PortletURLProvider urlProvider = container.getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getPortletURLProvider(getHttpServletRequest(), internalPortletWindow);
String[] values = null;
- if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), name)){
- values = urlProvider.getPublicRenderParameters(name);
+ if (publicRenderParameterNames != null){
+ if (publicRenderParameterNames.contains(name))
+ values = urlProvider.getPublicRenderParameters(name);
+ else
+ values = (String[]) baseGetParameterMap().get(name);
}
else{
values = (String[]) baseGetParameterMap().get(name);
@@ -491,7 +494,22 @@
}
public Map getParameterMap() {
- return Collections.unmodifiableMap(StringUtils.copyParameters(baseGetParameterMap()));
+ Map<String, String[]>map = StringUtils.copyParameters(baseGetParameterMap());
+ List<String> publicRenderParameterNames = internalPortletWindow.getPortletEntity().getPortletDefinition().getPublicRenderParameter();
+ if (publicRenderParameterNames!=null){
+ PortletURLProvider urlProvider = container
+ .getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getPortletURLProvider(getHttpServletRequest(), internalPortletWindow);
+ String[] values = null;
+ for (String string : publicRenderParameterNames) {
+ values = urlProvider.getPublicRenderParameters(string);
+ if (values != null){
+ map.put(string, values);
+ }
+ }
+ }
+ return Collections.unmodifiableMap(map);
}
public boolean isSecure() {
@@ -758,8 +776,7 @@
}
public Map<String, String[]> getPrivateParameterMap() {
- // TODO Auto-generated method stub
- throw new UnsupportedOperationException("This method needs to be implemented.");
+ return Collections.unmodifiableMap(StringUtils.copyParameters(baseGetParameterMap()));
}
public Map<String, String[]> getPublicParameterMap() {
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceURLImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceURLImpl.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceURLImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceURLImpl.java Tue Sep 11 13:51:26 2007
@@ -71,8 +71,8 @@
}
else{
String[] values = new String[tmp.length+1];
- System.arraycopy(tmp, 0, values, 0, tmp.length);
- values[tmp.length] = value;
+ values[0] = value;
+ System.arraycopy(tmp, 0, values, 1, tmp.length);
super.setParameter(name, values);
}
}
@@ -89,8 +89,8 @@
}
else{
String[] tmpValues = new String[tmp.length+values.length];
- System.arraycopy(tmp, 0, tmpValues, 0, tmp.length);
- System.arraycopy(values, 0, tmpValues, tmp.length, values.length);
+ System.arraycopy(values, 0, tmpValues, 0, values.length);
+ System.arraycopy(tmp, 0, tmpValues, values.length, tmp.length);
super.setParameter(name, tmpValues);
}
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java Tue Sep 11 13:51:26 2007
@@ -18,6 +18,7 @@
import java.util.Map;
+import javax.portlet.BaseURL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -92,5 +93,11 @@
* @return FilterManager
*/
public FilterManager getFilterManager();
+
+ /**
+ * Returns the PortletURLListener which calls the Filter for the URL.
+ * @return
+ */
+ public PortletURLListener getPortletURLListener();
}
Added: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLListener.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLListener.java?rev=574692&view=auto
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLListener.java (added)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLListener.java Tue Sep 11 13:51:26 2007
@@ -0,0 +1,25 @@
+/*
+ * 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.spi;
+
+import javax.portlet.BaseURL;
+
+import org.apache.pluto.internal.InternalPortletWindow;
+
+public interface PortletURLListener {
+ public void callListener(InternalPortletWindow internalPortletWindow, BaseURL baseURL, boolean isAction, boolean isResource);
+}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java Tue Sep 11 13:51:26 2007
@@ -103,6 +103,7 @@
"description", "description1",
"displayName", "displayName1",
"publicRenderParameter",
+ "urlGenerationListener",
"containerRuntimeOption"
})
public class PortletDD {
@@ -202,6 +203,11 @@
@XmlElement(name = "supported-public-render-parameter")
private List<String> publicRenderParameter = null;
+ /** the supported public render parameter */
+ @XmlElement(name = "url-generation-listener")
+ private List<String> urlGenerationListener = null;
+
+
/** the container runtime options of this portlet */
@XmlElement(name = "container-runtime-option")
private List<ContainerRuntimeOptionDD> containerRuntimeOption = null;
@@ -461,6 +467,16 @@
public List<ContainerRuntimeOptionDD> getContainerRuntimeOption() {
return containerRuntimeOption;
+ }
+
+
+ public List<String> getUrlGenerationListener() {
+ return urlGenerationListener;
+ }
+
+
+ public void setUrlGenerationListener(List<String> urlGenerationListener) {
+ this.urlGenerationListener = urlGenerationListener;
}
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java?rev=574692&r1=574691&r2=574692&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java Tue Sep 11 13:51:26 2007
@@ -20,6 +20,7 @@
import java.util.Collections;
import java.util.Map;
+import javax.portlet.BaseURL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -30,9 +31,10 @@
import org.apache.pluto.spi.EventProvider;
import org.apache.pluto.spi.FilterManager;
import org.apache.pluto.spi.PortalCallbackService;
+import org.apache.pluto.spi.PortletURLListener;
import org.apache.pluto.spi.PortletURLProvider;
-import org.apache.pluto.spi.ResourceURLProvider;
import org.apache.pluto.spi.PublicRenderParameterProvider;
+import org.apache.pluto.spi.ResourceURLProvider;
/**
* @author <a href="mailto:ddewolf@apache.org">David H. DeWolf</a>
@@ -120,6 +122,11 @@
*/
public FilterManager getFilterManager() {
return FilterManagerImpl.getFilterManager();
+ }
+
+
+ public PortletURLListener getPortletURLListener() {
+ return PortletURLListenerImpl.getPortletURLListener();
}
}
Added: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLListenerImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLListenerImpl.java?rev=574692&view=auto
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLListenerImpl.java (added)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLListenerImpl.java Tue Sep 11 13:51:26 2007
@@ -0,0 +1,78 @@
+/*
+ * 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.List;
+
+import javax.portlet.BaseURL;
+import javax.portlet.PortletURL;
+import javax.portlet.PortletURLGenerationListener;
+import javax.portlet.ResourceURL;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.internal.InternalPortletWindow;
+import org.apache.pluto.spi.PortletURLListener;
+
+public class PortletURLListenerImpl implements PortletURLListener {
+ /** Logger. */
+ private static final Log LOG = LogFactory.getLog(PortletURLListenerImpl.class);
+ private static PortletURLListenerImpl portletURLListener = new PortletURLListenerImpl();
+
+ public static PortletURLListener getPortletURLListener(){
+ return portletURLListener;
+ }
+
+
+ public synchronized void callListener(InternalPortletWindow internalPortletWindow, BaseURL baseURL, boolean isAction, boolean isResource){
+ if (isAction&&isResource){
+ String message = "It is not allowed to set both values from isAction and isResource to true";
+ LOG.error(message, new IllegalArgumentException(message));
+ }
+ //this list is needed for the classnames
+ List<String> portletURLFilterList = internalPortletWindow.getPortletEntity().getPortletDefinition().getUrlGenerationListener();
+ //Iterate over the classnames and for each entry in the list the filter..URL is called.
+ if (portletURLFilterList != null){
+ for (String string : portletURLFilterList) {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Class clazz;
+ try {
+ clazz = loader.loadClass(string);
+ if (clazz != null){
+ PortletURLGenerationListener portletURLGenerationListener = (PortletURLGenerationListener)clazz.newInstance();
+ if (isAction)
+ portletURLGenerationListener.filterActionURL((PortletURL)baseURL);
+ else if (isResource)
+ portletURLGenerationListener.filterResourceURL((ResourceURL)baseURL);
+ else
+ portletURLGenerationListener.filterRenderURL((PortletURL)baseURL);
+ }
+ } catch (ClassNotFoundException e) {
+ String message = "The class isn't found.";
+ LOG.error(message);
+ } catch (InstantiationException e) {
+ String message = "The instantioation fail.";
+ LOG.error(message);
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}