You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/02/11 09:08:32 UTC
git commit: WICKET-4945: event filters now have access to the
atmosphere resource
Updated Branches:
refs/heads/master 8a6709c2c -> acb156478
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/master
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");