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 uk...@apache.org on 2007/08/05 11:46:10 UTC

svn commit: r562844 - in /portals/pluto/branches/1.1-286-COMPATIBILITY: pluto-container/src/main/java/org/apache/pluto/ pluto-container/src/main/java/org/apache/pluto/core/ pluto-container/src/main/java/org/apache/pluto/internal/impl/ pluto-container/s...

Author: ukuester
Date: Sun Aug  5 02:46:08 2007
New Revision: 562844

URL: http://svn.apache.org/viewvc?view=rev&rev=562844
Log:
Committed 
8. eventing_0400807.patch
9. eventing_0400807_missingEventDefRefDD.patch
from JIRA 267

solves problems in subtask 372, 374 too.

Added:
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionReferenceDD.java
Modified:
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/PortletContainer.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.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/EventResponseImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletConfigImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.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-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/ActionResponseWrapper.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletRequestWrapper.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletResponseWrapper.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionDD.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/ObjectFactory.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/jaxb.index
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-impl/src/test/java/org/apache/pluto/descriptors/services/jaxb/JaxBDescriptorServiceImplTest.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventAttribute.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventList.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/PortalCallbackServiceImpl.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java
    portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/PortletContainer.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/PortletContainer.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/PortletContainer.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/PortletContainer.java Sun Aug  5 02:46:08 2007
@@ -169,5 +169,7 @@
      */    
     public PortletAppDD getPortletApplicationDescriptor(String context)
         throws PortletContainerException;
+
+	public ServletContext getServletContext();
     
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java Sun Aug  5 02:46:08 2007
@@ -247,11 +247,12 @@
         		+ portletWindow.getPortletName());
         
         PortletURLProvider portletURLProvider = requiredContainerServices.getPortalCallbackService().getPortletURLProvider(request, internalPortletWindow);
+        
+        portletURLProvider.savePortalURL(request);
         saveChangedParameters(actionRequest, actionResponse, portletURLProvider);
-        portletURLProvider.savePortalURL(request);        
         
         EventProvider provider = this.getRequiredContainerServices().getPortalCallbackService().
-			getEventProvider(request,response);
+			getEventProvider(request,response, this);
         provider.fireEvents(this);
         
         // After processing action, send a redirect URL for rendering.

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?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- 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 Sun Aug  5 02:46:08 2007
@@ -18,6 +18,7 @@
 
 
 import java.io.Serializable;
+import java.io.StringReader;
 
 import javax.portlet.Event;
 import javax.portlet.EventRequest;
@@ -28,13 +29,19 @@
 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;
@@ -58,6 +65,10 @@
 	 */
 	private PortletPreferences portletPreferences = null;
 	
+	private PortletContainer container;
+	
+	private InternalPortletWindow window;
+	
 	private Event event; 
 	
 	//	 Constructor -------------------------------------------------------------
@@ -67,6 +78,8 @@
                              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);
         }
@@ -80,19 +93,37 @@
         	(EventProvider) this.getRequest().getAttribute(Constants.PROVIDER);
 
         Object value = event.getValue();
-        if (value instanceof XMLStreamReader) {
-        	XMLStreamReader xml = (XMLStreamReader) event.getValue();
-        	EventDefinitionDD eventDefinitionDD = provider.getEventDefinition(event.getQName());
+        
+        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());
+//        		unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
 
         		JAXBElement result = unmarshaller.unmarshal(xml,clazz);
 
@@ -103,13 +134,26 @@
         	} 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;
+			}
+		}
+		return null;
+	}
+
 	/**
     * FIXME: (see ActionRequestImpl)
     */

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventResponseImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventResponseImpl.java Sun Aug  5 02:46:08 2007
@@ -48,17 +48,17 @@
 
 	
 
-	public ServletOutputStream getOutputStream() throws IOException {
-		// TODO Auto-generated method stub
-//		return null;
-		throw new UnsupportedOperationException("This method needs to be implemented.");
-	}
+//	public ServletOutputStream getOutputStream() throws IOException {
+//		// TODO Auto-generated method stub
+////		return null;
+//		throw new UnsupportedOperationException("This method needs to be implemented.");
+//	}
 
-	public PrintWriter getWriter() throws IOException {
-		// TODO Auto-generated method stub
-//		return null;
-		throw new UnsupportedOperationException();
-	}
+//	public PrintWriter getWriter() throws IOException {
+//		// TODO Auto-generated method stub
+////		return null;
+//		throw new UnsupportedOperationException();
+//	}
 
 
 

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletConfigImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletConfigImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletConfigImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletConfigImpl.java Sun Aug  5 02:46:08 2007
@@ -81,9 +81,9 @@
             throw new IllegalArgumentException("Parameter name == null");
         }
 
-        Iterator parms = portletDD.getInitParams().iterator();
+        Iterator<InitParamDD> parms = portletDD.getInitParams().iterator();
         while(parms.hasNext()) {
-            InitParamDD param = (InitParamDD)parms.next();
+            InitParamDD param = parms.next();
             if (param.getParamName().equals(name)) {
                 return param.getParamValue();
             }
@@ -91,21 +91,20 @@
         return null;
     }
 
-    public Enumeration getInitParameterNames() {
-        return new java.util.Enumeration() {
-            private Iterator iterator =
-                new ArrayList(portletDD.getInitParams()).iterator();
+    public Enumeration<String> getInitParameterNames() {
+        return new java.util.Enumeration<String>() {
+            private Iterator<InitParamDD> iterator =
+                new ArrayList<InitParamDD>(portletDD.getInitParams()).iterator();
 
             public boolean hasMoreElements() {
                 return iterator.hasNext();
             }
 
-            public Object nextElement() {
+            public String nextElement() {
                 if (iterator.hasNext()) {
-                    return ((InitParamDD) iterator.next()).getParamName();
-                } else {
-                    return null;
-                }
+                    return iterator.next().getParamName();
+                } 
+                return null;
             }
         };
     }
@@ -120,30 +119,40 @@
     }
     // --------------------------------------------------------------------------------------------
 
-	public Enumeration getPublicRenderParameterNames() {
+	public Enumeration<String> getPublicRenderParameterNames() {
 		if (portletDD.getPublicRenderParameter() != null){
-			return portletDD.getPublicRenderParameter().elements();
+			return Collections.enumeration(portletDD.getPublicRenderParameter());
 		}
 		return null;
 	}
 
 	public String getDefaultNamespace() {
+		// how to get the corresponding porletAppDD
 		// TODO Auto-generated method stub
 		throw new UnsupportedOperationException("This method needs to be implemented.");
 	}
 
 	public Enumeration<QName> getProcessingEventQNames() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
+		
+		return (portletDD.getProcessingEvents() != null) ? 
+				Collections.enumeration(portletDD.getProcessingEvents()) :
+					null;
 	}
 
 	public Enumeration<QName> getPublishingEventQNames() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
+		return (portletDD.getPublishingEvents() != null) ?
+				Collections.enumeration(portletDD.getPublishingEvents()) :
+					null;
 	}
 
 	public Enumeration<Locale> getSupportedLocales() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
