Author: ate
Date: Wed Feb 21 03:48:03 2007
New Revision: 509975

URL: http://svn.apache.org/viewvc?view=rev&rev=509975
Log:
Further enhancement for JS2-605 allowing individual portlets to override the 
global settings using jetspeed-portlet.xml metadata

Modified:
    
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
    
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/PortalReservedParameters.java

Modified: 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java?view=diff&rev=509975&r1=509974&r2=509975
==============================================================================
--- 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
 Wed Feb 21 03:48:03 2007
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -40,6 +41,9 @@
 import org.apache.jetspeed.container.namespace.JetspeedNamespaceMapper;
 import org.apache.jetspeed.container.namespace.JetspeedNamespaceMapperFactory;
 import org.apache.jetspeed.container.url.PortalURL;
+import org.apache.jetspeed.om.common.GenericMetadata;
+import org.apache.jetspeed.om.common.LocalizedField;
+import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
 import org.apache.jetspeed.request.JetspeedRequestContext;
 import org.apache.jetspeed.request.RequestContext;
 import org.apache.jetspeed.aggregator.Worker;
@@ -48,7 +52,6 @@
 import org.apache.pluto.om.entity.PortletApplicationEntity;
 import org.apache.pluto.om.entity.PortletEntity;
 import org.apache.pluto.om.portlet.PortletApplicationDefinition;
-import org.apache.pluto.om.portlet.PortletDefinition;
 import org.apache.pluto.om.window.PortletWindow;
 import org.apache.pluto.util.Enumerator;
 
@@ -76,6 +79,9 @@
 
     private static Boolean mergePortalParametersWithPortletParameters;
     private static Boolean mergePortalParametersBeforePortletParameters;
+    
+    private boolean portletMergePortalParametersWithPortletParameters;
+    private boolean portletMergePortalParametersBeforePortletParameters;
 
     public ServletRequestImpl( HttpServletRequest servletRequest, 
PortletWindow window )
     {
@@ -83,21 +89,59 @@
         nameSpaceMapper = ((JetspeedNamespaceMapperFactory) 
Jetspeed.getComponentManager().getComponent(
                 
org.apache.pluto.util.NamespaceMapper.class)).getJetspeedNamespaceMapper();
         this.portletWindow = window;        
-        PortletDefinition portletDef = 
portletWindow.getPortletEntity().getPortletDefinition();
+        
+        if (mergePortalParametersWithPortletParameters == null )
+        {
+            mergePortalParametersWithPortletParameters = 
+                
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.with.portlet.parameters",
 Boolean.FALSE);
+            mergePortalParametersBeforePortletParameters = 
+                
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.before.portlet.parameters",
 Boolean.FALSE);
+        }
+                
+        
+        PortletDefinitionComposite portletDef = 
(PortletDefinitionComposite)portletWindow.getPortletEntity().getPortletDefinition();
         if(portletDef != null)
         {
             webAppId = 
portletDef.getPortletApplicationDefinition().getWebApplicationDefinition().getId();
+            GenericMetadata metaData = portletDef.getMetadata();
+
+            portletMergePortalParametersWithPortletParameters = 
+                getMetaDataBooleanValue(
+                    metaData,
+                    
PortalReservedParameters.PORTLET_EXTENDED_DESCRIPTOR_MERGE_PORTAL_PARAMETERS_WITH_PORTLET_PARAMETERS,
+                    mergePortalParametersWithPortletParameters.booleanValue());
+            portletMergePortalParametersBeforePortletParameters = 
+                getMetaDataBooleanValue(
+                    metaData,
+                    
PortalReservedParameters.PORTLET_EXTENDED_DESCRIPTOR_MERGE_PORTAL_PARAMETERS_BEFORE_PORTLET_PARAMETERS,
+                    
mergePortalParametersBeforePortletParameters.booleanValue());
+            
         }
         else
         {
             // This happens when an entity is referencing a non-existent 
portlet
             webAppId = window.getId();
+            portletMergePortalParametersWithPortletParameters = 
mergePortalParametersWithPortletParameters.booleanValue();
+            portletMergePortalParametersBeforePortletParameters = 
mergePortalParametersBeforePortletParameters.booleanValue();
         }
