Author: woonsan
Date: Tue Nov 24 16:59:05 2009
New Revision: 883782

URL: http://svn.apache.org/viewvc?rev=883782&view=rev
Log:
JS2-1086: Adding custom preview mode delegatee portlet support

Modified:
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletProxyInstance.java
    
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlet/PortletObjectProxy.java
    
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
    
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java?rev=883782&r1=883781&r2=883782&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
 Tue Nov 24 16:59:05 2009
@@ -95,7 +95,21 @@
      */
     private boolean autoSwitchConfigMode;
 
+    /**
+     * Delegated portlet unique name for config mode
+     */
     private String customConfigModePortletUniqueName;
+    
+    /**
+     * Flag whether the instantiated proxy will switch preview mode to built-in
+     * preview markup generating portlet or not.
+     */
+    private boolean autoSwitchPreviewMode;
+    
+    /**
+     * Delegated portlet unique name for preview mode
+     */
+    private String customPreviewModePortletUniqueName;
 
     public JetspeedPortletFactory(RequestDispatcherService rdService)
     {
@@ -104,6 +118,11 @@
     
     public JetspeedPortletFactory(RequestDispatcherService rdService, boolean 
autoSwitchConfigMode, boolean autoSwitchEditDefaultsModeToEditMode)
     {
+        this(rdService, autoSwitchConfigMode, 
autoSwitchEditDefaultsModeToEditMode, false);
+    }
+    
+    public JetspeedPortletFactory(RequestDispatcherService rdService, boolean 
autoSwitchConfigMode, boolean autoSwitchEditDefaultsModeToEditMode, boolean 
autoSwitchPreviewMode)
+    {
         this.rdService = rdService;
         this.portletCache = Collections.synchronizedMap(new HashMap<String, 
Map<String, PortletInstance>>());
         this.validatorCache = Collections.synchronizedMap(new HashMap<String, 
Map<String, PreferencesValidator>>());
@@ -114,7 +133,8 @@
         this.portletsResourceBundleCache = Collections.synchronizedMap(new 
HashMap<String, Map<String, Map<Locale, ResourceBundle>>>());
         this.autoSwitchConfigMode = autoSwitchConfigMode;
         this.autoSwitchEditDefaultsModeToEditMode = 
autoSwitchEditDefaultsModeToEditMode;
-        this.portletProxyUsed = (this.autoSwitchConfigMode || 
this.autoSwitchEditDefaultsModeToEditMode);
+        this.autoSwitchPreviewMode = autoSwitchPreviewMode;
+        this.portletProxyUsed = (this.autoSwitchConfigMode || 
this.autoSwitchEditDefaultsModeToEditMode || this.autoSwitchPreviewMode);
         this.servletContextProvider = new 
JetspeedServletContextProviderImpl(rdService);
     }
     
@@ -158,6 +178,16 @@
         return this.customConfigModePortletUniqueName;
     }
     
