You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/02/19 08:55:29 UTC

[8/19] git commit: WICKET-4945: event filters now have access to the atmosphere resource

WICKET-4945: event filters now have access to the atmosphere resource


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/acb15647
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/acb15647
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/acb15647

Branch: refs/heads/reference-guide
Commit: acb1564786768baddd9a211ea515b384275d4736
Parents: 8a6709c
Author: Emond Papegaaij <em...@topicus.nl>
Authored: Mon Feb 11 08:57:53 2013 +0100
Committer: Emond Papegaaij <em...@topicus.nl>
Committed: Mon Feb 11 09:08:10 2013 +0100

----------------------------------------------------------------------
 .../wicket/examples/atmosphere/ReceiverFilter.java |    9 ++-
 .../apache/wicket/atmosphere/AtmosphereEvent.java  |   54 +++++++++++++++
 .../atmosphere/AtmosphereRequestHandler.java       |    6 +-
 .../wicket/atmosphere/AtmosphereWebRequest.java    |    6 +-
 .../org/apache/wicket/atmosphere/EventBus.java     |    5 +-
 .../org/apache/wicket/atmosphere/EventFilter.java  |    4 +-
 .../wicket/atmosphere/EventSubscription.java       |   28 ++++++--
 .../wicket/atmosphere/NoFilterPredicate.java       |    4 +-
 .../org/apache/wicket/atmosphere/Subscribe.java    |    4 +-
 .../atmosphere/config/AtmosphereLogLevel.java      |    6 ++
 .../wicket/atmosphere/config/AtmosphereMethod.java |    6 ++
 .../atmosphere/config/AtmosphereTransport.java     |    6 ++
 12 files changed, 112 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/ReceiverFilter.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/ReceiverFilter.java b/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/ReceiverFilter.java
index b5be228..503dccb 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/ReceiverFilter.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/ReceiverFilter.java
@@ -17,21 +17,22 @@
 package org.apache.wicket.examples.atmosphere;
 
 import org.apache.wicket.Session;
+import org.apache.wicket.atmosphere.AtmosphereEvent;
 
 import com.google.common.base.Predicate;
 