-        if (mergePortalParametersWithPortletParameters == null )
+    }
+    
+    private boolean getMetaDataBooleanValue(GenericMetadata metaData, String 
fieldName, boolean defaultValue )
+    {
+        String value = null;
+        if ( metaData != null )
+        {
+            Collection fields = metaData.getFields(fieldName);
+            if ( fields != null && !fields.isEmpty() )
+            {
+                value = ((LocalizedField)fields.iterator().next()).getValue();
+            }
+        }
+        if ( value != null )
         {
-            mergePortalParametersWithPortletParameters = 
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.with.portlet.parameters",
 Boolean.FALSE);
-            mergePortalParametersBeforePortletParameters = 
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.before.portlet.parameters",
 Boolean.FALSE);
+            return Boolean.valueOf(value).booleanValue();
         }
+        return defaultValue;
     }
 
     protected HttpServletRequest _getHttpServletRequest()
@@ -160,7 +204,7 @@
                 }
             }
             
-            if ( actionRequest || 
mergePortalParametersWithPortletParameters.booleanValue() )
+            if ( actionRequest || 
portletMergePortalParametersWithPortletParameters )
             {
                 String encoding = (String) 
getRequest().getAttribute(PortalReservedParameters.PREFERED_CHARACTERENCODING_ATTRIBUTE);
                 boolean decode = 
getRequest().getAttribute(PortalReservedParameters.PARAMETER_ALREADY_DECODED_ATTRIBUTE)
 == null
@@ -196,7 +240,7 @@
                     if (values != null)
                     {
                         String[] temp = new String[paramValues.length + 
values.length];
-                        if ( actionRequest || 
this.mergePortalParametersBeforePortletParameters.booleanValue() )
+                        if ( actionRequest || 
portletMergePortalParametersBeforePortletParameters )
                         {
                             System.arraycopy(paramValues, 0, temp, 0, 
paramValues.length);
                             System.arraycopy(values, 0, temp, 
paramValues.length, values.length);

Modified: 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/PortalReservedParameters.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/PortalReservedParameters.java?view=diff&rev=509975&r1=509974&r2=509975
==============================================================================
--- 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/PortalReservedParameters.java
 (original)
+++ 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/PortalReservedParameters.java
 Wed Feb 21 03:48:03 2007
@@ -83,4 +83,47 @@
      * The timeout value is in milliseconds 
      */
     public static final String PORTLET_EXTENDED_DESCRIPTOR_RENDER_TIMEOUT = 
"timeout";
+    
+    /**
+     *  Until version 2.1, Jetspeed merged portal request parameters with 
portlet specific
+     *  parameters, effectively allowing "shared" parameters.
+     *  <p>
+     *  This is not compliant with the JSR-168 PLT.11, so by default this is 
now disabled
+     *  through global settings in jetspeed.properties:
+     *  <pre>
+     *    merge.portal.parameters.with.portlet.parameters=false
+     *    merge.portal.parameters.before.portlet.parameters=false
+     *  </pre>
+     *  <p>
+     *  To support legacy portlets still relying on the "old" behavior these 
default global
+     *  settings can be overridden by defining these values in the portlet 
Metadata too.
+     *  </p>
+     *  <p>
+     *  Setting merge.portal.parameters.with.portlet.parameters=true will 
"restore" the old behavior and
+     *  merge the portal parameters with the portlet parameters.
+     *  </p>
+     */
+    public static final String 
PORTLET_EXTENDED_DESCRIPTOR_MERGE_PORTAL_PARAMETERS_WITH_PORTLET_PARAMETERS = 
"merge.portal.parameters.with.portlet.parameters";
+
+    /**
+     *  Until version 2.1, Jetspeed merged portal request parameters with 
portlet specific
+     *  parameters, effectively allowing "shared" parameters.
+     *  <p>
+     *  This is not compliant with the JSR-168 PLT.11, so by default this is 
now disabled
+     *  through global settings in jetspeed.properties:
+     *  <pre>
+     *    merge.portal.parameters.with.portlet.parameters=false
+     *    merge.portal.parameters.before.portlet.parameters=false
+     *  </pre>
+     *  <p>
+     *  To support legacy portlets still relying on the "old" behavior these 
default global
+     *  settings can be overridden by defining these values in the portlet 
Metadata too.
+     *  </p>
+     *  <p>
+     *  In the situation of portal and portlet parameters with the same name, 
by default
+     *  the portlet parameters will be provided first in the values array, but 
this
+     *  can be overridden by setting 
merge.portal.parameters.before.portlet.parameters=true.
+     *  </p>
+     */
+     public static final String 
PORTLET_EXTENDED_DESCRIPTOR_MERGE_PORTAL_PARAMETERS_BEFORE_PORTLET_PARAMETERS = 
"merge.portal.parameters.before.portlet.parameters";
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to