+    public void setCustomPreviewModePortletUniqueName(String 
customPreviewModePortletUniqueName)
+    {
+        this.customPreviewModePortletUniqueName = 
customPreviewModePortletUniqueName;
+    }
+
+    public String getCustomPreviewModePortletUniqueName()
+    {
+        return this.customPreviewModePortletUniqueName;
+    }
+    
     public void registerPortletApplication(PortletApplication pa, ClassLoader 
cl)
     {
         synchronized (classLoaderMap)
@@ -454,12 +484,13 @@
 
                         if (proxyUsed)
                         {
-                            portlet = new JetspeedPortletProxyInstance(pd
-                                    .getPortletName(), (Portlet) clazz
-                                    .newInstance(),
-                                    this.autoSwitchEditDefaultsModeToEditMode,
-                                    this.autoSwitchConfigMode,
-                                    this.customConfigModePortletUniqueName);
+                            portlet = new JetspeedPortletProxyInstance(
+                                                                       
pd.getPortletName(),
+                                                                       
(Portlet) clazz.newInstance(),
+                                                                       
this.autoSwitchEditDefaultsModeToEditMode,
+                                                                       
this.autoSwitchConfigMode, this.customConfigModePortletUniqueName,
+                                                                       
this.autoSwitchPreviewMode, this.customPreviewModePortletUniqueName
+                                                                       );
                         }
                         else
                         {

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletProxyInstance.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletProxyInstance.java?rev=883782&r1=883781&r2=883782&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletProxyInstance.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletProxyInstance.java
 Tue Nov 24 16:59:05 2009
@@ -29,9 +29,24 @@
  */
 public class JetspeedPortletProxyInstance extends JetspeedPortletInstance
 {
-    public JetspeedPortletProxyInstance(String portletName, Portlet portlet, 
boolean autoSwitchEditDefaultsModeToEditMode, boolean autoSwitchConfigMode, 
String customConfigModePortletUniqueName)
+    public JetspeedPortletProxyInstance(String portletName, Portlet portlet, 
+                                        boolean 
autoSwitchEditDefaultsModeToEditMode, 
+                                        boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName)
     {
-        super(portletName, (Portlet) PortletObjectProxy.createProxy(portlet, 
autoSwitchEditDefaultsModeToEditMode, autoSwitchConfigMode, 
customConfigModePortletUniqueName));
+        super(portletName, 
+              (Portlet) PortletObjectProxy.createProxy(portlet, 
autoSwitchEditDefaultsModeToEditMode, 
+                                                       autoSwitchConfigMode, 
customConfigModePortletUniqueName));
+    }
+    
+    public JetspeedPortletProxyInstance(String portletName, Portlet portlet, 
+                                        boolean 
autoSwitchEditDefaultsModeToEditMode, 
+                                        boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName,
+                                        boolean autoSwitchPreviewMode, String 
customPreviewModePortletUniqueName)
+    {
+        super(portletName, 
+              (Portlet) PortletObjectProxy.createProxy(portlet, 
autoSwitchEditDefaultsModeToEditMode, 
+                                                       autoSwitchConfigMode, 
customConfigModePortletUniqueName,
+                                                       autoSwitchPreviewMode, 
customPreviewModePortletUniqueName));
     }
     
     public boolean isProxyInstance()

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlet/PortletObjectProxy.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlet/PortletObjectProxy.java?rev=883782&r1=883781&r2=883782&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlet/PortletObjectProxy.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlet/PortletObjectProxy.java
 Tue Nov 24 16:59:05 2009
@@ -16,43 +16,40 @@
  */
 package org.apache.jetspeed.portlet;
 
+import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
 import java.util.HashSet;
 import java.util.List;
 
-import java.io.IOException;
-
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
 import javax.portlet.EventPortlet;
-import javax.portlet.Portlet;
 import javax.portlet.GenericPortlet;
+import javax.portlet.Portlet;
 import javax.portlet.PortletException;
 import javax.portlet.PortletMode;
-import javax.portlet.ResourceServingPortlet;
-import javax.portlet.WindowState;
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
-
-import org.apache.jetspeed.JetspeedActions;
-import org.apache.jetspeed.portlet.SupportsHeaderPhase;
-import org.apache.jetspeed.util.BaseObjectProxy;
-
+import javax.portlet.ResourceServingPortlet;
+import javax.portlet.UnavailableException;
+import javax.portlet.WindowState;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
-import javax.portlet.UnavailableException;
+
 import org.apache.jetspeed.Jetspeed;
+import org.apache.jetspeed.JetspeedActions;
 import org.apache.jetspeed.components.portletregistry.PortletRegistry;
 import org.apache.jetspeed.container.JetspeedPortletConfig;
+import org.apache.jetspeed.factory.PortletFactory;
+import org.apache.jetspeed.factory.PortletInstance;
 import org.apache.jetspeed.om.portlet.PortletApplication;
 import org.apache.jetspeed.om.portlet.PortletDefinition;
 import org.apache.jetspeed.om.portlet.Supports;
-import org.apache.jetspeed.factory.PortletFactory;
-import org.apache.jetspeed.factory.PortletInstance;
+import org.apache.jetspeed.util.BaseObjectProxy;
 
 /**
  * PortletObjectProxy
@@ -81,15 +78,28 @@
     
     private Object portletObject;
     private PortletInstance customConfigModePortletInstance;
+    private PortletInstance customPreviewModePortletInstance;
     private boolean genericPortletInvocable;
     private Method portletDoEditMethod;
     private boolean autoSwitchEditDefaultsModeToEditMode;
     private boolean autoSwitchConfigMode;
     private String customConfigModePortletUniqueName;
+    private boolean autoSwitchPreviewMode;
+    private String customPreviewModePortletUniqueName;
     private List<Supports> supports;
     
+    public static Object createProxy(Object proxiedObject, 
+                                     boolean 
autoSwitchEditDefaultsModeToEditMode, 
+                                     boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName)
+    {
+        return createProxy(proxiedObject, 
autoSwitchEditDefaultsModeToEditMode, autoSwitchConfigMode, 
customConfigModePortletUniqueName, false, null);
+    }
+    
     @SuppressWarnings("unchecked")
-    public static Object createProxy(Object proxiedObject, boolean 
autoSwitchEditDefaultsModeToEditMode, boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName)
+    public static Object createProxy(Object proxiedObject, 
+                                     boolean 
autoSwitchEditDefaultsModeToEditMode, 
+                                     boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName,
+                                     boolean autoSwitchPreviewMode, String 
customPreviewModePortletUniqueName)
     {
         HashSet<Class> interfaces = new HashSet<Class>();
         interfaces.add(Portlet.class);
@@ -117,16 +127,25 @@
         Class proxiedClass = proxiedObject.getClass();
         ClassLoader classLoader = proxiedClass.getClassLoader();
         
-        InvocationHandler handler = new PortletObjectProxy(proxiedObject, 
autoSwitchEditDefaultsModeToEditMode, autoSwitchConfigMode, 
customConfigModePortletUniqueName);
+        InvocationHandler handler = 
+            new PortletObjectProxy(proxiedObject, 
+                                   autoSwitchEditDefaultsModeToEditMode, 
+                                   autoSwitchConfigMode, 
customConfigModePortletUniqueName,
+                                   autoSwitchPreviewMode, 
customPreviewModePortletUniqueName);
         return Proxy.newProxyInstance(classLoader, interfaces.toArray(new 
Class[interfaces.size()]), handler);
     }
 
-    private PortletObjectProxy(Object portletObject, boolean 
autoSwitchEditDefaultsModeToEditMode, boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName)
+    private PortletObjectProxy(Object portletObject, 
+                               boolean autoSwitchEditDefaultsModeToEditMode, 
+                               boolean autoSwitchConfigMode, String 
customConfigModePortletUniqueName,
+                               boolean autoSwitchPreviewMode, String 
customPreviewModePortletUniqueName)
     {
         this.portletObject = portletObject;
         this.autoSwitchEditDefaultsModeToEditMode = 
autoSwitchEditDefaultsModeToEditMode;
         this.autoSwitchConfigMode = autoSwitchConfigMode;
         this.customConfigModePortletUniqueName = 
customConfigModePortletUniqueName;
+        this.autoSwitchPreviewMode = autoSwitchPreviewMode;
+        this.customPreviewModePortletUniqueName = 
customPreviewModePortletUniqueName;
         
         if (portletObject instanceof GenericPortlet)
         {
@@ -190,20 +209,26 @@
         
         boolean autoSwitchConfigMode = false;
         boolean autoSwitchToEditMode = false;
+        boolean autoSwitchPreviewMode = false;
         
         if (this.autoSwitchConfigMode && 
JetspeedActions.CONFIG_MODE.equals(mode))
         {
             autoSwitchConfigMode = true;
         }
         
-        if (this.autoSwitchEditDefaultsModeToEditMode && 
this.genericPortletInvocable)
+        if (this.autoSwitchEditDefaultsModeToEditMode && 
this.genericPortletInvocable && JetspeedActions.EDIT_DEFAULTS_MODE.equals(mode))
         {
-            if (JetspeedActions.EDIT_DEFAULTS_MODE.equals(mode))
+            if (!isSupportingPortletMode((GenericPortlet) this.portletObject, 
JetspeedActions.EDIT_DEFAULTS_MODE))
             {
-                if (!isSupportingEditDefaultsMode((GenericPortlet) 
this.portletObject))
-                {
-                    autoSwitchToEditMode = true;
-                }
+                autoSwitchToEditMode = true;
+            }
+        }
+        
+        if (this.autoSwitchPreviewMode && 
JetspeedActions.PREVIEW_MODE.equals(mode))
+        {
+            if (!isSupportingPortletMode((GenericPortlet) this.portletObject, 
JetspeedActions.PREVIEW_MODE))
+            {
+                autoSwitchPreviewMode = true;
             }
         }
         
@@ -213,14 +238,14 @@
             {
                 if (this.customConfigModePortletInstance == null)
                 {
-                    refreshCustomConfigModePortletInstance();
+                    this.customConfigModePortletInstance = 
getPortletInstance(this.customConfigModePortletUniqueName);
                 }
                 
                 this.customConfigModePortletInstance.render(request, response);
             }
             catch (UnavailableException e)
             {
-                refreshCustomConfigModePortletInstance();
+                this.customConfigModePortletInstance = 
getPortletInstance(this.customConfigModePortletUniqueName);
                 this.customConfigModePortletInstance.render(request, response);
             }
         }
@@ -239,6 +264,23 @@
                 this.portletDoEditMethod.invoke(genericPortlet, new Object [] 
{ request, response });
             }
         }
+        else if (autoSwitchPreviewMode)
+        {
+            try
+            {
+                if (this.customPreviewModePortletInstance == null)
+                {
+                    this.customPreviewModePortletInstance = 
getPortletInstance(this.customPreviewModePortletUniqueName);
+                }
+                
+                this.customPreviewModePortletInstance.render(request, 
response);
+            }
+            catch (UnavailableException e)
+            {
+                this.customPreviewModePortletInstance = 
getPortletInstance(this.customPreviewModePortletUniqueName);
+                this.customPreviewModePortletInstance.render(request, 
response);
+            }
+        }
         else
         {
             ((Portlet) this.portletObject).render(request, response);
@@ -262,14 +304,14 @@
             {
                 if (this.customConfigModePortletInstance == null)
                 {
-                    refreshCustomConfigModePortletInstance();
+                    this.customConfigModePortletInstance = 
getPortletInstance(this.customConfigModePortletUniqueName);
                 }
                 
                 this.customConfigModePortletInstance.processAction(request, 
response);
             }
             catch (UnavailableException e)
             {
-                refreshCustomConfigModePortletInstance();
+                this.customConfigModePortletInstance = 
getPortletInstance(this.customConfigModePortletUniqueName);
                 this.customConfigModePortletInstance.processAction(request, 
response);
             }
         }
@@ -279,7 +321,7 @@
         }
     }
     
-    private boolean isSupportingEditDefaultsMode(GenericPortlet portlet)
+    private boolean isSupportingPortletMode(GenericPortlet portlet, 
PortletMode portletMode)
     {
         if (supports == null)
         {
@@ -296,31 +338,33 @@
         
         if (supports != null)
         {
-            String pm = JetspeedActions.EDIT_DEFAULTS_MODE.toString();
+            String portletModeName = portletMode.toString();
+            
             for (Supports s : supports)
             {
-                if (s.getPortletModes().contains(pm))
+                if (s.getPortletModes().contains(portletModeName))
                 {
                     return true;
                 }
             }
+            
             return false;
         }
         
         return false;
     }
        
-    private void refreshCustomConfigModePortletInstance() throws 
PortletException
+    private PortletInstance getPortletInstance(String portletUniqueName) 
throws PortletException
     {
         PortletRegistry registry = (PortletRegistry) 
Jetspeed.getComponentManager().getComponent("portletRegistry");
         PortletFactory portletFactory = (PortletFactory) 
Jetspeed.getComponentManager().getComponent("portletFactory");
         ServletContext portalAppContext = ((ServletConfig) 
Jetspeed.getComponentManager().getComponent("ServletConfig")).getServletContext();
         
-        PortletDefinition portletDef = 
registry.getPortletDefinitionByUniqueName(this.customConfigModePortletUniqueName,
 true);
+        PortletDefinition portletDef = 
registry.getPortletDefinitionByUniqueName(portletUniqueName, true);
         PortletApplication portletApp = portletDef.getApplication();
         ServletContext portletAppContext = 
portalAppContext.getContext(portletApp.getContextPath());
         
-        this.customConfigModePortletInstance = 
portletFactory.getPortletInstance(portletAppContext, portletDef, false);
+        return portletFactory.getPortletInstance(portletAppContext, 
portletDef, false);
     }
     
 }

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml?rev=883782&r1=883781&r2=883782&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
 Tue Nov 24 16:59:05 2009
@@ -34,10 +34,19 @@
     <constructor-arg index="2">
       <value>${supported.portletmode.autoswitch.edit_defaults}</value>
     </constructor-arg>
+    <!-- If the following constructor-arg is set to true, 
+      proxy instances will switch preview mode to built-in custom preview mode 
portlet unless the portlet implements preview mode. -->
+    <constructor-arg index="3">
+      <value>${supported.portletmode.autoswitch.preview}</value>
+    </constructor-arg>
     <!-- Surrogate portlet for config modes. -->
     <property name="customConfigModePortletUniqueName">
       
<value>${supported.portletmode.autoswitch.config.surrogate.portlet}</value>
     </property>
+    <!-- Surrogate portlet for preview modes. -->
+    <property name="customPreviewModePortletUniqueName">
+      
<value>${supported.portletmode.autoswitch.preview.surrogate.portlet}</value>
+    </property>
   </bean>
 
   <!-- Portlet Registry DAO-->

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties?rev=883782&r1=883781&r2=883782&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties
 Tue Nov 24 16:59:05 2009
@@ -82,6 +82,10 @@
 supported.portletmode.autoswitch.edit_defaults=false
 # auto-switching surrogate portlet for config mode
 supported.portletmode.autoswitch.config.surrogate.portlet = 
j2-admin::CustomConfigModePortlet
+# switch preview mode to built-in custom preview mode portlet unless the 
portlet implements preview mode.
+supported.portletmode.autoswitch.preview=true
+# auto-switching surrogate portlet for preview mode
+supported.portletmode.autoswitch.preview.surrogate.portlet = 
j2-admin::CustomPreviewModePortlet
 
 # -------------------------------------------------------------------
 #  Window State Support



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to