+		// for each String entry in SupportedLocales (portletDD)
+		// add an entry in the resut list (new Locale(string))
+		List<Locale> locals = new ArrayList<Locale>();
+		List<String> localsAsStrings = portletDD.getSupportedLocale();
+		for (String string : localsAsStrings) {
+			locals.add(new Locale(string));
+		}
+		return Collections.enumeration(locals);
 	}
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletRequestImpl.java Sun Aug  5 02:46:08 2007
@@ -724,7 +724,6 @@
 	}
 	
 	public String getWindowID() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
+		return internalPortletWindow.getId().getStringId();
 	}
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java Sun Aug  5 02:46:08 2007
@@ -16,7 +16,10 @@
  */
 package org.apache.pluto.internal.impl;
 
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
@@ -103,24 +106,23 @@
         return getAttributeNames(DEFAULT_SCOPE);
     }
     
-    public Enumeration getAttributeNames(int scope) {
+    public Enumeration<String> getAttributeNames(int scope) {
     	// Return all attribute names in the nested HttpSession object.
         if (scope == PortletSession.APPLICATION_SCOPE) {
             return httpSession.getAttributeNames();
         }
         // Return attribute names with the portlet-scoped prefix.
-        else {
-            Vector portletScopedNames = new Vector();
-            for (Enumeration en = httpSession.getAttributeNames();
-            		en.hasMoreElements(); ) {
-            	String name = (String) en.nextElement();
-                if (isInCurrentPortletScope(name)) {
-                	portletScopedNames.add(
-                			PortletSessionUtil.decodeAttributeName(name));
-                }
-           }
-            return portletScopedNames.elements();
+        Vector<String> portletScopedNames = new Vector<String>();
+        for (Enumeration<String> en = httpSession.getAttributeNames();
+        en.hasMoreElements(); ) {
+        	String name = en.nextElement();
+        	if (isInCurrentPortletScope(name)) {
+        		portletScopedNames.add(
+        				PortletSessionUtil.decodeAttributeName(name));
+        	}
         }
+        return portletScopedNames.elements();
+        
     }
     
     public void removeAttribute(String name) {
@@ -282,14 +284,40 @@
 
 
 	public Map<String, Object> getMap() {
-		// TODO Auto-generated method stub
-		return null;
+		List<String> paramNames = getAttributeNamesAsList(DEFAULT_SCOPE);		
+		return fillMap(paramNames, DEFAULT_SCOPE);
 	}
 
-
 	public Map<String, Object> getMap(int scope) {
-		// TODO Auto-generated method stub
-		return null;
+		List<String> paramNames = getAttributeNamesAsList(scope);		
+		return fillMap(paramNames, scope);
 	}
     
+// ***** private methods *****
+
+	/**
+	 * transforms the getAttributeNames enumeration to a list
+	 * @return list of getAttributeNames
+	 */
+	private List<String> getAttributeNamesAsList(int scope) {
+		//transform Enum to List
+		List<String> paramNames = new ArrayList<String>();
+		Enumeration<String> e = getAttributeNames(scope);
+		while (e.hasMoreElements()){
+			paramNames.add(e.nextElement());
+		}
+		return paramNames;
+	}
+	
+	/**
+	 * @param paramNames list of the attribute names to be filled in the map
+	 * @return the filled map
+	 */
+	private Map<String, Object> fillMap(List<String> paramNames, int scope) {
+		Map<String, Object> resultMap = new HashMap<String, Object>();
+		for (String string : paramNames) {
+			resultMap.put(string, getAttribute(string,scope));
+		}
+		return resultMap;
+	}
 }

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?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- 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 Sun Aug  5 02:46:08 2007
@@ -17,17 +17,15 @@
 package org.apache.pluto.internal.impl;
 
 import java.io.IOException;
-import java.io.Reader;
 import java.io.Serializable;
-import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.rmi.MarshalException;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.portlet.PortalContext;
 import javax.portlet.PortletException;
@@ -40,14 +38,13 @@
 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.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.logging.Log;
@@ -55,6 +52,7 @@
 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;
@@ -105,85 +103,89 @@
 	/* (non-Javadoc)
 	 * @see javax.portlet.StateAwareResponse#setEvent(javax.xml.namespace.QName, java.lang.Object)
 	 */
-	public void setEvent(QName qname, java.io.Serializable value) {
+	public void setEvent(QName qname, Serializable value) throws IllegalArgumentException {
 		EventProvider provider = callback.getEventProvider(
-				getHttpServletRequest(),getHttpServletResponse());
-		
-		XMLStreamReader xml = null;
-		try {
-			
-			EventDefinitionDD eventDefinitionDD = provider.getEventDefinition(qname);
-			if (value != null && eventDefinitionDD == null) {
-				// TODO: throw the right exception
-				throw new PortletException("No Event Defintion!");
-			} if (eventDefinitionDD == null) {
-				// TODO: throw the right exception
-				throw new PortletException("No Event Defintion!");
-			}
+				getHttpServletRequest(),getHttpServletResponse(), container);
+
+		if (isDeclaredAsPublishingEvent(qname)) {
 			
-			ClassLoader loader = Thread.currentThread().getContextClassLoader();
-			Class clazz = loader.loadClass(eventDefinitionDD.getJavaClass());		
+			if (!isValueInstanceOfDefinedClass(qname,value))
+				throw new IllegalArgumentException("Payload has not the right class");
 
-			JAXBContext jc = JAXBContext.newInstance(clazz);
+			XMLStreamReader xml = null;
+			try {
 
-			Marshaller marshaller  = jc.createMarshaller();
-//			marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, 
-//					Boolean.TRUE );
+				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();
 
-			Writer out = new StringWriter();
-			
-			marshaller.marshal(new JAXBElement(
-					eventDefinitionDD.getName(),clazz,value), out);
+					JAXBContext jc = JAXBContext.newInstance(clazz);
 
-			Reader in = new StringReader(out.toString());
+					Marshaller marshaller  = jc.createMarshaller();
 
-			xml = XMLInputFactory.newInstance().createXMLStreamReader(in);
+					Writer out = new StringWriter();
 
-			if (xml != null) {
-				provider.registerToFireEvent(new EventImpl(qname,(Serializable) xml));
-			} else { 
-				provider.registerToFireEvent(new EventImpl(qname,(Serializable) value));
+					marshaller.marshal(new JAXBElement(qname,clazz,value), out);
+//					marshaller.marshal(value, out);
+
+					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();
 			}
-		} 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 (XMLStreamException 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();
-		} 
+		}
 	}
 
 	/* (non-Javadoc)
-	 * @see javax.portlet.StateAwareResponse#setEvents(java.util.Map)
+	 * @see javax.portlet.StateAwareResponse#setEvent(java.lang.String, java.lang.Object)
 	 */
-	public void setEvents(java.util.Map<javax.xml.namespace.QName, java.io.Serializable> events) {
-		Set keys = events.keySet();
-		for (Object key : keys) {
-			setEvent((QName)key,events.get(key));
-		}
+	public void setEvent(String name, Serializable value) {
+		String defaultEventNamespace = getDefaultEventNamespace();
+		setEvent((new QName(defaultEventNamespace, name)),value);
 	}
+	
+	/* (non-Javadoc)
+	 * @see javax.portlet.StateAwareResponse#setEvents(java.util.Map)
+	 */
+// Not in API anymore
+//	public void setEvents(Map events) {
+//		Set keys = events.keySet();
+//		for (Object key : keys) {
+//			setEvent((QName)key,(Serializable)events.get(key));
+//		}
+//	}
 
 	/* (non-Javadoc)
 	 * @see javax.servlet.http.HttpServletResponseWrapper#sendRedirect(java.lang.String)
@@ -437,16 +439,53 @@
 		// TODO Auto-generated method stub
 		throw new UnsupportedOperationException("This method needs to be implemented.");
 	}
-
-	public void setEvent(String name, java.io.Serializable value) {
-		// TODO Auto-generated method stub
-		
+	
+// 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));
+//		}	
+//	}
+
+	/**
+	 * 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 ******
 
-	public void setDefaultNamespacedEvents(Map<String, Object> events) {
-		// TODO Auto-generated method stub
-		
+	private boolean isDeclaredAsPublishingEvent(QName qname) {
+		List<QName> events = internalPortletWindow.getPortletEntity()
+			.getPortletDefinition().getPublishingEvents();
+		return events != null && events.contains(qname);
 	}
-
 	
+	private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value){
+		PortletAppDD portletAppDD = null;
+		try {
+			 portletAppDD =
+				container.getPortletApplicationDescriptor(internalPortletWindow.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-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?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- 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 Sun Aug  5 02:46:08 2007
@@ -29,6 +29,7 @@
 import org.apache.pluto.EventContainer;
 import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.descriptors.portlet.EventDefinitionDD;
+import org.apache.pluto.descriptors.portlet.PortletAppDD;
 
 	/**
 	 * 
@@ -58,7 +59,7 @@
 	 *            the name of the event
 	 * @return ArrayList of associated InternalPortletWindows
 	 */
-	public abstract List<String> getAllPortletNames(String evtLabel);
+//	public abstract List<String> getAllPortletNames(String evtLabel);
 
 	/**
 	 * Bind an InternalPortletWindow to an event and/or create a new event
@@ -72,21 +73,21 @@
 	 *            null or the pw to be associated with the event
 	 * @param eventDefinitionDD TODO
 	 */
-	public abstract void registerEvent(String evtLabel, String portletName, EventDefinitionDD eventDefinitionDD);
+//	public abstract void registerEvent(String evtLabel, String portletName, EventDefinitionDD eventDefinitionDD);
 
 	/**
 	 * 
 	 * @param evtLabel -
 	 *            creates a new event with an empty ArrayList
 	 */
-	public abstract void registerEvent(String evtLabel);
+//	public abstract void registerEvent(String evtLabel);
 
 	/**
 	 * 
 	 * @param evtLabel -
 	 *            removes an event
 	 */
-	public abstract void removeEvent(String evtLabel);
+//	public abstract void removeEvent(String evtLabel);
 
 	/**
 	 * 
@@ -96,34 +97,34 @@
 	 *            pw is removed from the events listed herein or all events if
 	 *            evtLabelsList is null
 	 */
-	public abstract void removePortletName(String portletName,
-			List<String> evtLabelsList);
+//	public abstract void removePortletName(String portletName,
+//			List<String> evtLabelsList);
 
 	/**
 	 * Removes the portlet name.
 	 * 
 	 * @param portletName the portlet name
 	 */
-	public abstract void removePortletName(String portletName);
+//	public abstract void removePortletName(String portletName);
 
 	/**
 	 * 
 	 * @return Enumeration containing all events
 	 */
-	public abstract Enumeration<String> getAllEventLabelsEnumeration();
+//	public abstract Enumeration<String> getAllEventLabelsEnumeration();
 
 	/**
 	 * 
 	 * @return String list containing all events
 	 */
-	public abstract List<String> getAllEventLabelsList();
+//	public abstract List<String> getAllEventLabelsList();
 
 	/**
 	 * Gets all saved events.
 	 * 
 	 * @return the saved events
 	 */
-	public abstract List<Event> getAllSavedEvents();
+//	public abstract List<Event> getAllSavedEvents();
 	
 	/**
 	 * Gets the event.
@@ -133,7 +134,7 @@
 	 * 
 	 * @return the event
 	 */
-	public abstract Event getEvent(String eventName, int eventNumber);
+//	public abstract Event getEvent(String eventName, int eventNumber);
 
 	/**
 	 * Fire events.
@@ -156,7 +157,7 @@
 	 * 
 	 * @param eventDefinitionDD the event definition DD
 	 */
-	public abstract void registerEventDefinitionDD(EventDefinitionDD eventDefinitionDD);
+//	public abstract void registerEventDefinitionDD(EventDefinitionDD eventDefinitionDD);
 	
 	/**
 	 * Gets the request.
@@ -171,4 +172,18 @@
 	 * @return the response
 	 */
 	public HttpServletResponse getResponse();
+	
+	/**
+	 * Gets the default event namespace.
+	 * 
+	 * @return the default event namespace
+	 */
+	public abstract String getDefaultEventNamespace(String portletName);
+	
+	/**
+	 * Sets the default event namespace.
+	 * 
+	 * @return the string
+	 */
+//	public abstract void setDefaultEventNamespace(PortletAppDD portletAppDD);
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/spi/PortalCallbackService.java Sun Aug  5 02:46:08 2007
@@ -21,6 +21,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletWindow;
 
 /**
@@ -75,7 +76,8 @@
                                     String property,
                                     String value);
     
-    public EventProvider getEventProvider(HttpServletRequest request, HttpServletResponse response);
+    public EventProvider getEventProvider(HttpServletRequest request,
+    		HttpServletResponse response, PortletContainer container);
     
     public EventProvider getEventProvider();
     

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/ActionResponseWrapper.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/ActionResponseWrapper.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/ActionResponseWrapper.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/ActionResponseWrapper.java Sun Aug  5 02:46:08 2007
@@ -88,10 +88,10 @@
 		this.getStateAwareResponse().setEvent(qname, value);
 	}
 
-	public void setEvents(Map<javax.xml.namespace.QName, java.io.Serializable> events) {
-		// TODO look for setEvents in StateAwareResponse
-//		this.getStateAwareResponse().setEvents(events);		
-	}
+//	public void setEvents(Map<javax.xml.namespace.QName, java.io.Serializable> events) {
+//		// TODO look for setEvents in StateAwareResponse
+////		this.getStateAwareResponse().setEvents(events);		
+//	}
     // --------------------------------------------------------------------------------------------
 
 	public PortletMode getPortletMode() {
@@ -106,19 +106,8 @@
 		return this.getStateAwareResponse().getWindowState();
 	}
 
-	public void setNextPossiblePortletModes(Enumeration portletModes) {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
-	}
-
-	public void setDefaultNamespacedEvents(Map<String, Object> events) {
-		// TODO Auto-generated method stub
-		
-	}
-
 	public void setEvent(String name, java.io.Serializable value) {
-		// TODO Auto-generated method stub
-		
+		this.getStateAwareResponse().setEvent(name, value);
 	}
 }
 

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletRequestWrapper.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletRequestWrapper.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletRequestWrapper.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletRequestWrapper.java Sun Aug  5 02:46:08 2007
@@ -207,24 +207,12 @@
     }
     // --------------------------------------------------------------------------------------------
 
-	public String getLifecyclePhase() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
-	}
-
-	public Cookie[] getCookieProperties() {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("This method needs to be implemented.");
-	}
-
 	public Map<String, String[]> getPrivateParameterMap() {
-		// TODO Auto-generated method stub
-		return null;
+		return this.getPortletRequest().getPrivateParameterMap();
 	}
 
 	public Map<String, String[]> getPublicParameterMap() {
-		// TODO Auto-generated method stub
-		return null;
+		return this.getPortletRequest().getPublicParameterMap();
 	}
 }
 

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletResponseWrapper.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletResponseWrapper.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletResponseWrapper.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-container/src/main/java/org/apache/pluto/wrappers/PortletResponseWrapper.java Sun Aug  5 02:46:08 2007
@@ -100,8 +100,7 @@
     }
 
 	public void addProperty(String key, Element element) {
-		// TODO Auto-generated method stub
-		
+		this.getPortletResponse().addProperty(key, element);
 	}
 }
 

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionDD.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionDD.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionDD.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionDD.java Sun Aug  5 02:46:08 2007
@@ -64,6 +64,7 @@
 @XmlType(name = "event-definitionType", propOrder = {
     "description",
     "name",
+    "qname",
     "alias",
     "javaClass"
 })
@@ -76,13 +77,18 @@
 	
 	/**
 	 * Name of the Event
+	 * <choice>
+	 * 		<element name="qname" type="xs:QName"/>
+	 * 		<element name="name" type="string"/>
+	 * </choice>
 	 */
-	private QName name;	
+	private QName qname;	
+	private String name;
 	
 	/**
 	 * Java-Type of the Event
 	 */
-	@XmlElement(name = "java-class")
+	@XmlElement(name = "value-type")
 	private String javaClass;
 	
 	/**
@@ -164,14 +170,14 @@
 	 * @return Returns the name.
 	 */
 	public QName getName() {
-		return name;
+		return (qname==null) ? new QName(name) : qname; 
 	}
 
 	/**
 	 * @param name The name to set.
 	 */
-	public void setName(QName name) {
-		this.name = name;
+	public void setName(QName qname) {
+		this.qname = qname;
 	}
 
 	/**

Added: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionReferenceDD.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionReferenceDD.java?view=auto&rev=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionReferenceDD.java (added)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/EventDefinitionReferenceDD.java Sun Aug  5 02:46:08 2007
@@ -0,0 +1,60 @@
+package org.apache.pluto.descriptors.portlet;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.namespace.QName;
+
+/**
+ * 
+ * the event definition reference type
+ * 
+ * <complexType name="event-definition-referenceType">
+ *		<annotation>
+ *			<documentation>
+ * 			The event-definition-referenceType is used to refernece events 
+ *			declared with the event-definition element on application level.
+ *			Used in: portlet
+ *			</documentation>
+ *		</annotation>
+ *		<choice>
+ *			<element name="qname" type="xs:QName"/>
+ *			<element name="name" type="string"/>
+ *		</choice>
+ *		<attribute name="id" type="string" use="optional"/>
+ *	</complexType>
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "event-definition-referenceType", propOrder = {
+    "qname",
+    "name"
+})
+public class EventDefinitionReferenceDD {
+	
+	/**
+	 * Name of the Event
+	 * <choice>
+	 * 		<element name="qname" type="xs:QName"/>
+	 * 		<element name="name" type="string"/>
+	 * </choice>
+	 */
+	private QName qname;	
+	private String name;
+	
+	/**
+	 * @return Returns the name.
+	 */
+	public QName getName() {
+		if ((qname == null) && (name == null))
+			return null;		
+		return (qname==null) ? new QName(name) : qname; 
+	}
+
+	/**
+	 * @param name The name to set.
+	 */
+	public void setName(QName qname) {
+		this.qname = qname;
+	}
+
+}

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/ObjectFactory.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/ObjectFactory.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/ObjectFactory.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/ObjectFactory.java Sun Aug  5 02:46:08 2007
@@ -48,7 +48,7 @@
     private final static QName _PortletApp1_QNAME = new QName("http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd", "portlet-app");
     private final static QName _Portlet1DD_QNAME = new QName("http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd", "portlet");
     private final static QName _PortletDD_QNAME = new QName("http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd", "portlet");
-
+  
     /**
      * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.sun.java.xml.ns.portlet.portlet_app_2_0
      * 
@@ -352,8 +352,8 @@
      * 
      */
     @XmlElementDecl(namespace = "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd", name = "supported-publishing-event", scope = PortletDD.class)
-    public JAXBElement<QName> createPortletDDSupportedPublishingEvent(QName value) {
-        return new JAXBElement<QName>(_PortletDDSupportedPublishingEvent_QNAME, QName.class, PortletDD.class, value);
+    public JAXBElement<EventDefinitionReferenceDD> createPortletDDSupportedPublishingEvent(EventDefinitionReferenceDD value) {
+        return new JAXBElement<EventDefinitionReferenceDD>(_PortletDDSupportedPublishingEvent_QNAME, EventDefinitionReferenceDD.class, PortletDD.class, value);
     }
 
     /**
@@ -370,8 +370,8 @@
      * 
      */
     @XmlElementDecl(namespace = "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd", name = "supported-processing-event", scope = PortletDD.class)
-    public JAXBElement<QName> createPortletDDSupportedProcessingEvent(QName value) {
-        return new JAXBElement<QName>(_PortletDDSupportedProcessingEvent_QNAME, QName.class, PortletDD.class, value);
+    public JAXBElement<EventDefinitionReferenceDD> createPortletDDSupportedProcessingEvent(EventDefinitionReferenceDD value) {
+        return new JAXBElement<EventDefinitionReferenceDD>(_PortletDDSupportedProcessingEvent_QNAME, EventDefinitionReferenceDD.class, PortletDD.class, value);
     }
 
     /**
@@ -473,4 +473,5 @@
         return new JAXBElement<PortletAppDD>(_PortletApp1_QNAME, PortletAppDD.class, null, value);
     }
 
+    
 }

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/PortletDD.java Sun Aug  5 02:46:08 2007
@@ -17,6 +17,7 @@
  */
 package org.apache.pluto.descriptors.portlet;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Vector;
 
@@ -127,7 +128,7 @@
 	
 	/** the supported processing Events */
 	@XmlElement(name = "supported-processing-event")
-    private List<QName> processingEvents = null;
+    private List<EventDefinitionReferenceDD> processingEvents = null;
 	
     /** The unique name of the portlet. */
 	@XmlElement(name = "portlet-name")
@@ -150,13 +151,13 @@
 	
 	/** the supported publishing Events */
 	@XmlElement(name = "supported-publishing-event")
-    private List<QName> publishingEvents = null;
+    private List<EventDefinitionReferenceDD> publishingEvents = null;
 	
 	@XmlElement (name = "supported-locale")
-	private String supportedLocale = null;
+	private List<String> supportedLocale = null;
 	
 	@XmlElement (name = "supported-locale", namespace = QNAME_JSR168)
-	private String supportedLocale1 = null;
+	private List<String> supportedLocale1 = null;
 	
 	@XmlElement(name = "portlet-info")
     private PortletInfoDD portletInfo = null;
@@ -198,7 +199,7 @@
 	
     /** the supported public render parameter */
 	@XmlElement(name = "supported-public-render-parameter")
-    private Vector<String> publicRenderParameter = null;
+    private List<String> publicRenderParameter = null;
     
     
     // Constructor -------------------------------------------------------------
@@ -314,31 +315,45 @@
 
 
 	public List<QName> getProcessingEvents() {
-		return processingEvents;
+		List<QName> list = new ArrayList<QName>();
+		if (processingEvents != null) {
+			for (EventDefinitionReferenceDD ref : processingEvents) {
+				list.add(ref.getName());
+			}
+			return list;
+		}
+		return null;
 	}
 
 
-	public void setProcessingEvents(List<QName> processingEvents) {
+	public void setProcessingEvents(List<EventDefinitionReferenceDD> processingEvents) {
 		this.processingEvents = processingEvents;
 	}
 
 
 	public List<QName> getPublishingEvents() {
-		return publishingEvents;
+		List<QName> list = new ArrayList<QName>();
+		if (publishingEvents != null) {
+			for (EventDefinitionReferenceDD ref : publishingEvents) {
+				list.add(ref.getName());
+			}
+			return list;
+		}
+		return null;
 	}
 
 
-	public void setPublishingEvents(List<QName> publishingEvents) {
+	public void setPublishingEvents(List<EventDefinitionReferenceDD> publishingEvents) {
 		this.publishingEvents = publishingEvents;
 	}
 
 
-	public Vector<String> getPublicRenderParameter() {
+	public List<String> getPublicRenderParameter() {
 		return publicRenderParameter;
 	}
 
 
-	public void setPublicRenderParameter(Vector<String> publicRenderParameter) {
+	public void setPublicRenderParameter(List<String> publicRenderParameter) {
 		this.publicRenderParameter = publicRenderParameter;
 	}
 
@@ -407,14 +422,14 @@
 	}
 
 
-	public String getSupportedLocale() {
+	public List<String> getSupportedLocale() {
 		if (supportedLocale != null)
 			return supportedLocale;
 		return supportedLocale1;
 	}
 
 
-	public void setSupportedLocale(String supportedLocale) {
+	public void setSupportedLocale(List<String> supportedLocale) {
 		this.supportedLocale = supportedLocale;
 		this.supportedLocale1 = supportedLocale;
 	}

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/jaxb.index
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/jaxb.index?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/jaxb.index (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-api/src/main/java/org/apache/pluto/descriptors/portlet/jaxb.index Sun Aug  5 02:46:08 2007
@@ -8,3 +8,4 @@
 PublicRenderParamDD
 SupportsDD
 ExpirationCacheDD
+EventDefinitionReferenceDD

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-impl/src/test/java/org/apache/pluto/descriptors/services/jaxb/JaxBDescriptorServiceImplTest.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-impl/src/test/java/org/apache/pluto/descriptors/services/jaxb/JaxBDescriptorServiceImplTest.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-impl/src/test/java/org/apache/pluto/descriptors/services/jaxb/JaxBDescriptorServiceImplTest.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-descriptor-impl/src/test/java/org/apache/pluto/descriptors/services/jaxb/JaxBDescriptorServiceImplTest.java Sun Aug  5 02:46:08 2007
@@ -107,8 +107,8 @@
 				"<role-name>NMTOKEN</role-name>\n" +
 				"<role-link>role-link</role-link>\n" +
 				"</security-role-ref>\n" +
-				"<supported-processing-event>supported-processing-event</supported-processing-event>\n" +
-				"<supported-publishing-event>supported-publishing-event</supported-publishing-event>\n" +
+				"<supported-processing-event><name>supported-processing-event</name></supported-processing-event>\n" +
+				"<supported-publishing-event><qname xmlns:x=\"http://test.com\">supported-publishing-event</qname></supported-publishing-event>\n" +
 				"<supported-public-render-parameter>supported-public-render-parameter</supported-public-render-parameter>\n" +
 				"</portlet>\n" );
 		attrs286.append("" + 
@@ -155,7 +155,7 @@
 			    "<description xml:lang=\"de\">description</description>\n" +
 			    "<name>QName</name>\n" +
 			    "<alias>QName</alias>\n" +
-			    "<java-class>java-class</java-class>\n" +
+			    "<value-type>java-class</value-type>\n" +
 			  "</event-definition>\n" +
 			  "<public-render-parameter id=\"public1\">\n" +
 			    "<description xml:lang=\"de\">description</description>\n" +

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventAttribute.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/EventAttribute.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventAttribute.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventAttribute.java Sun Aug  5 02:46:08 2007
@@ -19,6 +19,7 @@
  * The Class EventAttribute.
  * Stores the attributes for a given event.
  */
+@Deprecated
 public class EventAttribute {
 	
 	/** The event number. */

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventList.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/EventList.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventList.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventList.java Sun Aug  5 02:46:08 2007
@@ -30,7 +30,7 @@
 public class EventList {
 	
 	/** The events. */
-	private Map<Event,EventAttribute> events = new HashMap<Event, EventAttribute>();;
+	private Map<Event,Boolean> events = new HashMap<Event, Boolean>();;
 	
 	/**
 	 * Adds an event.
@@ -38,8 +38,8 @@
 	 * @param event the event
 	 * @param eventNumber the event number
 	 */
-	public void addEvent(Event event, int eventNumber){
-		events.put(event, new EventAttribute(eventNumber));
+	public void addEvent(Event event){
+		events.put(event, new Boolean(true));
 	}
 
 	/**
@@ -63,7 +63,7 @@
 	 * @return true, if is not processed
 	 */
 	public boolean isNotProcessed(Event event) {
-		return events.get(event).isNotProcessed();
+		return events.get(event).booleanValue();
 	}
 
 	/**
@@ -72,9 +72,9 @@
 	 * @return true, if has more events
 	 */
 	public boolean hasMoreEvents() {
-		Collection<EventAttribute> attr = this.events.values();
-		for (EventAttribute attribute : attr) {
-			if (attribute.isNotProcessed())
+		Collection<Boolean> attr = this.events.values();
+		for (Boolean attribute : attr) {
+			if (attribute.booleanValue())
 				return true;
 		}
 		return false;
@@ -86,8 +86,8 @@
 	 * @param event the processed
 	 */
 	public void setProcessed(Event event) {
-		EventAttribute attr = events.remove(event);
-		attr.setNotProcessed(false);
+		events.remove(event);
+		Boolean attr = new Boolean(false);
 		events.put(event, attr);
 	}
 	
@@ -99,24 +99,12 @@
 	 * 
 	 * @return the event
 	 */
-	public Event getEvent(String eventName, int eventNumber){
+	public Event getEvent(String eventName){
 		for (Event event : getEvents()) {
 			if ((event.getName() != null) && (event.getName().toString().equals(eventName)))
-				if (events.get(event).getEventNumber() == eventNumber)
-					return event;
+				return event;
 		}
 		return null;
-	}
-	
-	/**
-	 * Gets the number.
-	 * 
-	 * @param event the event
-	 * 
-	 * @return the number
-	 */
-	public int getNumber(Event event){
-		return events.get(event).getEventNumber();
 	}
 	
 	/**

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?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- 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 Sun Aug  5 02:46:08 2007
@@ -20,9 +20,11 @@
 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;
@@ -37,13 +39,19 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.pluto.Constants;
 import org.apache.pluto.EventContainer;
+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;
 import org.apache.pluto.driver.services.portal.PortletApplicationConfig;
 import org.apache.pluto.driver.services.portal.PortletWindowConfig;
 import org.apache.pluto.driver.url.PortalURL;
@@ -52,35 +60,22 @@
 
 public class EventProviderImpl implements org.apache.pluto.spi.EventProvider {
 	
+	private static final int DEFAULT_MAPSIZE = 10;
+
 	/** Logger. */
     private static final Log LOG = LogFactory.getLog(EventProviderImpl.class);
 
 	private static final long WAITING_CYCLE = 100;
-	
-	private int eventNumber = 0;
     
     private HttpServletRequest request;
     private HttpServletResponse response;
+    private PortletContainer container;
     
     ThreadGroup threadGroup = new ThreadGroup("FireEventThreads");
     
-    /**
-     * Map that contains our events. The key is a string with the name of the event. 
-     * The value is a List with all associated PortletWindows.
-     * FIXME: should be in another class
-     */
-    private static Map<String, List<String>> portalEvts = 
-    	new HashMap<String, List<String>>(100);
-    private static Map<String, EventDefinitionDD> portalEvtsDefs = 
-    	new HashMap<String, EventDefinitionDD>(100);
-
-    //private Map<Event,Boolean> savedEvents = new HashMap<Event,Boolean>();
-    
     private EventList savedEvents = new EventList();
     
-    //private Map<Event, List<String>> savedEventsAndPortlets = new HashMap<Event, List<String>>();
-    
-    private Map<PortletWindow,PortletWindowThread> portletWindowThreads = new HashMap<PortletWindow, PortletWindowThread>();
+    private Map<String,PortletWindowThread> portletWindowThreads = new HashMap<String, PortletWindowThread>();
     	
     /**
      * factory method
@@ -90,12 +85,13 @@
      * @return The corresponding EventProvierImpl instance
      */
     public static EventProviderImpl getEventProviderImpl(HttpServletRequest request,
-    		HttpServletResponse response) {
+    		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);
     	}
     	return event;
@@ -128,143 +124,10 @@
      */
     public void registerToFireEvent(Event event) 
     throws ServletException, IOException, PortletException, PortletContainerException {
-    	savedEvents.addEvent(event, ++eventNumber);	
+    	savedEvents.addEvent(event);	
     }
 
 	/**
-	 * Get all Portlets, which are registered to this event
-     * @param evtLabel	- the name of the event
-     * @return String list of associated InternalPortletWindows
-     */
-    public List<String> getAllPortletNames(String evtLabel) {
-    	return portalEvts.get(evtLabel);
-    }
-    
-    /**
-     * Bind an PortletWindow to an event and/or create a new event label.
-     * If the event label isn't already in the portalEvts hashmap, add it.
-     * 
-     * 
-     * @param evtLabel - the event we want to add
-     * @param portletName - null or the pw to be associated with the event
-     */
-    public void registerEvent(String evtLabel, String portletName, EventDefinitionDD eventDefinitionDD) {
-    	if (evtLabel == null)
-    		return ;
-    	
-    	// check, if event by that name already exists 
-    	if (portalEvts.containsKey(evtLabel)) {
-    		if (portletName != null) {
-    			// we don't want duplicate Portlet Window entries, so leave 'em out
-    			if (!this.containsValue(portletName, portalEvts.get(evtLabel))){
-    				portalEvts.get(evtLabel).add(portletName);
-    			}
-    			
-    		}
-    	}
-    	
-    	else {
-    		List<String> list = new ArrayList<String>();
-    		if (portletName != null) 
-    			list.add(portletName);
-    		portalEvts.put(evtLabel, list);
-    	}
-    }
-    
-    /**
-     * 
-     * @param evtLabel - creates a new event with an empty ArrayList
-     */
-    public void registerEvent(String evtLabel) {
-    	if (evtLabel != null)
-    		registerEvent(evtLabel, null, null);
-    }
-	
-    /**
-     * 
-     * @param evtLabel - removes an event
-     */
-    public synchronized void removeEvent(String evtLabel) {
-    	if (!portalEvts.containsKey(evtLabel)) 
-    		return ;
-    	
-    	portalEvts.remove(evtLabel);
-    }
-    
-    /**
-     * 
-     * @param pw - the InternalPortletWindow to be removed
-     * @param evtLabelsList - pw is removed from the events listed herein or all events if evtLabelsList is null
-     */
-    public synchronized void removePortletName(String portletName, List<String> evtLabelsList) {
-    	
-    	// set up a list of events that are going to be looked up for the portlet window we want
-    	// to remove OR just a list of all events
-    	List<String> listOfEvtLabels = (evtLabelsList==null)?this.getAllEventLabelsList():evtLabelsList;
-    	
-    	// iterate through the elements of the evtLabelsList and remove the InternalPortletWindow if any
-    	List<String> tmp;
-    	for (String element : listOfEvtLabels) {
-    		tmp = portalEvts.get(element);
-    		if (this.containsValue(portletName, tmp))
-    			tmp.remove(portletName);	
-    	}
-    }
-    
-    public synchronized void removePortletName(String portletName){
-    	removePortletName(portletName,null);
-    }
-
-    /**
-     * 
-     * @return String enumeration containing all events
-     */
-    public Enumeration<String> getAllEventLabelsEnumeration () {
-    	Vector<String> v = new Vector<String>();
-    	
-    	for (String element : portalEvts.keySet()) {
-    		v.add(element);
-    	}
-    	return v.elements();
-    }
-    
-    /**
-     * 
-     * @return String list containing all events
-     */
-    public List<String> getAllEventLabelsList () {
-    	List<String> l = new ArrayList<String>();
-    	
-    	for (String element : portalEvts.keySet()) {
-    		l.add(element);
-    	}
-   
-    	return l;	
-    }
-    
-    // private
-    
-    /**
-     * returns if InternalPortletWindow pw is contained in the ArrayList l of PortletWindows
-     */
-    private boolean containsValue(String portletName, List<String> l) {
-    	
-    	for (String element : l)
-    		if (element.equals(portletName))
-    			return true;
-    	
-    	return false;
-    }
-
-	/**
-	 * @return Returns the savedEvents.
-	 */
-	public List<Event> getAllSavedEvents() {
-		return savedEvents.getEvents();
-	}
-
-
-	/**
 	 * Fire all saved events
 	 * Note, that the order isn't important @see PLT14.3.2 
 	 * @param eventContainer The {@link PortletContainerImpl} to fire the events
@@ -279,10 +142,12 @@
 		while (savedEvents.hasMoreEvents() && savedEvents.getSize() < Constants.MAX_EVENTS_SIZE){
 			
 			Event eActual = getArbitraryEvent();
-
-        	List<String> portletNames = (eActual.getQName() != null) ? portalEvts.get(eActual.getQName().toString()) : null;
+			
+			this.savedEvents.setProcessed(eActual);
+			
+        	List<String> portletNames = getAllPortletsRegisteredForEvent(eActual,driverConfig);
         	
-        	Collection<PortletWindowConfig> portlets = getAllPortletsInPortal(driverConfig);
+        	Collection<PortletWindowConfig> portlets = getAllPortlets();
         	
         	// iterate all portlets in the portal        	
         	for (PortletWindowConfig config : portlets) {
@@ -290,25 +155,105 @@
         		if (portletNames != null) {
         			for (String portlet : portletNames) {
         				if (portlet.equals(config.getId())){
-        					
+
+        					// the thread now is a new one, with possible waiting,
+        					// for the old to exit
         					PortletWindowThread portletWindowThread = 
         						getPortletWindowThread(eventContainer, config, window);
 
         					// is this event 
         					portletWindowThread.addEvent(eActual);
- 
+
         					portletWindowThread.start();
         				}
         			}
         		}
         	}
-        	
-        	this.savedEvents.setProcessed(eActual);
-    		
+        	waitForEventExecution();
+        	try {
+				Thread.sleep(WAITING_CYCLE);
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
 		waitForEventExecution();
 	}
 
+	private List<String> getAllPortletsRegisteredForEvent(Event event, DriverConfiguration driverConfig) {
+		Set<String> resultSet = new HashSet<String>();
+		List<String> resultList = new ArrayList<String>();
+		QName eventName = event.getQName();
+		Collection<PortletWindowConfig> portlets = getAllPortlets();
+		
+		for (PortletWindowConfig portlet : portlets) {
+			String contextPath = portlet.getContextPath();
+			PortletAppDD portletAppDD = null;
+			try {
+				portletAppDD = container.getPortletApplicationDescriptor(contextPath);
+				List<PortletDD> portletDDs = portletAppDD.getPortlets();
+				List<QName> aliases = getAllAliases(eventName, portletAppDD);
+				for (PortletDD portletDD : portletDDs) {
+					List<QName> processingEvents = portletDD.getProcessingEvents();
+					if ((processingEvents != null) && processingEvents.contains(eventName)){
+						if (portletDD.getPortletName().equals(portlet.getPortletName()) ){
+							resultSet.add(portlet.getId());							
+						}
+					} else {
+						
+						if (processingEvents!= null) {
+							for (QName name : processingEvents) {		
+								// add also grouped portlets, that ends with "."
+								if (name.toString().endsWith(".") && eventName.toString().startsWith(name.toString())
+										&& portletDD.getPortletName().equals(portlet.getPortletName())){
+									resultSet.add(portlet.getId());
+								}
+								// also look for alias names:
+								if (aliases != null) {
+									for (QName alias : aliases) {
+										if (alias.toString().equals(name.toString()) && 
+												portletDD.getPortletName().equals(portlet.getPortletName())) {
+											resultSet.add(portlet.getId());
+										}
+									}
+								}								
+								// also look for default namespaced events
+								if (name.getNamespaceURI() == null || name.getNamespaceURI().equals("")){
+									String defaultNamespace = getDefaultEventNamespace(portlet.getPortletName());
+									QName qname = new QName(defaultNamespace,name.getLocalPart());
+									if (eventName.toString().equals(qname.toString()) &&
+											portletDD.getPortletName().equals(portlet.getPortletName())){
+										resultSet.add(portlet.getId());
+									}
+								}
+							}
+						}
+					} 
+				}
+			} catch (PortletContainerException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+
+		//make list
+		for (String name : resultSet) {
+			resultList.add(name);
+		}
+		return resultList;
+	}
+
+	private List<QName> getAllAliases(QName eventName, PortletAppDD portletAppDD) {
+		if (portletAppDD.getEvents() != null) {
+			for (EventDefinitionDD eventDefinition : portletAppDD.getEvents()) {
+				if (eventName.toString().equals(eventDefinition.getName().toString())){
+					return eventDefinition.getAlias();
+				}
+			}
+		}
+		return null;
+	}
+
 	/**
 	 * gets the right PortletWindowThread or makes a new one,
 	 * if theres none
@@ -318,11 +263,30 @@
 	 * @return
 	 */
 	private PortletWindowThread getPortletWindowThread(EventContainer eventContainer, PortletWindowConfig config, PortletWindow window) {
-		PortletWindowThread portletWindowThread = portletWindowThreads.get(window);
+		String windowID = window.getId().getStringId();
+		PortletWindowThread portletWindowThread = portletWindowThreads.get(windowID);
 		if (portletWindowThread == null){
 			portletWindowThread = new PortletWindowThread(
 					threadGroup,config.getId(),this, window, eventContainer);
-			portletWindowThreads.put(window, portletWindowThread);
+			portletWindowThreads.put(windowID, portletWindowThread);
+		} else {
+			// a thread could be started twice, so we make a new one,
+			// after the old thread stopped
+//			try {
+			try {
+				portletWindowThread.join();
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			portletWindowThreads.remove(portletWindowThread);
+			portletWindowThread = new PortletWindowThread(
+					threadGroup,config.getId(),this, window, eventContainer);
+			portletWindowThreads.put(windowID, portletWindowThread);
+//			} catch (InterruptedException e) {
+//				// TODO Auto-generated catch block
+//				e.printStackTrace();
+//			}
 		}
 		return portletWindowThread;
 	}
@@ -347,24 +311,6 @@
 	}
 
 	/**
-	 * Gets all portlets in portal.
-	 * 
-	 * @param driverConfig the driver config
-	 * 
-	 * @return the all portlets in portal
-	 */
-	private Collection<PortletWindowConfig> getAllPortletsInPortal(DriverConfiguration driverConfig) {
-		Collection<PortletWindowConfig> allPortlets = new ArrayList<PortletWindowConfig>();
-		Iterator<PortletApplicationConfig> portletApps = driverConfig.getPortletApplications().iterator();
-		while (portletApps.hasNext()){
-			PortletApplicationConfig portletApp = portletApps.next();
-			Collection<PortletWindowConfig> portlets = portletApp.getPortlets();
-			allPortlets.addAll(portlets);
-		}
-		return allPortlets;
-	}
-
-	/**
 	 * gets an arbitrary event, which is not processed yet.
 	 * @return the arbitrary event
 	 */
@@ -382,7 +328,38 @@
 	 * @see org.apache.pluto.spi.EventProvider#getEventDefinition(javax.xml.namespace.QName)
 	 */
 	public EventDefinitionDD getEventDefinition(QName qname) {
-		return portalEvtsDefs.get(qname.toString());
+		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);
+		Collection<PortletApplicationConfig> apps = driverConfig.getPortletApplications();
+		Collection<PortletWindowConfig> portlets = new ArrayList<PortletWindowConfig>();
+		for (PortletApplicationConfig app : apps) {
+			portlets.addAll(app.getPortlets());			
+		}
+		return portlets;
 	}
 
 	/**
@@ -398,13 +375,6 @@
 	public HttpServletResponse getResponse() {
 		return response;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.apache.pluto.spi.EventProvider#getEvent(java.lang.String, int)
-	 */
-	public Event getEvent(String eventName, int eventNumber) {
-		return savedEvents.getEvent(eventName, eventNumber);
-	}
 	
 	/**
 	 * Gets the saved events.
@@ -415,9 +385,22 @@
 		return savedEvents;
 	}
 
-	
-	public void registerEventDefinitionDD(EventDefinitionDD eventDefinitionDD) {
-		// add EventDefinition
-    	portalEvtsDefs.put(eventDefinitionDD.getName().toString(), eventDefinitionDD);		
+	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/PortalCallbackServiceImpl.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/PortalCallbackServiceImpl.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortalCallbackServiceImpl.java Sun Aug  5 02:46:08 2007
@@ -23,6 +23,7 @@
 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;
@@ -97,8 +98,9 @@
     }
     
     public EventProvider getEventProvider(
-			HttpServletRequest request,HttpServletResponse response) {
-		return EventProviderImpl.getEventProviderImpl(request,response);
+			HttpServletRequest request,HttpServletResponse response,
+			PortletContainer container) {
+		return EventProviderImpl.getEventProviderImpl(request,response, container);
 	}
 
 

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?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- 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 Sun Aug  5 02:46:08 2007
@@ -64,16 +64,10 @@
 			HttpServletRequest req = new PortalServletRequest(eventProvider.getRequest(), this.portletWindow);
 			HttpServletResponse res = eventProvider.getResponse();
 			try {
-				synchronized (this) {
-					eventContainer.fireEvent(req, res, portletWindow, events.get(0));
-					//wait();
-					Thread.sleep(1);
-					events.remove(0);				
-				}
-			} catch (InterruptedException e){
-				System.out.println();
-				System.out.println("============interupted exception===============");
-				e.printStackTrace();
+//				synchronized (this) {
+					Event event = events.remove(0);
+					eventContainer.fireEvent(req, res, portletWindow, event);	
+//				}
 			} catch (PortletException e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();

Modified: portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java?view=diff&rev=562844&r1=562843&r2=562844
==============================================================================
--- portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java (original)
+++ portals/pluto/branches/1.1-286-COMPATIBILITY/pluto-portal-driver/src/main/java/org/apache/pluto/driver/PortalDriverServlet.java Sun Aug  5 02:46:08 2007
@@ -236,9 +236,9 @@
             		getServletContext(),window);
             PortletDD portletDD = win.getPortletEntity().getPortletDefinition();
             
-            registerEvents(window, portletDD, portletAppDD);
+//            registerEvents(window, portletDD, portletAppDD);
             
-            registerEventDefinitions(portletAppDD);
+//            registerEventDefinitions(portletAppDD);
             
             registerPublicRenderParams(window, portletDD,portletAppDD);
 		}
@@ -278,57 +278,57 @@
 	 * @param window The PortletWindow to store the event
 	 * @param portletDD The PortletDD, where the event is declared
 	 */
-	private void registerEvents(PortletWindow window, PortletDD portletDD, 
-			PortletAppDD portletAppDD) {
-		EventProvider eventProvider = container.getRequiredContainerServices()
-			.getPortalCallbackService().getEventProvider();
-		List<QName> events = portletDD.getProcessingEvents();
-		if (events != null) {
-			for (QName event : events) {
-				EventDefinitionDD eventDD = getEvent(event, portletAppDD);
-				if (eventDD != null) {
-
-					// register event only if it is declared as "processing-event"
-					List<QName> processingEvents = portletDD.getProcessingEvents();
-					for (QName name : processingEvents) {
-						if (name.toString().equals(eventDD.getName().toString())) {
-							eventProvider.registerEvent(event.toString(),window.getId().getStringId(), eventDD);
-							if (LOG.isDebugEnabled()){
-								LOG.debug(event+" registered successfully!");
-							}
-						}
-					}				
-				}
-			}
-		}
-	}
+//	private void registerEvents(PortletWindow window, PortletDD portletDD, 
+//			PortletAppDD portletAppDD) {
+//		EventProvider eventProvider = container.getRequiredContainerServices()
+//			.getPortalCallbackService().getEventProvider();
+//		List<QName> events = portletDD.getProcessingEvents();
+//		if (events != null) {
+//			for (QName event : events) {
+//				EventDefinitionDD eventDD = getEvent(event, portletAppDD);
+//				if (eventDD != null) {
+//
+//					// register event only if it is declared as "processing-event"
+//					List<QName> processingEvents = portletDD.getProcessingEvents();
+//					for (QName name : processingEvents) {
+//						if (name.toString().equals(eventDD.getName().toString())) {
+//							eventProvider.registerEvent(event.toString(),window.getId().getStringId(), eventDD);
+//							if (LOG.isDebugEnabled()){
+//								LOG.debug(event+" registered successfully!");
+//							}
+//						}
+//					}				
+//				}
+//			}
+//		}
+//	}
 	
 	/**
 	 * Register event definitions.
 	 * 
 	 * @param portletAppDD the portlet app DD
 	 */
-	private void registerEventDefinitions(PortletAppDD portletAppDD) {
-		EventProvider eventProvider = container.getRequiredContainerServices()
-		.getPortalCallbackService().getEventProvider();
-		List<EventDefinitionDD> defs = portletAppDD.getEvents();
-		if (defs != null){
-			for (EventDefinitionDD definitionDD : defs) {
-				eventProvider.registerEventDefinitionDD(definitionDD);
-			}
-		}
-	}
-
-    
-    private EventDefinitionDD getEvent(QName event, PortletAppDD portletAppDD) {
-		List<EventDefinitionDD> events = portletAppDD.getEvents();
-		for (EventDefinitionDD definitionDD : events) {
-			if (definitionDD.getName().equals(event))
-				return definitionDD;
-		}
-		// return null, if not found
-		return null;
-	}
+//	private void registerEventDefinitions(PortletAppDD portletAppDD) {
+//		EventProvider eventProvider = container.getRequiredContainerServices()
+//		.getPortalCallbackService().getEventProvider();
+//		List<EventDefinitionDD> defs = portletAppDD.getEvents();
+//		if (defs != null){
+//			for (EventDefinitionDD definitionDD : defs) {
+//				eventProvider.registerEventDefinitionDD(definitionDD);
+//			}
+//		}
+//	}
+//
+//    
+//    private EventDefinitionDD getEvent(QName event, PortletAppDD portletAppDD) {
+//		List<EventDefinitionDD> events = portletAppDD.getEvents();
+//		for (EventDefinitionDD definitionDD : events) {
+//			if (definitionDD.getName().equals(event))
+//				return definitionDD;
+//		}
+//		// return null, if not found
+//		return null;
+//	}
 
 	/**
      * Returns the portal driver configuration object.