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 2007/09/20 13:46:06 UTC
svn commit: r577698 - in /portals/pluto/branches/1.1-286-trunk-merge:
pluto-container/src/main/java/org/apache/pluto/core/
pluto-container/src/main/java/org/apache/pluto/internal/impl/
pluto-container/src/main/java/org/apache/pluto/spi/ pluto-portal-dr...
Author: cdoremus
Date: Thu Sep 20 04:46:04 2007
New Revision: 577698
URL: http://svn.apache.org/viewvc?rev=577698&view=rev
Log:
Appplied eventing.provided_jaxb_proposal2.120907_rev574692.patch in PLUTO-267. Thanks, Tuomas!
Modified:
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java
Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java?rev=577698&r1=577697&r2=577698&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java Thu Sep 20 04:46:04 2007
@@ -252,7 +252,7 @@
saveChangedParameters(actionRequest, actionResponse, portletURLProvider);
EventProvider provider = this.getRequiredContainerServices().getPortalCallbackService().
- getEventProvider(request,response, this);
+ getEventProvider(request,portletWindow);
provider.fireEvents(this);
// After processing action, send a redirect URL for rendering.
Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java?rev=577698&r1=577697&r2=577698&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java Thu Sep 20 04:46:04 2007
@@ -43,8 +43,6 @@
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.PortletContainer;
import org.apache.pluto.PortletContainerException;
-import org.apache.pluto.descriptors.portlet.EventDefinitionDD;
-import org.apache.pluto.descriptors.portlet.PortletAppDD;
import org.apache.pluto.descriptors.portlet.PortletDD;
import org.apache.pluto.descriptors.portlet.SupportsDD;
import org.apache.pluto.internal.InternalPortletWindow;
@@ -97,15 +95,9 @@
}
EventProvider provider = callback.getEventProvider(
- getHttpServletRequest(),getHttpServletResponse(), getContainer());
-
- if (isDeclaredAsPublishingEvent(qname)) {
-
- if (value != null && !isValueInstanceOfDefinedClass(qname,value))
- throw new IllegalArgumentException("Payload has not the right class");
-
- provider.registerToFireEvent(qname, value);
- }
+ getHttpServletRequest(),getInternalPortletWindow());
+
+ provider.registerToFireEvent(qname, value);
}
/* (non-Javadoc)
@@ -605,62 +597,4 @@
return super.isCommitted();
}
-
-// Not in API anymore
-// public void setDefaultNamspacedEvents(Map<String, Object> events) {
-// String defaultEventNamespace = getDefaultEventNamespace();
-// Set<String> keys = events.keySet();
-// for (String key : keys) {
-// setEvent((new QName(defaultEventNamespace, key)),(Serializable) events.get(key));
-// }
-// }
-
- // ****** private methods ******
-
- private boolean isDeclaredAsPublishingEvent(QName qname) {
- List<QName> events = getInternalPortletWindow().getPortletEntity()
- .getPortletDefinition().getPublishingEvents();
- if (events != null) {
- String contextPath = getInternalPortletWindow().getContextPath();
- try {
- PortletAppDD portletAppDD = getContainer().getPortletApplicationDescriptor(contextPath);
- String defaultNamespace = portletAppDD.getDefaultNamespace();
- if (defaultNamespace == null) {
- defaultNamespace = XMLConstants.NULL_NS_URI;
- }
- for (QName name : events) {
- String namespaceURI = name.getNamespaceURI();
- if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) {
- name = new QName(defaultNamespace, name.getLocalPart());
- }
- if (qname.equals(name)) {
- return true;
- }
- }
- } catch (PortletContainerException e) {
- LOG.error(e);
- }
- }
- return false;
- }
-
- private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value){
- PortletAppDD portletAppDD = null;
- try {
- portletAppDD =
- getContainer().getPortletApplicationDescriptor(getInternalPortletWindow().getContextPath());
- if (portletAppDD.getEvents() != null) {
- for (EventDefinitionDD event : portletAppDD.getEvents()) {
- if (event.getName().toString().equals(qname.toString())){
- return value.getClass().getName().equals(event.getJavaClass());
- }
- }
- }
- } catch (PortletContainerException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // event not declared
- return true;
- }
}
Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java?rev=577698&r1=577697&r2=577698&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java Thu Sep 20 04:46:04 2007
@@ -20,9 +20,7 @@
import javax.portlet.BaseURL;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.pluto.PortletContainer;
import org.apache.pluto.PortletWindow;
/**
@@ -78,7 +76,7 @@
String value);
public EventProvider getEventProvider(HttpServletRequest request,
- HttpServletResponse response, PortletContainer container);
+ PortletWindow portletWindow);
public EventProvider getEventProvider();
Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java?rev=577698&r1=577697&r2=577698&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java Thu Sep 20 04:46:04 2007
@@ -22,7 +22,6 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -31,6 +30,7 @@
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
@@ -52,15 +52,16 @@
import org.apache.pluto.driver.AttributeKeys;
import org.apache.pluto.driver.config.DriverConfiguration;
import org.apache.pluto.driver.core.PortletWindowImpl;
-import org.apache.pluto.driver.services.portal.PageConfig;
+import org.apache.pluto.driver.core.PortalRequestContext;
import org.apache.pluto.driver.services.portal.PortletApplicationConfig;
import org.apache.pluto.driver.services.portal.PortletWindowConfig;
import org.apache.pluto.driver.url.PortalURL;
import org.apache.pluto.driver.url.impl.PortalURLParserImpl;
+import org.apache.pluto.internal.InternalPortletWindow;
import org.apache.pluto.internal.impl.EventImpl;
import org.apache.pluto.spi.EventProvider;
-public class EventProviderImpl implements org.apache.pluto.spi.EventProvider {
+public class EventProviderImpl implements org.apache.pluto.spi.EventProvider, Cloneable {
private static final int DEFAULT_MAPSIZE = 10;
@@ -72,6 +73,7 @@
private HttpServletRequest request;
private HttpServletResponse response;
private PortletContainer container;
+ private PortletWindow portletWindow;
ThreadGroup threadGroup = new ThreadGroup("FireEventThreads");
@@ -87,16 +89,24 @@
* @return The corresponding EventProvierImpl instance
*/
public static EventProviderImpl getEventProviderImpl(HttpServletRequest request,
- HttpServletResponse response, PortletContainer container) {
- EventProviderImpl event = (EventProviderImpl) request.getAttribute(Constants.PROVIDER);
- if (event == null) {
- event = new EventProviderImpl();
- event.request = request;
- event.response = response;
- event.container = container;
- request.setAttribute(Constants.PROVIDER, event);
+ PortletWindow portletWindow) {
+ EventProviderImpl eventProvider = (EventProviderImpl) request.getAttribute(Constants.PROVIDER);
+ if (eventProvider == null) {
+ eventProvider = new EventProviderImpl();
+ eventProvider.request = request;
+ PortalRequestContext context = PortalRequestContext.getContext(request);
+ eventProvider.response = context.getResponse();
+ ServletContext servletContext = context.getServletContext();
+ eventProvider.container = (PortletContainer) servletContext.getAttribute(AttributeKeys.PORTLET_CONTAINER);
+ request.setAttribute(Constants.PROVIDER, eventProvider);
}
- return event;
+ try {
+ eventProvider = (EventProviderImpl) eventProvider.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new IllegalStateException(e);
+ }
+ eventProvider.portletWindow = portletWindow;
+ return eventProvider;
}
/**
@@ -124,45 +134,50 @@
*/
public void registerToFireEvent(QName qname, Serializable value)
throws IllegalArgumentException {
+ if (isDeclaredAsPublishingEvent(qname)) {
- try {
-
- if (value == null) {
- savedEvents.addEvent(new EventImpl(qname,value));
- } else if (!(value instanceof Serializable)) {
- throw new IllegalArgumentException("Object payload must implement Serializable");
- }
- else {
-
- Class clazz = value.getClass();
-
- JAXBContext jc = JAXBContext.newInstance(clazz);
-
- Marshaller marshaller = jc.createMarshaller();
-
- Writer out = new StringWriter();
-
- JAXBElement<Serializable> element = new JAXBElement<Serializable>(qname,clazz,value);
- marshaller.marshal(element, out);
-// marshaller.marshal(value, out);
-
- if (out != null) {
- savedEvents.addEvent(new EventImpl(qname,(Serializable) out.toString()));
- } else {
+ if (value != null && !isValueInstanceOfDefinedClass(qname,value))
+ throw new IllegalArgumentException("Payload has not the right class");
+
+ try {
+
+ if (value == null) {
savedEvents.addEvent(new EventImpl(qname,value));
+ } else if (!(value instanceof Serializable)) {
+ throw new IllegalArgumentException("Object payload must implement Serializable");
}
+ else {
+
+ Class clazz = value.getClass();
+
+ JAXBContext jc = JAXBContext.newInstance(clazz);
+
+ Marshaller marshaller = jc.createMarshaller();
+
+ Writer out = new StringWriter();
+
+ JAXBElement<Serializable> element = new JAXBElement<Serializable>(qname,clazz,value);
+ marshaller.marshal(element, out);
+ // marshaller.marshal(value, out);
+
+ if (out != null) {
+ savedEvents.addEvent(new EventImpl(qname,(Serializable) out.toString()));
+ } else {
+ savedEvents.addEvent(new EventImpl(qname,value));
+ }
+ }
+ } catch (JAXBException e) {
+ // maybe there is no valid jaxb binding
+ // TODO wsrp:eventHandlingFailed
+ LOG.error("Event handling failed", e);
+ } catch (FactoryConfigurationError e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ // } catch (ClassNotFoundException e) {
+ // // TODO Auto-generated catch block
+ // e.printStackTrace();
}
- } catch (JAXBException e) {
- // maybe there is no valid jaxb binding
- // TODO wsrp:eventHandlingFailed
- LOG.error("Event handling failed", e);
- } catch (FactoryConfigurationError e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
-// } catch (ClassNotFoundException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
- }
+ }
}
/**
@@ -396,6 +411,54 @@
*/
public EventList getSavedEvents(){
return savedEvents;
+ }
+
+ private boolean isDeclaredAsPublishingEvent(QName qname) {
+ ServletContext servletContext = PortalRequestContext.getContext(request).getServletContext();
+ InternalPortletWindow internalPortletWindow = new org.apache.pluto.internal.impl.PortletWindowImpl(servletContext, this.portletWindow);
+ List<QName> events = internalPortletWindow.getPortletEntity()
+ .getPortletDefinition().getPublishingEvents();
+ if (events != null) {
+ String contextPath = portletWindow.getContextPath();
+ try {
+ PortletAppDD portletAppDD = container.getPortletApplicationDescriptor(contextPath);
+ String defaultNamespace = portletAppDD.getDefaultNamespace();
+ if (defaultNamespace == null) {
+ defaultNamespace = XMLConstants.NULL_NS_URI;
+ }
+ for (QName name : events) {
+ String namespaceURI = name.getNamespaceURI();
+ if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) {
+ name = new QName(defaultNamespace, name.getLocalPart());
+ }
+ if (qname.equals(name)) {
+ return true;
+ }
+ }
+ } catch (PortletContainerException e) {
+ LOG.error(qname, e);
+ }
+ }
+ return false;
+ }
+
+ private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value){
+ PortletAppDD portletAppDD = null;
+ try {
+ portletAppDD =
+ container.getPortletApplicationDescriptor(portletWindow.getContextPath());
+ if (portletAppDD.getEvents() != null) {
+ for (EventDefinitionDD event : portletAppDD.getEvents()) {
+ if (event.getName().toString().equals(qname.toString())){
+ return value.getClass().getName().equals(event.getJavaClass());
+ }
+ }
+ }
+ } catch (PortletContainerException e) {
+ LOG.error(qname, e);
+ }
+ // event not declared
+ return true;
}
}
Modified: portals/pluto/branches/1.1-286-trunk-merge/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-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java?rev=577698&r1=577697&r2=577698&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java Thu Sep 20 04:46:04 2007
@@ -20,11 +20,8 @@
import java.util.Collections;
import java.util.Map;
-import javax.portlet.BaseURL;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.pluto.PortletContainer;
import org.apache.pluto.PortletWindow;
import org.apache.pluto.driver.AttributeKeys;
import org.apache.pluto.driver.core.ResourceURLProviderImpl;
@@ -100,9 +97,8 @@
}
public EventProvider getEventProvider(
- HttpServletRequest request,HttpServletResponse response,
- PortletContainer container) {
- return EventProviderImpl.getEventProviderImpl(request,response, container);
+ HttpServletRequest request, PortletWindow portletWindow) {
+ return EventProviderImpl.getEventProviderImpl(request, portletWindow);
}