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 de...@apache.org on 2007/09/10 13:35:05 UTC

svn commit: r574206 - in /portals/pluto/branches/1.1-286-COMPATIBILITY: pluto-container/src/main/java/org/apache/pluto/internal/impl/ pluto-container/src/main/java/org/apache/pluto/spi/ pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/ser...

Author: dettborn
Date: Mon Sep 10 04:35:04 2007
New Revision: 574206

URL: http://svn.apache.org/viewvc?rev=574206&view=rev
Log:
Committed patch: eventing.provided_jaxb_proposal.090907_r23.patch from JIRA 267 (http://issues.apache.org/jira/browse/PLUTO-267).

Thank you Tuomas!

Modified:
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java Mon Sep 10 04:35:04 2007
@@ -36,10 +36,6 @@
                               HttpServletResponse servletResponse) {
         super(container, internalPortletWindow, servletRequest,
               servletResponse);
-        this.container = container;
-        this.internalPortletWindow = internalPortletWindow;
-        context = container.getRequiredContainerServices().getPortalContext();
-        callback = container.getRequiredContainerServices().getPortalCallbackService();
     }
 
 	@Override

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java Mon Sep 10 04:35:04 2007
@@ -19,8 +19,6 @@
 
 import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.Serializable;
-import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 
 import javax.portlet.Event;
@@ -29,26 +27,13 @@
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.namespace.QName;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pluto.Constants;
 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.internal.InternalEventRequest;
 import org.apache.pluto.internal.InternalPortletWindow;
-import org.apache.pluto.spi.EventProvider;
 
 /**
  * <code>javax.portlet.EventRequest</code> implementation.
@@ -69,10 +54,6 @@
 	 */
 	private PortletPreferences portletPreferences = null;
 	
-	private PortletContainer container;
-	
-	private InternalPortletWindow window;
-	
 	private Event event; 
 	
 	//	 Constructor -------------------------------------------------------------
