Author: julien(a)jboss.com
Date: 2008-01-31 06:14:00 -0500 (Thu, 31 Jan 2008)
New Revision: 9681
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/Event.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContextImpl.java
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContextImpl.java
Log:
- introduced event controller context
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java 2008-01-31
10:32:11 UTC (rev 9680)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -34,6 +34,9 @@
import org.jboss.portal.portlet.Portlet;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.PortletContext;
+import org.jboss.portal.portlet.test.event.EventControllerContext;
+import org.jboss.portal.portlet.test.event.Event;
import org.jboss.portal.portlet.cache.CacheLevel;
import org.jboss.portal.portlet.impl.spi.AbstractClientContext;
import org.jboss.portal.portlet.impl.spi.AbstractPortalContext;
@@ -44,7 +47,6 @@
import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
import org.jboss.portal.portlet.info.NavigationInfo;
import org.jboss.portal.portlet.info.ParameterInfo;
-import org.jboss.portal.portlet.info.PortletInfo;
import org.jboss.portal.portlet.invocation.ActionInvocation;
import org.jboss.portal.portlet.invocation.EventInvocation;
import org.jboss.portal.portlet.invocation.RenderInvocation;
@@ -74,9 +76,9 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.LinkedList;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -133,6 +135,9 @@
PortletControllerContext context = portletRequest.controllerContext;
//
+ PortletContext portletContext =
portletRequest.controllerContext.getPortlet(portletRequest.portletId).getContext();
+
+ //
PortletInvocationResponse response = invoke(portletRequest);
//
@@ -172,61 +177,58 @@
}
}
+ //
+ EventControllerContext eventCC = context.getEventControllerContext();
StateResponse stateResponse = (StateResponse)response;
+
// Create event list and feed it with the events that may have been produced
- LinkedList<StateResponse.Event> queue = new
LinkedList<StateResponse.Event>();
- queue.addAll(stateResponse.getEvents());
+ LinkedList<Event> eventQueue = new LinkedList<Event>();
+ for (StateResponse.Event portletEvent : stateResponse.getEvents())
+ {
+ Event producedEvent = new Event(portletEvent.getName(),
portletEvent.getPayload(), portletContext);
+ List<Event> consumedEvents = eventCC.getConsumedEvents(producedEvent);
+ eventQueue.addAll(consumedEvents);
+ }
// Deliver events
- while (queue.size() > 0)
+ while (eventQueue.size() > 0)
{
- StateResponse.Event event = queue.removeFirst();
+ Event event = eventQueue.removeFirst();
//
- List<Portlet> consumers = new ArrayList<Portlet>();
- for (Portlet portlet : context.getPortlets())
- {
- PortletInfo portletInfo = portlet.getInfo();
+ PortletInvocationResponse eventResponse = deliverEvent(context, event,
portletRequest.pageState, requestProperties.getCookies());
- if
(portletInfo.getEventing().getConsumedEvents().containsKey(event.getName()))
- {
- consumers.add(portlet);
- }
- }
-
//
- for (Portlet consumer : consumers)
+ if (eventResponse instanceof UpdateNavigationalStateResponse)
{
- PortletInvocationResponse eventResponse =
- deliverEvent(context, consumer, event, portletRequest.pageState,
requestProperties.getCookies());
+ UpdateNavigationalStateResponse update =
(UpdateNavigationalStateResponse)eventResponse;
- //
- if (eventResponse instanceof UpdateNavigationalStateResponse)
- {
- UpdateNavigationalStateResponse update =
(UpdateNavigationalStateResponse)eventResponse;
+ // Update ns
+ updateNavigationalState(context, event.getPortletContext().getId(),
update, portletRequest.pageState);
- // Update ns
- updateNavigationalState(context, consumer.getContext().getId(), update,
portletRequest.pageState);
-
- // Add events if any
- queue.addAll(update.getEvents());
-
- //
- ResponseProperties updateProperties = update.getProperties();
- if (updateProperties != null)
- {
- requestProperties.append(updateProperties);
- }
- }
- else if (eventResponse instanceof ErrorResponse)
+ // Add events if any
+ for (StateResponse.Event portletEvent : update.getEvents())
{
- // Do something here !!!!
+ Event producedEvent = new Event(portletEvent.getName(),
portletEvent.getPayload(), portletContext);
+ List<Event> consumedEvents =
eventCC.getConsumedEvents(producedEvent);
+ eventQueue.addAll(consumedEvents);
}
- else
+
+ //
+ ResponseProperties updateProperties = update.getProperties();
+ if (updateProperties != null)
{
- // Do something here !!!!
+ requestProperties.append(updateProperties);
}
}
+ else if (eventResponse instanceof ErrorResponse)
+ {
+ // Do something here !!!!
+ }
+ else
+ {
+ // Do something here !!!!
+ }
}
if (response instanceof HTTPRedirectionResponse)
@@ -517,11 +519,11 @@
private PortletInvocationResponse deliverEvent(
PortletControllerContext context,
- Portlet portlet,
- StateResponse.Event event,
+ Event event,
PageNavigationalState pageNS,
- List<Cookie> requestCookies)
+ List<Cookie> requestCookies) throws PortletInvokerException
{
+ Portlet portlet = context.getPortlet(event.getPortletContext().getId());
HttpServletRequest req = context.getClientRequest();
HttpServletResponse resp = context.getClientResponse();
WindowNavigationalState windowNS =
pageNS.getWindowNavigationalState(portlet.getContext().getId());
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContext.java 2008-01-31
10:32:11 UTC (rev 9680)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContext.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -24,6 +24,7 @@
import org.jboss.portal.portlet.Portlet;
import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.test.event.EventControllerContext;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.PortletInvocation;
@@ -51,4 +52,6 @@
Collection<Portlet> getPortlets() throws PortletInvokerException;
+ EventControllerContext getEventControllerContext();
+
}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContextImpl.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContextImpl.java 2008-01-31
10:32:11 UTC (rev 9680)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletControllerContextImpl.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -40,6 +40,8 @@
import org.jboss.portal.web.IllegalRequestException;
import org.jboss.portal.web.WebRequest;
import static org.jboss.portal.portlet.test.URLParameterConstants.*;
+import org.jboss.portal.portlet.test.event.EventControllerContext;
+import org.jboss.portal.portlet.test.event.EventControllerContextImpl;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
@@ -76,6 +78,9 @@
/** . */
private final PortletInvoker invoker;
+ /** . */
+ private final EventControllerContext eventControllerContext;
+
public PortletControllerContextImpl(
HttpServletRequest req,
HttpServletResponse resp,
@@ -230,6 +235,7 @@
this.resp = resp;
this.servletContext = servletContext;
this.invoker = invoker;
+ this.eventControllerContext = new EventControllerContextImpl(invoker);
}
public PortletController.ControllerRequest getRequest()
@@ -266,4 +272,9 @@
{
return invoker.getPortlets();
}
+
+ public EventControllerContext getEventControllerContext()
+ {
+ return eventControllerContext;
+ }
}
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/Event.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/Event.java
(rev 0)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/Event.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -0,0 +1,77 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.test.event;
+
+import org.jboss.portal.portlet.PortletContext;
+
+import javax.xml.namespace.QName;
+import java.io.Serializable;
+
+/**
+ * An event associated with a portlet.
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class Event
+{
+
+ /** . */
+ private final QName name;
+
+ /** . */
+ private final Serializable payload;
+
+ /** . */
+ private final PortletContext portletContext;
+
+ public Event(QName name, Serializable payload, PortletContext portletContext)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ if (portletContext == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ this.name = name;
+ this.payload = payload;
+ this.portletContext = portletContext;
+ }
+
+ public QName getName()
+ {
+ return name;
+ }
+
+ public Serializable getPayload()
+ {
+ return payload;
+ }
+
+ public PortletContext getPortletContext()
+ {
+ return portletContext;
+ }
+}
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContext.java
(rev 0)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContext.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -0,0 +1,42 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.test.event;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public interface EventControllerContext
+{
+
+ /**
+ * Obtain a list of consumed event for a produced event.
+ *
+ * @param producedEvent the produced event
+ * @return the list of event to be consumed
+ */
+ List<Event> getConsumedEvents(Event producedEvent);
+
+}
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContextImpl.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContextImpl.java
(rev 0)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/event/EventControllerContextImpl.java 2008-01-31
11:14:00 UTC (rev 9681)
@@ -0,0 +1,73 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.test.event;
+
+import org.jboss.portal.portlet.PortletInvoker;
+import org.jboss.portal.portlet.Portlet;
+import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.info.PortletInfo;
+
+import java.util.List;
+import java.util.Collections;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class EventControllerContextImpl implements EventControllerContext
+{
+
+ /** . */
+ private PortletInvoker invoker;
+
+ public EventControllerContextImpl(PortletInvoker invoker)
+ {
+ this.invoker = invoker;
+ }
+
+ public List<Event> getConsumedEvents(Event producedEvent)
+ {
+ try
+ {
+ ArrayList<Event> consumedEvents = new ArrayList<Event>();
+ for (Portlet portlet : invoker.getPortlets())
+ {
+ PortletInfo portletInfo = portlet.getInfo();
+ if
(portletInfo.getEventing().getConsumedEvents().containsKey(producedEvent.getName()))
+ {
+ Event consumedEvent = new Event(producedEvent.getName(),
producedEvent.getPayload(), portlet.getContext());
+ consumedEvents.add(consumedEvent);
+ }
+ }
+ return consumedEvents;
+ }
+ catch (PortletInvokerException e)
+ {
+ System.out.println("e = " + e);
+
+ //
+ return Collections.emptyList();
+ }
+ }
+}