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 cd...@apache.org on 2006/12/14 04:06:46 UTC
svn commit: r486942 - in /portals/pluto/branches/1.1-286-COMPATIBILITY:
pluto-container/src/main/java/org/apache/pluto/
pluto-container/src/main/java/org/apache/pluto/internal/impl/
pluto-container/src/main/java/org/apache/pluto/spi/ pluto-portal-drive...
Author: cdoremus
Date: Wed Dec 13 19:06:45 2006
New Revision: 486942
URL: http://svn.apache.org/viewvc?view=rev&rev=486942
Log:
Applied patch submitted in PLUTO-271. Thank you Torsten.
Added:
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/SharedRenderProvider.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/SharedRenderProviderImpl.java
Modified:
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/Constants.java
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/spi/PortalCallbackService.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLProvider.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLProviderImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/core/PortalRequestContext.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLParser.java
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/Constants.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/Constants.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/Constants.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/Constants.java Wed Dec 13 19:06:45 2006
@@ -110,5 +110,10 @@
* The public key, to store the event name in the request
*/
public static final String EVENT_NAME = "EventName";
+
+ /**
+ * The public key, to store the SharedRenderProvider in the request
+ */
+ public static final String SHARED_RENDER_PROVIDER = "SharedRenderProvider";
}
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?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- 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 Wed Dec 13 19:06:45 2006
@@ -33,6 +33,7 @@
import org.apache.pluto.descriptors.portlet.SupportsDD;
import org.apache.pluto.internal.InternalPortletWindow;
import org.apache.pluto.spi.PortletURLProvider;
+import org.apache.pluto.spi.SharedRenderProvider;
import org.apache.pluto.util.StringManager;
import org.apache.pluto.util.StringUtils;
@@ -46,6 +47,7 @@
private static final StringManager EXCEPTIONS = StringManager.getManager(PortletURLImpl.class.getPackage().getName());
protected Map parameters = new HashMap();
+ protected Map<String, String[]> sharedRenderParameter = new HashMap<String, String[]>();
protected boolean secure;
protected PortletContainer container;
protected PortletMode mode = null;
@@ -73,21 +75,52 @@
}
public void setParameter(String name, String value) {
- if (name == null || value == null) {
+ if (name == null) {
throw new IllegalArgumentException(
"name and value must not be null");
}
-
- parameters.put(name, new String[]{value});
+ SharedRenderProvider provider = container.getRequiredContainerServices().getPortalCallbackService().getSharedRenderProvider(servletRequest);
+ if (value == null){
+ if (provider.isSharedRenderParameter(internalPortletWindow.getId().getStringId(), name)){
+ sharedRenderParameter.put(name,new String[] {null});
+
+ }
+ else{
+ throw new IllegalArgumentException(
+ "name and value must not be null");
+ }
+ }
+
+ if (provider.isSharedRenderParameter(internalPortletWindow.getId().getStringId(), name)){
+ sharedRenderParameter.put(name,new String[] {value});
+ }
+ else{
+ parameters.put(name, new String[]{value});
+ }
}
public void setParameter(String name, String[] values) {
- if (name == null || values == null || values.length == 0) {
+ if (name == null) {
throw new IllegalArgumentException(
- "name and values must not be null or values be an empty array");
+ "name and values must not be null or values be an empty array");
+ }
+ SharedRenderProvider provider = container.getRequiredContainerServices().getPortalCallbackService().getSharedRenderProvider(servletRequest);
+ if (values == null){
+ if (provider.isSharedRenderParameter(internalPortletWindow.getId().getStringId(), name)){
+ sharedRenderParameter.put(name,new String[] {null});
+ }
+ else{
+ throw new IllegalArgumentException(
+ "name and values must not be null or values be an empty array");
+ }
+ }
+
+ if (provider.isSharedRenderParameter(internalPortletWindow.getId().getStringId(), name)){
+ sharedRenderParameter.put(name,values);
+ }
+ else{
+ parameters.put(name, StringUtils.copy(values));
}
-
- parameters.put(name, StringUtils.copy(values));
}
public void setParameters(Map parameters) {
@@ -137,8 +170,11 @@
urlProvider.setSecure();
}
urlProvider.clearParameters();
+
urlProvider.setParameters(parameters);
-
+
+ urlProvider.setSharedRenderParameters(sharedRenderParameter);
+
url.append(urlProvider.toString());
return url.toString();
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?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- 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 Wed Dec 13 19:06:45 2006
@@ -24,6 +24,8 @@
import org.apache.pluto.internal.InternalPortletRequest;
import org.apache.pluto.internal.InternalPortletWindow;
import org.apache.pluto.internal.PortletEntity;
+import org.apache.pluto.spi.PortletURLProvider;
+import org.apache.pluto.spi.SharedRenderProvider;
import org.apache.pluto.util.ArgumentUtility;
import org.apache.pluto.util.Enumerator;
import org.apache.pluto.util.NamespaceMapper;
@@ -32,10 +34,12 @@
import org.apache.pluto.util.impl.NamespaceMapperImpl;
import javax.portlet.PortalContext;
+import javax.portlet.Portlet;
import javax.portlet.PortletContext;
import javax.portlet.PortletMode;
import javax.portlet.PortletRequest;
import javax.portlet.PortletSession;
+import javax.portlet.PortletURL;
import javax.portlet.WindowState;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
@@ -422,7 +426,18 @@
public String getParameter(String name) {
ArgumentUtility.validateNotNull("parameterName", name);
- String[] values = (String[]) baseGetParameterMap().get(name);
+ SharedRenderProvider provider = container
+ .getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getSharedRenderProvider(getHttpServletRequest());
+ PortletURLProvider urlProvider = container.getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(getHttpServletRequest(), internalPortletWindow);
+ String[] values = null;
+ if (provider.isSharedRenderParameter(internalPortletWindow.getId().getStringId(), name)){
+ values = urlProvider.getSharedRenderParameter(name);
+ }
+ else{
+ values = (String[]) baseGetParameterMap().get(name);
+ }
if (values != null && values.length > 0) {
return values[0];
} else {
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?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- 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 Wed Dec 13 19:06:45 2006
@@ -77,5 +77,12 @@
public EventProvider getEventProvider(HttpServletRequest request, HttpServletResponse response);
public EventProvider getEventProvider();
+
+ /**
+ * Returns a Shared Render Provider, this is used to register get and set all shared-render-parameter.
+ * @param request This is the request where the provider is stored in.
+ * @return the SharedRenderProvider.
+ */
+ public SharedRenderProvider getSharedRenderProvider(HttpServletRequest request);
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLProvider.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLProvider.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLProvider.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortletURLProvider.java Wed Dec 13 19:06:45 2006
@@ -79,6 +79,12 @@
*/
public void setParameters(Map parameters);
+ /**
+ * Sets the given shared-render-parameters as parameters into the URL.
+ * @param parameters a map containing the name [java.lang.String] and value
+ * [java.lang.String[]] of the parameters.
+ */
+ public void setSharedRenderParameters(Map parameters);
/**
* Returns the URL in string format. This method should only be called
@@ -88,4 +94,11 @@
public String toString();
public void savePortalURL(HttpServletRequest request);
+
+ /**
+ * Gets the values from the current shared-render-parameter from this request.
+ * @param name Parametername
+ * @return the values for the Parameter, can be null, if there is no Parameter with this name.
+ */
+ public String[] getSharedRenderParameter(String name);
}
Added: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/SharedRenderProvider.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/SharedRenderProvider.java?view=auto&rev=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/SharedRenderProvider.java (added)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/SharedRenderProvider.java Wed Dec 13 19:06:45 2006
@@ -0,0 +1,40 @@
+package org.apache.pluto.spi;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author <a href="mailto:dettborn@minet.uni-jena.de">Torsten Dettborn</a>
+ *
+ */
+
+public interface SharedRenderProvider {
+
+ /**
+ * Set the sharedRenderParameter for the SharedRenderProvider
+ * @param portletName
+ * @param SharedRenderParameter
+ * @throws IOException
+ */
+ public void registerSharedRenderParameter(String portletID,String SharedRenderParameter);
+ /**
+ * Deletes the portletWindowID in the list from the map, with the key sharedRenderParameter
+ * @param portletWindowID string unique WindowID
+ * @param sharedRenderParameter string
+ * @throws IOException will be thrown, if the parameter are null or the length is null;
+ */
+ public void deleteRegisteredSharedRenderParameter(String portletWindowID, String sharedRenderParameter);
+ /**
+ * Delete all entries in the map, which contain the portletWindowID
+ * @param portletWindowID string unique windowID
+ */
+ public void deleteRegisteredSharedRenderParameter(String portletWindowID);
+
+ /**
+ * Checkes the map if it contain the renderParameter and the windowID.
+ * @param windowsID string unique windowID
+ * @param renderParameter string
+ * @return true
+ */
+ public boolean isSharedRenderParameter(String portletWindowID, String sharedRenderParameter);
+}
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?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- 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 Wed Dec 13 19:06:45 2006
@@ -28,6 +28,7 @@
import org.apache.pluto.spi.PortalCallbackService;
import org.apache.pluto.spi.PortletURLProvider;
import org.apache.pluto.spi.ResourceURLProvider;
+import org.apache.pluto.spi.SharedRenderProvider;
/**
* @author <a href="mailto:ddewolf@apache.org">David H. DeWolf</a>
@@ -100,6 +101,11 @@
public EventProvider getEventProvider() {
return EventProviderImpl.getEventProviderImpl();
+ }
+
+
+ public SharedRenderProvider getSharedRenderProvider(HttpServletRequest request) {
+ return SharedRenderProviderImpl.getSharedRenderProviderImpl();
}
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLProviderImpl.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/PortletURLProviderImpl.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLProviderImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletURLProviderImpl.java Wed Dec 13 19:06:45 2006
@@ -90,6 +90,7 @@
url.clearParameters(window);
}
+
public void setParameters(Map parameters) {
Iterator it = parameters.entrySet().iterator();
while (it.hasNext()) {
@@ -101,6 +102,22 @@
url.addParameter(param);
}
}
+
+ public String[] getSharedRenderParameter(String name){
+ Map sharedRenderParaMap = url.getSharedParameters();
+ String[] values = null;
+ for (Iterator it=sharedRenderParaMap.keySet().iterator();it.hasNext();){
+ String tmp = (String) it.next();
+ if (tmp.equals(name)){
+ values = (String[])sharedRenderParaMap.get(tmp);
+ }
+ }
+ return values;
+ }
+
+ public void setSharedRenderParameters(Map parameters) {
+ url.addSharedRenderParametersNew(parameters);
+ }
public String toString() {
return url.toString();
@@ -111,5 +128,7 @@
request.getAttribute(PortalRequestContext.REQUEST_KEY);
ctx.setPortalURL(url);
}
+
+
}
Added: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/SharedRenderProviderImpl.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/SharedRenderProviderImpl.java?view=auto&rev=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/SharedRenderProviderImpl.java (added)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/SharedRenderProviderImpl.java Wed Dec 13 19:06:45 2006
@@ -0,0 +1,135 @@
+package org.apache.pluto.driver.services.container;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pluto.spi.SharedRenderProvider;
+import org.apache.pluto.util.ArgumentUtility;
+
+/**
+ *
+ * @author <a href="mailto:dettborn@minet.uni-jena.de">Torsten Dettborn</a>
+ *
+ */
+
+public class SharedRenderProviderImpl implements SharedRenderProvider {
+
+ private static Map<String, List<String>> portalRender = new HashMap<String, List<String>>(100);
+ /** Logger. */
+ private static final Log LOG = LogFactory.getLog(SharedRenderProviderImpl.class);
+ private static SharedRenderProvider renderprovider = new SharedRenderProviderImpl();
+
+ public SharedRenderProviderImpl(){
+ }
+
+ /**
+ * factory method
+ * gets the SharedRenderProvider out of the Request, or sets a new one
+ * @param request The {@link HttpServletRequest} of the SharedRenderProvider
+ * @return The corresponding SharedRenderProvider instance
+ */
+ public static SharedRenderProvider getSharedRenderProviderImpl() {
+ return renderprovider;
+ }
+
+ /**
+ * Register the portletWindowID with the SharedRenderParameter, which is the key of the Map portalRender
+ * @param portletWindow String unique windowID
+ * @param renderParameter String
+ * @throws IOException will be thrown, if the parameter are null or the length is null;
+ */
+ public void registerSharedRenderParameter(String portletWindowID,String sharedRenderParameter){
+ LOG.debug("Register the SharedRenderParameter");
+ //checks the parameter portletWindowID and SharedRenderParameter
+ ArgumentUtility.validateNotNull("attributeName", portletWindowID);
+ ArgumentUtility.validateNotEmpty("attributeName", portletWindowID);
+ ArgumentUtility.validateNotNull("attributeName", sharedRenderParameter);
+ ArgumentUtility.validateNotEmpty("attributeName", sharedRenderParameter);
+ List<String> portletWindowIDList;
+ if (!portalRender.containsKey(sharedRenderParameter)){
+ //If the SharedRenderParameter not exists.
+ portletWindowIDList = new ArrayList<String>();
+ portletWindowIDList.add(portletWindowID);
+ portalRender.put(sharedRenderParameter, portletWindowIDList);
+ }
+ else{
+ portletWindowIDList = portalRender.get(sharedRenderParameter);
+ //If the SharedRenderParameter allready exist.
+ if (!isSharedRenderParameter(portletWindowID, sharedRenderParameter)){
+ //The Portlet will be register, when the entry doesn't exist
+ portletWindowIDList.add(portletWindowID);
+ }
+ }
+ }
+
+ /**
+ * Checkes the map if it contain the renderParameter and the windowID.
+ * @param windowsID string unique windowID
+ * @param renderParameter string
+ * @return true
+ */
+ public boolean isSharedRenderParameter(String portletWindowID, String sharedRenderParameter){
+ ArgumentUtility.validateNotEmpty("attributeName", portletWindowID);
+ ArgumentUtility.validateNotEmpty("attributeName", sharedRenderParameter);
+
+ if (!portalRender.containsKey(sharedRenderParameter)){
+ return false;
+ }
+ else{
+ List <String> portalWindowIDList = portalRender.get(sharedRenderParameter);
+ for (Iterator iter = portalWindowIDList.iterator(); iter.hasNext();) {
+ String ID = (String) iter.next();
+ if (ID.equals(portletWindowID)){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Deletes the portletWindowID in the list from the map, with the key sharedRenderParameter
+ * @param portletWindowID string unique WindowID
+ * @param sharedRenderParameter string
+ * @throws IOException will be thrown, if the parameter are null or the length is null;
+ */
+ public void deleteRegisteredSharedRenderParameter(String portletWindowID, String sharedRenderParameter){
+ LOG.debug("Delete the WindowID for the SharedRenderParameter");
+ ArgumentUtility.validateNotEmpty("attributeName", portletWindowID);
+ ArgumentUtility.validateNotEmpty("attributeName", sharedRenderParameter);
+
+ if (portalRender.containsKey(sharedRenderParameter)){
+ List<String> portletWindowIDList = portalRender.get(sharedRenderParameter);
+ portletWindowIDList.remove(portletWindowID);
+ if (portletWindowIDList.size()==0){
+ portalRender.remove(sharedRenderParameter);
+ }
+ }
+ }
+ /**
+ * Delete all entries in the map, which contain the portletWindowID
+ * @param portletWindowID string unique windowID
+ */
+ public void deleteRegisteredSharedRenderParameter(String portletWindowID){
+ LOG.debug("Delete the SharedRenderParameter");
+ ArgumentUtility.validateNotEmpty("attributeName", portletWindowID);
+
+ if (portalRender.size()<1)
+ return;
+
+
+ for (Iterator iter = portalRender.keySet().iterator(); iter.hasNext();) {
+ String sharedRenderParam = (String) iter.next();
+ List<String> portletIDs = portalRender.get(sharedRenderParam);
+ portletIDs.remove(portletWindowID);
+ }
+ }
+}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLImpl.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/url/impl/PortalURLImpl.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLImpl.java Wed Dec 13 19:06:45 2006
@@ -19,6 +19,8 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import javax.portlet.PortletMode;
@@ -34,6 +36,7 @@
import org.apache.pluto.driver.services.portal.PageConfig;
import org.apache.pluto.driver.url.PortalURL;
import org.apache.pluto.driver.url.PortalURLParameter;
+import org.apache.pluto.driver.url.PortalURLParser;
/**
* The portal URL.
@@ -59,6 +62,10 @@
/** Parameters of the portlet windows. */
private Map parameters = new HashMap();
+ private Map<String, String[]> sharedParameterCurrent = new HashMap<String, String[]>();
+
+ private Map<String, String[]> sharedParameterNew = new HashMap<String, String[]>();
+
/** Logger. */
private static final Log LOG = LogFactory.getLog(PortalURLImpl.class);
@@ -129,10 +136,47 @@
public void addParameter(PortalURLParameter param) {
parameters.put(param.getWindowId() + param.getName(), param);
}
+
+ public void addSharedRenderParametersNew(Map parameters){
+ for (Iterator iter=parameters.keySet().iterator(); iter.hasNext();) {
+ String key = (String) iter.next();
+ if (sharedParameterNew.containsKey(key)){
+ sharedParameterNew.remove(key);
+ }
+ String[] values = (String[])parameters.get(key);
+ if (values[0]!= null){
+ sharedParameterNew.put(key, values);
+ }
+ }
+ }
public Collection getParameters() {
return parameters.values();
}
+
+ public void addSharedParameterCurrent(String name, String[] values){
+ sharedParameterCurrent.put(name, values);
+ }
+
+ public Map<String, String[]> getSharedParameters() {
+ Map<String,String[]> tmp = new HashMap<String, String[]>();
+
+ for (Iterator iter = sharedParameterCurrent.keySet().iterator(); iter.hasNext();) {
+ String paramname = (String) iter.next();
+ if (!sharedParameterNew.containsKey(paramname)){
+ String[] paramvalue = sharedParameterCurrent.get(paramname);
+ tmp.put(paramname, paramvalue);
+ }
+ }
+ for (Iterator iter = sharedParameterNew.keySet().iterator();iter.hasNext();){
+ String paramname = (String) iter.next();
+ String[] paramvalue = sharedParameterNew.get(paramname);
+ if (paramvalue[0]!=null){
+ tmp.put(paramname, paramvalue);
+ }
+ }
+ return tmp;
+ }
public void setActionWindow(String actionWindow) {
this.actionWindow = actionWindow;
@@ -210,9 +254,9 @@
* Converts to a string representing the portal URL.
* @return a string representing the portal URL.
* @see org.apache.pluto.driver.url.impl.PortalURLParserImpl#toString(PortalURL)
- */
- public String toString() {
- return PortalURLParserImpl.getParser().toString(this);
+ */
+ public String toString(){
+ return PortalURLParserImpl.getParser().toString(this);
}
@@ -246,6 +290,7 @@
portalURL.renderPath = renderPath;
portalURL.actionWindow = actionWindow;
portalURL.resourceWindow = resourceWindow;
+ portalURL.sharedParameterCurrent = sharedParameterCurrent;
return portalURL;
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.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/url/impl/PortalURLParserImpl.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/url/impl/PortalURLParserImpl.java Wed Dec 13 19:06:45 2006
@@ -25,7 +25,9 @@
import javax.portlet.WindowState;
import javax.servlet.http.HttpServletRequest;
+import org.apache.pluto.spi.SharedRenderProvider;
import org.apache.pluto.util.StringUtils;
+import org.apache.pluto.driver.services.container.SharedRenderProviderImpl;
import org.apache.pluto.driver.url.impl.PortalURLImpl;
import org.apache.pluto.driver.url.PortalURLParser;
import org.apache.pluto.driver.url.PortalURL;
@@ -56,6 +58,7 @@
private static final String ACTION = "ac";
private static final String RESOURCE = "rs";
private static final String RENDER_PARAM = "rp";
+ private static final String SHARED_RENDER_PARAM = "sp";
private static final String WINDOW_STATE = "ws";
private static final String PORTLET_MODE = "pm";
private static final String VALUE_DELIM = "0x0";
@@ -157,12 +160,28 @@
portalURL.setPortletMode(decoded[0], new PortletMode(decoded[1]));
}
// Portal URL parameter: portalURL.addParameter().
- else {
+ else if(token.startsWith(PREFIX + RENDER_PARAM)) {
String value = null;
if (st.hasMoreTokens()) {
value = st.nextToken();
}
- portalURL.addParameter(decodeParameter(token, value));
+ //set the
+ PortalURLParameter param = decodeParameter(token, value);
+ portalURL.addParameter(param);
+
+
+ }
+ else{ // besser if PREFIX + SHARED_PARAM
+ String value = null;
+ if (st.hasMoreTokens()) {
+ value = st.nextToken();
+ }
+ PortalURLParameter param = decodeSharedParameter(token, value);
+ SharedRenderProvider provider = SharedRenderProviderImpl
+ .getSharedRenderProviderImpl();
+
+ // set shared parameter in portalURL
+ portalURL.addSharedParameterCurrent(param.getName(), param.getValues());
}
}
if (renderPath.length() > 0) {
@@ -180,7 +199,6 @@
* @return a URL string representing the portal URL.
*/
public String toString(PortalURL portalURL) {
-
StringBuffer buffer = new StringBuffer();
// Append the server URI and the servlet path.
@@ -251,6 +269,19 @@
}
}
+ Map<String, String[]> sharedParamList = portalURL.getSharedParameters();
+ if (sharedParamList!=null){
+ for (Iterator iter = sharedParamList.keySet().iterator();iter.hasNext();){
+ String paramname = (String)iter.next();
+ String[] tmp = (String[])sharedParamList.get(paramname);
+ String valueString = encodeMultiValues(tmp);
+ if (valueString.length()>0){
+ buffer.append("/").append(encodeSharedParamname(SHARED_RENDER_PARAM, paramname));
+ buffer.append("/").append(valueString);
+ }
+ }
+ }
+
// Construct the string representing the portal URL.
return buffer.append(query).toString();
}
@@ -284,6 +315,13 @@
return buffer.toString();
}
+ private String encodeSharedParamname(String type, String name){
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(PREFIX).append(type)
+ .append(DELIM).append(name);
+ return buffer.toString();
+ }
+
/**
* Encode a string array containing multiple values into a single string.
* This method is used to encode multiple render parameter values.
@@ -369,6 +407,30 @@
// Construct portal URL parameter and return.
return new PortalURLParameter(windowId, paramName, paramValues);
+ }
+
+ private PortalURLParameter decodeSharedParameter(String name, String value) {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Decoding parameter: name=" + name
+ + ", value=" + value);
+ }
+
+// // Decode the name into window ID and parameter name.
+ String noPrefix = name.substring((PREFIX + PORTLET_ID).length());
+ String paramName = noPrefix.substring(noPrefix.indexOf(DELIM) + 1);
+
+ // Decode special characters in parameter value.
+
+ if (value != null) {
+ value = decodeCharacters(value);
+ }
+
+ // Split multiple values into a value array.
+ String[] paramValues = value.split(VALUE_DELIM);
+
+ // Construct portal URL parameter and return.
+ return new PortalURLParameter(null, paramName, paramValues);
}
/**
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java Wed Dec 13 19:06:45 2006
@@ -33,6 +33,7 @@
import org.apache.pluto.PortletWindow;
import org.apache.pluto.descriptors.portlet.EventDD;
import org.apache.pluto.descriptors.portlet.PortletDD;
+import org.apache.pluto.descriptors.portlet.RenderDD;
import org.apache.pluto.driver.config.DriverConfiguration;
import org.apache.pluto.driver.core.PortalRequestContext;
import org.apache.pluto.driver.core.PortletWindowImpl;
@@ -42,9 +43,9 @@
import org.apache.pluto.driver.url.PortalURL;
import org.apache.pluto.internal.InternalPortletWindow;
import org.apache.pluto.spi.EventProvider;
+import org.apache.pluto.spi.SharedRenderProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;
-
/**
* The controller servlet used to drive the Portal Driver. All requests mapped
* to this servlet will be processed as Portal Requests.
@@ -173,7 +174,7 @@
LOG.error("PageConfig for render path [" + portalURL.getRenderPath() + "] could not be found.");
}
- registerPortlets(pageConfig, portalURL);
+ registerPortlets(pageConfig, portalURL,request);
request.setAttribute(AttributeKeys.CURRENT_PAGE, pageConfig);
String uri = (pageConfig.getUri() != null)
@@ -204,7 +205,7 @@
// Private Methods ---------------------------------------------------------
- private void registerPortlets(PageConfig pageConfig, PortalURL portalURL) throws ServletException {
+ private void registerPortlets(PageConfig pageConfig, PortalURL portalURL, HttpServletRequest request) throws ServletException {
// iterate all portlets on the page
for (Object object : pageConfig.getPortletIds()) {
@@ -228,6 +229,16 @@
LOG.debug(eventDD.getName()+ " successfully registered!");
}
}
+ //register SharedRenderParameter
+ SharedRenderProvider renderProvider = container.getRequiredContainerServices()
+ .getPortalCallbackService().getSharedRenderProvider(request);
+ List<RenderDD> render = portletDD.getRenderParameter();
+ for (RenderDD renderDD : render){
+ renderProvider.registerSharedRenderParameter(window.getId().getStringId(), renderDD.getName());
+ if (LOG.isDebugEnabled()){
+ LOG.debug(renderDD.getName()+ " successfully registered!");
+ }
+ }
}
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/core/PortalRequestContext.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/core/PortalRequestContext.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/core/PortalRequestContext.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/core/PortalRequestContext.java Wed Dec 13 19:06:45 2006
@@ -123,4 +123,14 @@
public void setPortalURL(PortalURL portalURL){
requestedPortalURL = portalURL;
}
+
+ public static String getREQUEST_KEY() {
+ return REQUEST_KEY;
+ }
+
+ public ServletContext getServletContext() {
+ return servletContext;
+ }
+
+
}
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURL.java Wed Dec 13 19:06:45 2006
@@ -39,8 +39,14 @@
String getRenderPath();
void addParameter(PortalURLParameter param);
+
+ void addSharedRenderParametersNew(Map parameters);
Collection getParameters();
+
+ public void addSharedParameterCurrent(String name, String[] values);
+
+ public Map<String, String[]> getSharedParameters();
void setActionWindow(String actionWindow);
@@ -59,7 +65,7 @@
void setWindowState(String windowId, WindowState windowState);
void clearParameters(String windowId);
-
+
String toString();
String getServerURI();
Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLParser.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLParser.java?view=diff&rev=486942&r1=486941&r2=486942
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLParser.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/url/PortalURLParser.java Wed Dec 13 19:06:45 2006
@@ -1,16 +1,18 @@
-package org.apache.pluto.driver.url;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Created by IntelliJ IDEA.
- * User: ddewolf
- * Date: Sep 4, 2006
- * Time: 5:49:37 PM
- * To change this template use File | Settings | File Templates.
- */
-public interface PortalURLParser {
- PortalURL parse(HttpServletRequest request);
-
- String toString(PortalURL portalURL);
-}
+package org.apache.pluto.driver.url;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ddewolf
+ * Date: Sep 4, 2006
+ * Time: 5:49:37 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface PortalURLParser {
+ PortalURL parse(HttpServletRequest request);
+
+// String toString(PortalURL portalURL, HttpServletRequest request);
+
+ String toString(PortalURL portalURL);
+}