@@ -82,8 +63,6 @@
                              HttpServletRequest servletRequest, Event event) {
         super(container, internalPortletWindow, servletRequest);
         this.event = event;
-        this.window = internalPortletWindow;
-        this.container = container;
         if (LOG.isDebugEnabled()) {
         	LOG.debug("Created Event request for: " + internalPortletWindow);
         }
@@ -93,77 +72,11 @@
     //  EventRequest impl -------------------------------------------------------
     
     public Event getEvent(){
-        EventProvider provider = 
-        	(EventProvider) this.getRequest().getAttribute(Constants.PROVIDER);
-
-        Object value = event.getValue();
-        
-        XMLStreamReader xml = null;
-		try {
-			if (value instanceof String) {
-				String in = (String) value; 
-				xml = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(in));
-			}			
-		}  
-		catch (XMLStreamException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		} catch (FactoryConfigurationError e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		}
-        
-        if (xml != null) {
-        	//XMLStreamReader xml = (XMLStreamReader) event.getValue();
-        	
-        		//provider.getEventDefinition(event.getQName());
-        	try {
-        		// now test if object is jaxb
-        		EventDefinitionDD eventDefinitionDD = getEventDefintion(event.getQName()); 
-        		
-        		ClassLoader loader = Thread.currentThread().getContextClassLoader();
-        		Class clazz = loader.loadClass(eventDefinitionDD.getJavaClass());
-
-        		JAXBContext jc = JAXBContext.newInstance(clazz);
-        		Unmarshaller unmarshaller  = jc.createUnmarshaller();
-
-//        		unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
-
-        		JAXBElement result = unmarshaller.unmarshal(xml,clazz);
-
-        		return new EventImpl(event.getQName(),(Serializable) result.getValue());
-        	} catch (JAXBException e) {
-        		// TODO Auto-generated catch block
-        		e.printStackTrace();
-        	} catch (ClassNotFoundException e) {
-        		// TODO Auto-generated catch block
-        		e.printStackTrace();
-        	} catch (PortletContainerException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-        }
         return event;
     }
     
     //  PortletRequestImpl impl -------------------------------------------------
     
-	private EventDefinitionDD getEventDefintion(QName name) throws PortletContainerException {
-		PortletAppDD appDD = container.getPortletApplicationDescriptor(window.getContextPath());
-		for (EventDefinitionDD def : appDD.getEvents()){
-			if (def.getName().equals(name)){
-				return def;
-			}
-			if (def.getName().getNamespaceURI() != null && (def.getName().getNamespaceURI().equals(""))){
-				QName qname = new QName(appDD.getDefaultNamespace(),def.getName().getLocalPart());
-				if (qname.equals(name))
-					return def;
-			}
-				
-		}
-		return null;
-	}
-
 	/**
     * FIXME: (see ActionRequestImpl)
     */

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java Mon Sep 10 04:35:04 2007
@@ -18,38 +18,26 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.io.Serializable;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.rmi.MarshalException;
+import java.io.Serializable; 
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
-import java.util.ArrayList;
+import java.util.Map; 
 
 import javax.portlet.PortalContext;
-import javax.portlet.PortletException;
 import javax.portlet.PortletMode;
 import javax.portlet.PortletModeException;
 import javax.portlet.StateAwareResponse;
 import javax.portlet.WindowState;
-import javax.portlet.WindowStateException;
-import javax.servlet.ServletException;
+import javax.portlet.WindowStateException; 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
 import javax.xml.namespace.QName;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -82,15 +70,13 @@
 	private String redirectLocation;
     
 
-	protected InternalPortletWindow internalPortletWindow;
-	protected PortletContainer container;
 	private Map<String, String[]> publicRenderParameter = new HashMap<String, String[]>();
 	
-    private Map renderParameters = new HashMap();
+    private Map<String, String[]> renderParameters = new HashMap<String, String[]>();
     private WindowState windowState = null;
     private PortletMode portletMode = null;
-	protected PortalCallbackService callback;
-    protected PortalContext context;
+	private PortalCallbackService callback;
+    private PortalContext context;
     
 	public StateAwareResponseImpl(PortletContainer container,
 			            InternalPortletWindow internalPortletWindow,
@@ -98,8 +84,6 @@
 			            HttpServletResponse servletResponse) {
 		super(container, internalPortletWindow, servletRequest,
 		servletResponse);
-		this.internalPortletWindow = internalPortletWindow;
-		this.container = container;
 		context = container.getRequiredContainerServices().getPortalContext();
 		callback = container.getRequiredContainerServices().getPortalCallbackService();
 	}
@@ -108,85 +92,19 @@
 	 * @see javax.portlet.StateAwareResponse#setEvent(javax.xml.namespace.QName, java.lang.Object)
 	 */
 	public void setEvent(QName qname, Serializable value) throws IllegalArgumentException {
+		if (qname == null) {
+			throw new IllegalArgumentException();
+		}
+		
 		EventProvider provider = callback.getEventProvider(
-				getHttpServletRequest(),getHttpServletResponse(), container);
+				getHttpServletRequest(),getHttpServletResponse(), getContainer());
 
 		if (isDeclaredAsPublishingEvent(qname)) {
-			if (value == null) {
-				try {
-					provider.registerToFireEvent(new EventImpl(qname));
-				} catch (ServletException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (PortletException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (PortletContainerException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-			}else {
-
-				if (!isValueInstanceOfDefinedClass(qname,value))
-					throw new IllegalArgumentException("Payload has not the right class");
-
-				XMLStreamReader xml = null;
-				try {
-
-					if (value == null) {
-						provider.registerToFireEvent(new EventImpl(qname));
-					} 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();
-
-						marshaller.marshal(new JAXBElement(qname,clazz,value), out);
-//						marshaller.marshal(value, out);
+			
+			if (value != null && !isValueInstanceOfDefinedClass(qname,value))
+				throw new IllegalArgumentException("Payload has not the right class");
 
-						if (out != null) {
-							provider.registerToFireEvent(new EventImpl(qname,(Serializable) out.toString()));
-						} else { 
-							provider.registerToFireEvent(new EventImpl(qname,(Serializable) value));
-						}
-					}
-				} catch (ServletException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (PortletException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (PortletContainerException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (MarshalException e) {
-					// there is no valid jaxb binding
-					e.printStackTrace();
-				} catch (JAXBException e) {
-					// maybe there is no valid jaxb binding
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (FactoryConfigurationError e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-//					} catch (ClassNotFoundException e) {
-//					// TODO Auto-generated catch block
-//					e.printStackTrace();
-				}
-			}
+			provider.registerToFireEvent(qname, value);
 		}
 	}
 
@@ -194,8 +112,17 @@
 	 * @see javax.portlet.StateAwareResponse#setEvent(java.lang.String, java.lang.Object)
 	 */
 	public void setEvent(String name, Serializable value) {
-		String defaultEventNamespace = getDefaultEventNamespace();
-		setEvent((new QName(defaultEventNamespace, name)),value);
+        String contextPath = getInternalPortletWindow().getContextPath();
+        String defaultNamespace;
+        try {
+            // TODO defaultNamespace = getContainer().getOptionalContainerServices().getPortletRegistryService().getPortletApplicationDescriptor(contextPath).getDefaultNamespace();
+            defaultNamespace = getContainer().getPortletApplicationDescriptor(contextPath).getDefaultNamespace();
+        } catch (PortletContainerException e) { 
+            LOG.error(contextPath, e); 
+            defaultNamespace = XMLConstants.NULL_NS_URI;
+        }
+        QName qname = new QName(defaultNamespace, name);
+        setEvent(qname, value);
 	}
 	
 	/* (non-Javadoc)
@@ -333,11 +260,11 @@
             throw new IllegalArgumentException(
                 "Render parameter key must not be null.");
         }
-        PublicRenderParameterProvider provider = container.getRequiredContainerServices().getPortalCallbackService().getPublicRenderParameterProvider();
+        PublicRenderParameterProvider provider = getContainer().getRequiredContainerServices().getPortalCallbackService().getPublicRenderParameterProvider();
         //only if the value is null, if it is a public parameter will deleted from list.
         if (value == null){
         	//test if this is a public render parameter
-        	if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), key)){
+        	if (provider.isPublicRenderParameter(getInternalPortletWindow().getId().getStringId(), key)){
         		publicRenderParameter.put(key, new String[] {null});
         	}
         	else{
@@ -345,7 +272,7 @@
                 	"Render parameter value must not be null.");
         	}
         }
-        else if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), key)){
+        else if (provider.isPublicRenderParameter(getInternalPortletWindow().getId().getStringId(), key)){
         	publicRenderParameter.put(key, new String[] {value});
         }
         else{
@@ -364,9 +291,9 @@
 	        throw new IllegalArgumentException(
 	        	"name and values must not be null or values be an empty array");
 	    }
-	    PublicRenderParameterProvider provider = container.getRequiredContainerServices().getPortalCallbackService().getPublicRenderParameterProvider();
+	    PublicRenderParameterProvider provider = getContainer().getRequiredContainerServices().getPortalCallbackService().getPublicRenderParameterProvider();
 	    if (values == null){
-	    	if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), key)){
+	    	if (provider.isPublicRenderParameter(getInternalPortletWindow().getId().getStringId(), key)){
 	    		publicRenderParameter.put(key,new String[] {null});
 		    }
 	    	else{
@@ -375,7 +302,7 @@
 	    	}
 	    }
 	    
-	    if (provider.isPublicRenderParameter(internalPortletWindow.getId().getStringId(), key)){
+	    if (provider.isPublicRenderParameter(getInternalPortletWindow().getId().getStringId(), key)){
 	    	publicRenderParameter.put(key,StringUtils.copy(values));
 	    }
 	    else{
@@ -389,7 +316,7 @@
         return renderParameters;
     }
     
-    public Map getRenderParameterMap() {
+    public Map<String, String[]> getRenderParameterMap() {
 		return renderParameters;
 	}
     
@@ -688,40 +615,40 @@
 //		}	
 //	}
 
-	/**
-	 * Gets the default event namespace.
-	 * 
-	 * @return the default event namespace
-	 */
-	private String getDefaultEventNamespace() {
-		EventProvider provider = callback.getEventProvider(
-				getHttpServletRequest(),getHttpServletResponse(), container);
-		String defaultEventNamespace = provider.getDefaultEventNamespace(this.getInternalPortletWindow().getPortletName());
-		return (defaultEventNamespace == null || defaultEventNamespace.equals("")) ? XMLConstants.NULL_NS_URI : defaultEventNamespace; 
-	}
-	
 	// ****** private methods ******
 
 	private boolean isDeclaredAsPublishingEvent(QName qname) {
-		List<QName> events = internalPortletWindow.getPortletEntity()
+		List<QName> events = getInternalPortletWindow().getPortletEntity()
 		.getPortletDefinition().getPublishingEvents();
-		List<QName> tempEvents = new ArrayList<QName>();
-		if (events == null) 
-			return false;
-		for (QName name : events) {
-			if (name.getNamespaceURI() != null && !(name.getNamespaceURI().equals("")))
-				tempEvents.add(name);
-			else
-				tempEvents.add(new QName(getDefaultEventNamespace(),name.getLocalPart()));
+		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 tempEvents.contains(qname);
+		return false;
 	}
 	
 	private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value){
 		PortletAppDD portletAppDD = null;
 		try {
 			 portletAppDD =
-				container.getPortletApplicationDescriptor(internalPortletWindow.getContextPath());
+				 getContainer().getPortletApplicationDescriptor(getInternalPortletWindow().getContextPath());
 			 if (portletAppDD.getEvents() != null) {
 				 for (EventDefinitionDD event : portletAppDD.getEvents()) {
 					 if (event.getName().toString().equals(qname.toString())){

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java Mon Sep 10 04:35:04 2007
@@ -15,21 +15,11 @@
  */
 package org.apache.pluto.spi;
 
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.List;
-
-import javax.portlet.Event;
-import javax.portlet.PortletException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import java.io.Serializable;
+
 import javax.xml.namespace.QName;
 
 import org.apache.pluto.EventContainer;
-import org.apache.pluto.PortletContainerException;
-import org.apache.pluto.descriptors.portlet.EventDefinitionDD;
-import org.apache.pluto.descriptors.portlet.PortletAppDD;
 
 	/**
 	 * 
@@ -42,17 +32,12 @@
 
 	/**
 	 * 
-	 * @param event
-	 * @param request
-	 * @param response
-	 * @throws ServletException
-	 * @throws IOException
-	 * @throws PortletException
-	 * @throws PortletContainerException
-	 */
-	public abstract void registerToFireEvent(Event event)
-			throws ServletException, IOException, PortletException,
-			PortletContainerException;
+	 * @param qname
+	 * @param value 
+	 * @throws IllegalArgumentException
+	 */
+	public abstract void registerToFireEvent(QName name, Serializable value)
+			throws IllegalArgumentException;
 
 	/**
 	 * @param evtLabel -
@@ -150,7 +135,7 @@
 	 * 
 	 * @return the event definition
 	 */
-	public abstract EventDefinitionDD getEventDefinition(QName qname);
+//	public abstract EventDefinitionDD getEventDefinition(QName qname);
 	
 	/**
 	 * Register event definition DD.
@@ -164,21 +149,21 @@
 	 * 
 	 * @return the request
 	 */
-	public HttpServletRequest getRequest();
+//	public HttpServletRequest getRequest();
 	
 	/**
 	 * Gets the response.
 	 * 
 	 * @return the response
 	 */
-	public HttpServletResponse getResponse();
+//	public HttpServletResponse getResponse();
 	
 	/**
 	 * Gets the default event namespace.
 	 * 
 	 * @return the default event namespace
 	 */
-	public abstract String getDefaultEventNamespace(String portletName);
+//	public abstract String getDefaultEventNamespace(String portletName);
 	
 	/**
 	 * Sets the default event namespace.

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/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-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java Mon Sep 10 04:35:04 2007
@@ -15,25 +15,28 @@
  */
 package org.apache.pluto.driver.services.container;
 
-import java.io.IOException;
+import java.io.Serializable;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.Vector;
 
 import javax.portlet.Event;
-import javax.portlet.PortletException;
 import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
 import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -42,13 +45,11 @@
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.PortletWindow;
-import org.apache.pluto.PortletWindowID;
 import org.apache.pluto.core.PortletContainerImpl;
 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.driver.AttributeKeys;
-import org.apache.pluto.driver.PortalDriverServlet;
 import org.apache.pluto.driver.config.DriverConfiguration;
 import org.apache.pluto.driver.core.PortletWindowImpl;
 import org.apache.pluto.driver.services.portal.PageConfig;
@@ -56,6 +57,7 @@
 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.impl.EventImpl;
 import org.apache.pluto.spi.EventProvider;
 
 public class EventProviderImpl implements org.apache.pluto.spi.EventProvider {
@@ -116,15 +118,51 @@
     
     /**
      * Register an event, which should be fired within that request
-     * @param event
-     * @throws {@link IOException} 
-     * @throws {@link ServletException} 
-     * @throws {@link PortletContainerException}
-     * @throws {@link PortletException}
+     * @param qname
+     * @param value
+     * @throws {@link IllegalArgumentException}
      */
-    public void registerToFireEvent(Event event) 
-    throws ServletException, IOException, PortletException, PortletContainerException {
-    	savedEvents.addEvent(event);	
+    public void registerToFireEvent(QName qname, Serializable value) 
+    throws IllegalArgumentException {
+			
+		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();
+		}
     }
 
 	/**
@@ -147,7 +185,7 @@
 			
         	List<String> portletNames = getAllPortletsRegisteredForEvent(eActual,driverConfig);
         	
-        	Collection<PortletWindowConfig> portlets = getAllPortlets();
+        	Collection<PortletWindowConfig> portlets = getAllPortlets(driverConfig);
         	
         	// iterate all portlets in the portal        	
         	for (PortletWindowConfig config : portlets) {
@@ -184,7 +222,7 @@
 		Set<String> resultSet = new HashSet<String>();
 		List<String> resultList = new ArrayList<String>();
 		QName eventName = event.getQName();
-		Collection<PortletWindowConfig> portlets = getAllPortlets();
+		Collection<PortletWindowConfig> portlets = getAllPortlets(driverConfig);
 		
 		for (PortletWindowConfig portlet : portlets) {
 			String contextPath = portlet.getContextPath();
@@ -219,7 +257,7 @@
 								}								
 								// also look for default namespaced events
 								if (name.getNamespaceURI() == null || name.getNamespaceURI().equals("")){
-									String defaultNamespace = getDefaultEventNamespace(portlet.getPortletName());
+									String defaultNamespace = portletAppDD.getDefaultNamespace();
 									QName qname = new QName(defaultNamespace,name.getLocalPart());
 									if (eventName.toString().equals(qname.toString()) &&
 											portletDD.getPortletName().equals(portlet.getPortletName())){
@@ -324,36 +362,11 @@
 		return eActual;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.apache.pluto.spi.EventProvider#getEventDefinition(javax.xml.namespace.QName)
-	 */
-	public EventDefinitionDD getEventDefinition(QName qname) {
-		Collection<PortletWindowConfig> portlets = getAllPortlets();
-			for (PortletWindowConfig portlet : portlets) {
-				String contextPath = portlet.getContextPath();
-				PortletAppDD portletAppDD = null;
-				try {
-					portletAppDD = container.getPortletApplicationDescriptor(contextPath);
-					for (EventDefinitionDD def : portletAppDD.getEvents()) {
-						if (def.getName().equals(qname)){
-							return def;
-						}
-					}
-				} catch (PortletContainerException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-			}
-			return null;
-		}
 
 	/**
 	 * 
 	 */
-	private Collection<PortletWindowConfig> getAllPortlets() {
-		ServletContext servletContext = container.getServletContext();
-		DriverConfiguration driverConfig = (DriverConfiguration) servletContext.getAttribute(
-        		AttributeKeys.DRIVER_CONFIG);
+	private Collection<PortletWindowConfig> getAllPortlets(DriverConfiguration driverConfig) {
 		Collection<PortletApplicationConfig> apps = driverConfig.getPortletApplications();
 		Collection<PortletWindowConfig> portlets = new ArrayList<PortletWindowConfig>();
 		for (PortletApplicationConfig app : apps) {
@@ -385,22 +398,4 @@
 		return savedEvents;
 	}
 
-	public String getDefaultEventNamespace(String portletName) {
-		Collection<PortletWindowConfig> portlets = getAllPortlets();
-		for (PortletWindowConfig portlet : portlets) {
-			if (portlet.getPortletName().equals(portletName)){
-				String contextPath = portlet.getContextPath();
-				PortletAppDD portletAppDD = null;
-				try {
-					portletAppDD = container.getPortletApplicationDescriptor(contextPath);
-					return portletAppDD.getDefaultNamespace();
-
-				} catch (PortletContainerException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-			}
-		}
-		return null;
-	}
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java?rev=574206&r1=574205&r2=574206&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java Mon Sep 10 04:35:04 2007
@@ -16,17 +16,36 @@
 package org.apache.pluto.driver.services.container;
 
 import java.io.IOException;
+import java.io.Serializable;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.portlet.Event;
 import javax.portlet.PortletException;
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
 
 import org.apache.pluto.EventContainer;
+import org.apache.pluto.PortletContainer;
+import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.PortletWindow;
+import org.apache.pluto.descriptors.portlet.EventDefinitionDD;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
+import org.apache.pluto.driver.AttributeKeys;
+import org.apache.pluto.driver.core.PortalRequestContext;
 import org.apache.pluto.driver.core.PortalServletRequest;
+import org.apache.pluto.internal.impl.EventImpl;
 
 public class PortletWindowThread extends Thread {
 	
@@ -66,6 +85,50 @@
 			try {
 //				synchronized (this) {
 					Event event = events.remove(0);
+			        Object value = event.getValue();
+			        
+			        XMLStreamReader xml = null;
+					try {
+						if (value instanceof String) {
+							String in = (String) value; 
+							xml = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(in));
+						}			
+					}  
+					catch (XMLStreamException e1) {
+						throw new IllegalStateException(e1);
+					} catch (FactoryConfigurationError e1) {
+						throw new IllegalStateException(e1);
+					}
+			        
+			        if (xml != null) {
+			        	//XMLStreamReader xml = (XMLStreamReader) event.getValue();
+			        	
+			        		//provider.getEventDefinition(event.getQName());
+			        	try {
+			        		// now test if object is jaxb
+			        		EventDefinitionDD eventDefinitionDD = getEventDefintion(event.getQName()); 
+			        		
+			        		ClassLoader loader = Thread.currentThread().getContextClassLoader();
+			        		Class<? extends Serializable> clazz = loader.loadClass(eventDefinitionDD.getJavaClass()).asSubclass(Serializable.class);
+
+			        		JAXBContext jc = JAXBContext.newInstance(clazz);
+			        		Unmarshaller unmarshaller  = jc.createUnmarshaller();
+
+//			        		unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
+
+			        		JAXBElement result = unmarshaller.unmarshal(xml,clazz);
+
+			        		event =  new EventImpl(event.getQName(),(Serializable) result.getValue());
+			        	} catch (JAXBException e) {
+			        		throw new IllegalStateException(e);
+			        	} catch (ClassCastException e) {
+			        		throw new IllegalStateException(e);
+			        	} catch (ClassNotFoundException e) {
+			        		throw new IllegalStateException(e);
+			        	} catch (PortletContainerException e) {
+			        		throw new IllegalStateException(e);
+						}
+			        }					
 					eventContainer.fireEvent(req, res, portletWindow, event);	
 //				}
 			} catch (PortletException e) {
@@ -80,6 +143,19 @@
 
 	public void addEvent(Event event) {
 		this.events.add(event);	
+	}
+
+	private EventDefinitionDD getEventDefintion(QName name) throws PortletContainerException {
+		PortalRequestContext context = PortalRequestContext.getContext(eventProvider.getRequest());
+		ServletContext servletContext = context.getServletContext();
+		PortletContainer container = (PortletContainer) servletContext.getAttribute(AttributeKeys.PORTLET_CONTAINER);
+		PortletAppDD appDD = container.getPortletApplicationDescriptor(portletWindow.getContextPath());
+		for (EventDefinitionDD def : appDD.getEvents()){
+			if (def.getName().equals(name)){
+				return def;
+			}
+		}
+		throw new IllegalStateException();
 	}
 
 }