You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2004/11/12 07:28:56 UTC
cvs commit: jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/messaging PortletMessageComponent.java
taylor 2004/11/11 22:28:56
Modified: portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/spring
ModelBeanImpl.java PortletApplicationModelImpl.java
portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/model
PortletApplicationModel.java ModelBean.java
portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks
GenericFrameworkPortlet.java
Added: portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks
ExternalComponentSupport.java Lookup.java
portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/messaging
PortletMessageComponent.java
Log:
- added simple messaging api as place holder / abstraction
- continued quixotic fw development, despite the general disdain
Revision Changes Path
1.2 +46 -2 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/spring/ModelBeanImpl.java
Index: ModelBeanImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/spring/ModelBeanImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ModelBeanImpl.java 4 Nov 2004 18:09:33 -0000 1.1
+++ ModelBeanImpl.java 12 Nov 2004 06:28:56 -0000 1.2
@@ -29,13 +29,23 @@
private String beanName;
private int beanType;
-
+ private boolean requiresExternalSupport = false;
+ private String lookupKey;
+
public ModelBeanImpl(String beanName, int beanType)
{
this.beanName = beanName;
this.beanType = beanType;
}
+ public ModelBeanImpl(String beanName, int beanType, String lookupKey, boolean requiresExternalSupport)
+ {
+ this.beanName = beanName;
+ this.beanType = beanType;
+ this.lookupKey = lookupKey;
+ this.requiresExternalSupport = requiresExternalSupport;
+ }
+
/* (non-Javadoc)
* @see org.apache.portals.bridges.velocity.model.ModelBean#getBeanName()
*/
@@ -52,4 +62,38 @@
return beanType;
}
+ /**
+ * @return Returns the lookupKey.
+ */
+ public String getLookupKey()
+ {
+ return lookupKey;
+ }
+ /**
+ * @param lookupKey The lookupKey to set.
+ */
+ public void setLookupKey(String lookupKey)
+ {
+ this.lookupKey = lookupKey;
+ }
+ /**
+ * @return Returns the requiresExternalSupport.
+ */
+ public boolean isRequiresExternalSupport()
+ {
+ return requiresExternalSupport;
+ }
+ /**
+ * @param requiresExternalSupport The requiresExternalSupport to set.
+ */
+ public void setRequiresExternalSupport(boolean requiresExternalSupport)
+ {
+ this.requiresExternalSupport = requiresExternalSupport;
+ }
+
+ public boolean isRequiresLookup()
+ {
+ return (lookupKey!= null);
+ }
+
}
1.3 +76 -8 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/spring/PortletApplicationModelImpl.java
Index: PortletApplicationModelImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/spring/PortletApplicationModelImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PortletApplicationModelImpl.java 11 Nov 2004 01:46:39 -0000 1.2
+++ PortletApplicationModelImpl.java 12 Nov 2004 06:28:56 -0000 1.3
@@ -24,12 +24,16 @@
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
+import org.springframework.beans.PropertyValue;
+import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorException;
import org.apache.commons.validator.ValidatorResources;
import org.apache.commons.validator.ValidatorResults;
+import org.apache.portals.bridges.frameworks.ExternalComponentSupport;
+import org.apache.portals.bridges.frameworks.Lookup;
import org.apache.portals.bridges.frameworks.model.ModelBean;
import org.apache.portals.bridges.frameworks.model.PortletApplicationModel;
import org.apache.portals.bridges.frameworks.spring.ModelBeanImpl;
@@ -93,6 +97,10 @@
*/
private Map actionForwardMap = null;
+ private Map modelBeanMap = new HashMap();
+
+ private Map externalSupportMap = new HashMap();
+
private static Object semaphore = new Object();
private String springConfig;
@@ -104,6 +112,11 @@
this.validatorConfig = validatorConfig;
}
+ public void setExternalSupport(Map map)
+ {
+ this.externalSupportMap = map;
+ }
+
public void init(PortletConfig config)
throws PortletException
{
@@ -172,7 +185,7 @@
// View to Validator Map
synchronized (semaphore)
- {
+ {
viewValidatorMap = (Map)springFactory.getBean(PORTLET_VIEW_VALIDATOR_MAP);
if (viewValidatorMap == null)
{
@@ -198,17 +211,45 @@
{
actionForwardMap = new HashMap();
}
- }
+ }
+
+
}
- public ModelBean getBean(String view)
+ public ModelBean getModelBean(String view)
{
+ ModelBean modelBean;
String beanName = (String)viewBeanMap.get(view);
if (beanName != null)
{
- return new ModelBeanImpl(beanName, ModelBean.POJO);
+ modelBean = (ModelBean)modelBeanMap.get(beanName);
+ if (modelBean == null)
+ {
+ BeanDefinition bd = springFactory.getBeanDefinition(beanName);
+ Object bean = springFactory.getBean(beanName);
+ if (bd == null || bean == null)
+ {
+ return new ModelBeanImpl(beanName, ModelBean.POJO);
+ }
+ String lookup = null;
+ boolean requiresExternalSupport = false;
+ PropertyValue value = bd.getPropertyValues().getPropertyValue("lookupKey");
+ if (value != null)
+ {
+ lookup = (String)value.getValue();
+ }
+ if (bean instanceof ExternalComponentSupport)
+ {
+ requiresExternalSupport = true;
+ }
+ modelBean = new ModelBeanImpl(beanName, ModelBean.POJO, lookup, requiresExternalSupport);
+ }
}
- return new ModelBeanImpl(beanName, ModelBean.PREFS_MAP);
+ else
+ {
+ modelBean = new ModelBeanImpl(beanName, ModelBean.PREFS_MAP);
+ }
+ return modelBean;
}
public String getTemplate(String view)
@@ -216,11 +257,38 @@
return (String)logicalViewMap.get(view);
}
- public Object createBean(ModelBean mb)
+ public Object lookupBean(ModelBean mb, String key)
{
- return springFactory.getBean(mb.getBeanName());
+ Object bean = springFactory.getBean(mb.getBeanName());
+ if (bean != null)
+ {
+ if (mb.isRequiresExternalSupport())
+ {
+ ExternalComponentSupport ecs = (ExternalComponentSupport)bean;
+ ecs.setExternalSupport(externalSupportMap.get(mb.getBeanName()));
+ }
+ if (mb.isRequiresLookup())
+ {
+ ((Lookup)bean).lookup(key);
+ }
+ }
+ return bean;
}
+ public Object createBean(ModelBean mb)
+ {
+ Object bean = springFactory.getBean(mb.getBeanName());
+ if (bean != null)
+ {
+ if (mb.isRequiresExternalSupport())
+ {
+ ExternalComponentSupport ecs = (ExternalComponentSupport)bean;
+ ecs.setExternalSupport(externalSupportMap.get(mb.getBeanName()));
+ }
+ }
+ return bean;
+ }
+
public Map createPrefsBean(ModelBean mb, Map original)
{
Map prefs = new HashMap();
1.3 +4 -3 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/model/PortletApplicationModel.java
Index: PortletApplicationModel.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/model/PortletApplicationModel.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PortletApplicationModel.java 11 Nov 2004 01:46:39 -0000 1.2
+++ PortletApplicationModel.java 12 Nov 2004 06:28:56 -0000 1.3
@@ -33,11 +33,12 @@
void init(PortletConfig config)
throws PortletException;
- ModelBean getBean(String view);
+ ModelBean getModelBean(String view);
String getTemplate(String view);
Object createBean(ModelBean mb);
+ Object lookupBean(ModelBean mb, String key);
Map createPrefsBean(ModelBean mb, Map prefs);
@@ -47,5 +48,5 @@
String getForward(String view, String status);
String getForward(String actionForward);
-
+ void setExternalSupport(Map map);
}
1.2 +5 -1 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/model/ModelBean.java
Index: ModelBean.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/model/ModelBean.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ModelBean.java 4 Nov 2004 18:09:33 -0000 1.1
+++ ModelBean.java 12 Nov 2004 06:28:56 -0000 1.2
@@ -32,5 +32,9 @@
int getBeanType();
+ String getLookupKey();
+ boolean isRequiresLookup();
+
+ boolean isRequiresExternalSupport();
}
1.7 +50 -18 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/GenericFrameworkPortlet.java
Index: GenericFrameworkPortlet.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/GenericFrameworkPortlet.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- GenericFrameworkPortlet.java 11 Nov 2004 01:46:39 -0000 1.6
+++ GenericFrameworkPortlet.java 12 Nov 2004 06:28:56 -0000 1.7
@@ -16,6 +16,7 @@
package org.apache.portals.bridges.frameworks;
import java.io.IOException;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;
@@ -55,7 +56,6 @@
*/
public class GenericFrameworkPortlet extends GenericVelocityPortlet
{
-
/**
* Init Parameter: default spring configuration property
*/
@@ -83,10 +83,14 @@
{
}
+ public void setExternalSupport(Map map)
+ {
+ model.setExternalSupport(map);
+ }
+
public void init(PortletConfig config) throws PortletException
{
super.init(config);
-
String springConfig = this.getInitParameter(INITPARAM_SPRING_CONFIG);
if (springConfig == null) { throw new PortletException("Spring Configuration file not specified"); }
@@ -116,7 +120,7 @@
String view = determineLogicalView(request);
Object bean = null;
- ModelBean mb = model.getBean(view);
+ ModelBean mb = model.getModelBean(view);
if (mb.getBeanType() == ModelBean.PREFS_MAP)
{
@@ -171,8 +175,7 @@
protected void forwardToView(ActionRequest request, ActionResponse response, String forward)
{
- if (forward == null) { return; // stay on same page
- }
+ if (forward == null) { return; } // stay on same page
String logicalView = null;
PortletMode newMode = null;
@@ -399,12 +402,12 @@
{
// try to get the bean from the session first
- Object bean = request.getPortletSession().getAttribute(mb.getBeanName());
+ Object bean = getBeanFromSession(request, mb);
if (bean == null)
{
bean = model.createBean(mb);
if (bean == null) { throw new PortletException("Portlet Action error in creating bean for view: " + view); }
- request.getPortletSession().setAttribute(mb.getBeanName(), bean);
+ putBeanInSession(request, mb, bean);
}
Map params = request.getParameterMap();
@@ -509,16 +512,16 @@
String template = model.getTemplate(view);
if (template == null) { throw new PortletException("Template not found for Logical View: " + view); }
- ModelBean mb = model.getBean(view);
- if (mb.getBeanType() == ModelBean.PREFS_MAP)
- {
- prefsToContext(request, view, mb);
- }
- else
+ ModelBean mb = model.getModelBean(view);
+ switch (mb.getBeanType())
{
+ case ModelBean.PREFS_MAP:
+ preferencesToContext(request, view, mb);
+ break;
+ case ModelBean.POJO:
beanToContext(request, view, mb);
+ break;
}
-
putRequestVariable(request, FrameworkConstants.FORWARD_TOOL, new Forwarder(model, request, response));
Map errors = (Map)request.getPortletSession().getAttribute(SESSION_ERROR_MESSAGES, PortletSession.PORTLET_SCOPE);
if (errors != null)
@@ -534,28 +537,57 @@
private void beanToContext(RenderRequest request, String view, ModelBean mb)
{
- Object bean = request.getPortletSession().getAttribute(mb.getBeanName());
+ Object bean;
+
+ String key = (String)request.getAttribute(mb.getLookupKey());
+ if (key != null)
+ {
+ bean = model.lookupBean(mb, key);
+ }
+ else
+ {
+ bean = getBeanFromSession(request, mb);
+ }
if (bean == null)
{
bean = model.createBean(mb);
if (bean == null) { return; }
- request.getPortletSession().setAttribute(mb.getBeanName(), bean);
+ putBeanInSession(request, mb, bean);
}
putRequestVariable(request, mb.getBeanName(), bean);
}
- private void prefsToContext(RenderRequest request, String view, ModelBean mb)
+ private void preferencesToContext(RenderRequest request, String view, ModelBean mb)
{
Map bean = (Map) request.getPortletSession().getAttribute(view + PREFS_SUFFIX);
if (bean == null)
{
PortletPreferences prefs = request.getPreferences();
bean = model.createPrefsBean(mb, prefs.getMap());
- request.getPortletSession().setAttribute(view + PREFS_SUFFIX, bean);
+ putBeanInSession(request, mb, bean);
}
putRequestVariable(request, FrameworkConstants.PREFS_VARIABLE, bean);
}
+
+ private Object getBeanFromSession(PortletRequest request, ModelBean mb)
+ {
+ return request.getPortletSession().getAttribute(makeModelBeanKey(mb));
+ }
+
+ private void putBeanInSession(PortletRequest request, ModelBean mb, Object bean)
+ {
+ if (bean instanceof Serializable)
+ {
+ request.getPortletSession().setAttribute(makeModelBeanKey(mb), bean);
+ }
+ }
+
+ private String makeModelBeanKey(ModelBean mb)
+ {
+ return "ModelBean:" + mb.getBeanName();
+ }
+
/**
* Specific for Velocity
*
1.1 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/ExternalComponentSupport.java
Index: ExternalComponentSupport.java
===================================================================
/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.portals.bridges.frameworks;
/**
* ExternalComponentSupport
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: ExternalComponentSupport.java,v 1.1 2004/11/12 06:28:56 taylor Exp $
*/
public interface ExternalComponentSupport
{
void setExternalSupport(Object externalSupportObject);
}
1.1 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/Lookup.java
Index: Lookup.java
===================================================================
/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.portals.bridges.frameworks;
/**
* Lookup
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: Lookup.java,v 1.1 2004/11/12 06:28:56 taylor Exp $
*/
public interface Lookup
{
boolean lookup(String key);
}
1.1 jakarta-jetspeed-2/portals-bridges/frameworks/src/java/org/apache/portals/bridges/frameworks/messaging/PortletMessageComponent.java
Index: PortletMessageComponent.java
===================================================================
/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.portals.bridges.frameworks.messaging;
import java.io.NotSerializableException;
import java.io.Serializable;
import javax.portlet.PortletRequest;
import javax.portlet.PortletSession;
/**
* PortletMessageComponent
* Naive implementation of Porlet Messages as an abstraction and a place holder for when the next
* spec covers inter-portlet communication
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: PortletMessageComponent.java,v 1.1 2004/11/12 06:28:56 taylor Exp $
*/
public class PortletMessageComponent
{
public static final void publish(PortletRequest request, String portletTopic, String messageName, Object message)
throws NotSerializableException
{
String key = portletTopic + ":" + messageName;
if (message instanceof Serializable)
{
request.getPortletSession().setAttribute(key, message, PortletSession.APPLICATION_SCOPE);
}
else
{
throw new NotSerializableException("Message not serializable for " + key);
}
}
public static final Object consume(PortletRequest request, String portletTopic, String messageName)
throws NotSerializableException
{
String key = portletTopic + ":" + messageName;
Object object = request.getPortletSession().getAttribute(key, PortletSession.APPLICATION_SCOPE);
// consume it
request.getPortletSession().removeAttribute(key, PortletSession.APPLICATION_SCOPE);
return object;
}
public static final Object receive(PortletRequest request, String portletTopic, String messageName)
throws NotSerializableException
{
String key = portletTopic + ":" + messageName;
Object object = request.getPortletSession().getAttribute(key, PortletSession.APPLICATION_SCOPE);
return object;
}
public static final void cancel(PortletRequest request, String portletTopic, String messageName)
throws NotSerializableException
{
String key = portletTopic + ":" + messageName;
request.getPortletSession().removeAttribute(key, PortletSession.APPLICATION_SCOPE);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org