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);
 	}