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);
+}