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]