-public class ReceiverFilter implements Predicate<Object>
+public class ReceiverFilter implements Predicate<AtmosphereEvent>
 {
 	public ReceiverFilter()
 	{
 	}
 
 	@Override
-	public boolean apply(Object input)
+	public boolean apply(AtmosphereEvent input)
 	{
-		if (input instanceof ChatMessage)
+		if (input.getPayload() instanceof ChatMessage)
 		{
-			ChatMessage msg = (ChatMessage)input;
+			ChatMessage msg = (ChatMessage)input.getPayload();
 			return msg.getReceiver() == null || msg.getReceiver().isEmpty() ||
 				msg.getReceiver().equals(Session.get().getId());
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEvent.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEvent.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEvent.java
new file mode 100644
index 0000000..7b06d0c
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereEvent.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.atmosphere;
+
+import org.atmosphere.cpr.AtmosphereResource;
+
+/**
+ * The event fired by {@link EventBus}, containing the payload and the {@code AtmosphereResource} it
+ * is targeted at.
+ * 
+ * @author papegaaij
+ */
+public class AtmosphereEvent
+{
+	private final Object payload;
+
+	private final AtmosphereResource resource;
+
+	AtmosphereEvent(Object payload, AtmosphereResource resource)
+	{
+		this.payload = payload;
+		this.resource = resource;
+	}
+
+	/**
+	 * @return The payload of the event, as posted on the {@link EventBus}.
+	 */
+	public Object getPayload()
+	{
+		return payload;
+	}
+
+	/**
+	 * @return The resource this event is targeted at.
+	 */
+	public AtmosphereResource getResource()
+	{
+		return resource;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
index 4df5c02..bef863a 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
@@ -40,7 +40,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
 {
 	private PageKey pageKey;
 
-	private Object event;
+	private AtmosphereEvent event;
 
 	private Collection<EventSubscription> subscriptions;
 
@@ -54,7 +54,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
 	 * @param event
 	 */
 	public AtmosphereRequestHandler(PageKey pageKey, Collection<EventSubscription> subscriptions,
-		Object event)
+		AtmosphereEvent event)
 	{
 		this.pageKey = pageKey;
 		this.subscriptions = subscriptions;
@@ -100,7 +100,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
 						RequestCycle.get().scheduleRequestHandlerAfterCurrent(target);
 					}
 					curMethod.setAccessible(true);
-					curMethod.invoke(base, target, event);
+					curMethod.invoke(base, target, event.getPayload());
 				}
 				catch (IllegalAccessException e)
 				{

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
index 9fbfa31..2fe006e 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
@@ -42,10 +42,10 @@ class AtmosphereWebRequest extends WebRequest
 
 	private Collection<EventSubscription> subscriptions;
 
-	private Object event;
+	private AtmosphereEvent event;
 
 	AtmosphereWebRequest(WebRequest wrappedRequest, PageKey pageKey,
-		Collection<EventSubscription> subscriptions, Object event)
+		Collection<EventSubscription> subscriptions, AtmosphereEvent event)
 	{
 		this.wrappedRequest = wrappedRequest;
 		this.pageKey = pageKey;
@@ -63,7 +63,7 @@ class AtmosphereWebRequest extends WebRequest
 		return subscriptions;
 	}
 
-	public Object getEvent()
+	public AtmosphereEvent getEvent()
 	{
 		return event;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index fe522ca..a312f99 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -278,8 +278,9 @@ public class EventBus implements UnboundListener
 		}
 	}
 
-	private void postToSingleResource(Object event, AtmosphereResource resource)
+	private void postToSingleResource(Object payload, AtmosphereResource resource)
 	{
+		AtmosphereEvent event = new AtmosphereEvent(payload, resource);
 		ThreadContext.detach();
 		ThreadContext.setApplication(application);
 		PageKey key;
@@ -297,7 +298,7 @@ public class EventBus implements UnboundListener
 	}
 
 	private void post(AtmosphereResource resource, PageKey pageKey,
-		Collection<EventSubscription> subscriptionsForPage, Object event)
+		Collection<EventSubscription> subscriptionsForPage, AtmosphereEvent event)
 	{
 		String filterPath = WebApplication.get()
 			.getWicketFilter()

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
index 65e13bd..76f6085 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventFilter.java
@@ -28,14 +28,14 @@ import com.google.common.base.Predicate;
  */
 public class EventFilter implements Predicate<EventSubscription>
 {
-	private Object event;
+	private AtmosphereEvent event;
 
 	/**
 	 * Construct.
 	 * 
 	 * @param event
 	 */
-	public EventFilter(Object event)
+	public EventFilter(AtmosphereEvent event)
 	{
 		this.event = event;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
index dd3d22d..b305867 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
@@ -40,9 +40,9 @@ public class EventSubscription
 
 	private String methodName;
 
-	private Predicate<Object> filter;
+	private Predicate<AtmosphereEvent> filter;
 
-	private Predicate<Object> contextAwareFilter;
+	private Predicate<AtmosphereEvent> contextAwareFilter;
 
 	/**
 	 * Construct.
@@ -57,17 +57,29 @@ public class EventSubscription
 		behaviorIndex = behavior == null ? null : component.getBehaviorId(behavior);
 		Class<?> eventType = method.getParameterTypes()[1];
 		Subscribe subscribe = method.getAnnotation(Subscribe.class);
-		filter = Predicates.and(Predicates.instanceOf(eventType), createFilter(subscribe.filter()));
+		filter = Predicates.and(payloadOfType(eventType), createFilter(subscribe.filter()));
 		contextAwareFilter = createFilter(subscribe.contextAwareFilter());
 		methodName = method.getName();
 	}
 
-	@SuppressWarnings("unchecked")
-	private static Predicate<Object> createFilter(Class<? extends Predicate<?>> filterClass)
+	private static Predicate<AtmosphereEvent> payloadOfType(final Class<?> type)
+	{
+		return new Predicate<AtmosphereEvent>()
+		{
+			@Override
+			public boolean apply(AtmosphereEvent input)
+			{
+				return type.isInstance(input.getPayload());
+			}
+		};
+	}
+
+	private static Predicate<AtmosphereEvent> createFilter(
+		Class<? extends Predicate<AtmosphereEvent>> filterClass)
 	{
 		try
 		{
-			return (Predicate<Object>)filterClass.newInstance();
+			return filterClass.newInstance();
 		}
 		catch (InstantiationException e)
 		{
@@ -100,7 +112,7 @@ public class EventSubscription
 	 * @return The filter on incomming events, a combination of the type and the
 	 *         {@link Subscribe#filter()} parameter.
 	 */
-	public Predicate<Object> getFilter()
+	public Predicate<AtmosphereEvent> getFilter()
 	{
 		return filter;
 	}
@@ -109,7 +121,7 @@ public class EventSubscription
 	 * @return The context ware filter on incomming events, constructed from the
 	 *         {@link Subscribe#contextAwareFilter()} parameter.
 	 */
-	public Predicate<Object> getContextAwareFilter()
+	public Predicate<AtmosphereEvent> getContextAwareFilter()
 	{
 		return contextAwareFilter;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
index d5a5cab..ec17fd0 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/NoFilterPredicate.java
@@ -25,10 +25,10 @@ import com.google.common.base.Predicate;
  * 
  * @author papegaaij
  */
-public class NoFilterPredicate implements Predicate<Object>
+public class NoFilterPredicate implements Predicate<AtmosphereEvent>
 {
 	@Override
-	public boolean apply(@Nullable Object input)
+	public boolean apply(@Nullable AtmosphereEvent input)
 	{
 		return true;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
index f90eeef..5bf9f61 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/Subscribe.java
@@ -53,7 +53,7 @@ public @interface Subscribe {
 	 * 
 	 * @return The filter on events, defaults to no filter.
 	 */
-	Class<? extends Predicate<?>> filter() default NoFilterPredicate.class;
+	Class<? extends Predicate<AtmosphereEvent>> filter() default NoFilterPredicate.class;
 
 	/**
 	 * An optional filter on events to be received by the method. This filter has access to the
@@ -63,5 +63,5 @@ public @interface Subscribe {
 	 * 
 	 * @return The filter on events, defaults to no filter.
 	 */
-	Class<? extends Predicate<?>> contextAwareFilter() default NoFilterPredicate.class;
+	Class<? extends Predicate<AtmosphereEvent>> contextAwareFilter() default NoFilterPredicate.class;
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
index 31c500b..57938d7 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
@@ -16,6 +16,12 @@
  */
 package org.apache.wicket.atmosphere.config;
 
+/**
+ * The log levels used by Atmosphere JS.
+ * 
+ * @author papegaaij
+ */
+@SuppressWarnings("javadoc")
 public enum AtmosphereLogLevel {
 	DEBUG("debug"), INFO("info"), ERROR("error");
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
index 9258917..5e7d1b6 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
@@ -16,6 +16,12 @@
  */
 package org.apache.wicket.atmosphere.config;
 
+/**
+ * The HTTP method to be used by Atmosphere to setup the connection
+ * 
+ * @author papegaaij
+ */
+@SuppressWarnings("javadoc")
 public enum AtmosphereMethod {
 	GET, PUT, POST, DELETE;
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/acb15647/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
index f908e20..73d538b 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
@@ -16,6 +16,12 @@
  */
 package org.apache.wicket.atmosphere.config;
 
+/**
+ * The transport to be used by Atmosphere to setup the persistent connection.
+ * 
+ * @author papegaaij
+ */
+@SuppressWarnings("javadoc")
 public enum AtmosphereTransport {
 	POLLING("polling"), LONG_POLLING("long-polling"), STREAMING("streaming"), JSONP("jsonp"), SSE(
 		"sse"), WEBSOCKET("websocket");