You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by cd...@apache.org on 2007/09/20 13:24:43 UTC
svn commit: r577690 - in /portals/pluto/branches/1.1-286-trunk-merge:
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/servi...
Author: cdoremus
Date: Thu Sep 20 04:24:42 2007
New Revision: 577690
URL: http://svn.apache.org/viewvc?rev=577690&view=rev
Log:
Applied eventing.provided_jaxb_proposal.090907_r23.patch from PLUTO-267.
Modified:
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java
Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/ActionResponseImpl.java Thu Sep 20 04:24:42 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-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/EventRequestImpl.java Thu Sep 20 04:24:42 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-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java Thu Sep 20 04:24:42 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-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/EventProvider.java Thu Sep 20 04:24:42 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-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java Thu Sep 20 04:24:42 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-trunk-merge/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-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java?rev=577690&r1=577689&r2=577690&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java Thu Sep 20 04:24:42 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();
}
}