You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/12/16 20:43:04 UTC
svn commit: r1050118 - in
/wicket/trunk/wicket/src/main/java/org/apache/wicket: Component.java
ComponentEventSender.java IEventDispatcher.java
settings/IFrameworkSettings.java settings/def/FrameworkSettings.java
Author: ivaynberg
Date: Thu Dec 16 19:43:04 2010
New Revision: 1050118
URL: http://svn.apache.org/viewvc?rev=1050118&view=rev
Log:
introduce ieventdispatcher so users can build their own event delivery mechanisms
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java (with props)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ComponentEventSender.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/IFrameworkSettings.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/def/FrameworkSettings.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=1050118&r1=1050117&r2=1050118&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Thu Dec 16 19:43:04 2010
@@ -4287,7 +4287,8 @@ public abstract class Component
/** {@inheritDoc} */
public final void send(IEventSink sink, Broadcast type, Object payload)
{
- new ComponentEventSender(this).send(sink, type, payload);
+ new ComponentEventSender(this, getApplication().getFrameworkSettings()).send(sink, type,
+ payload);
}
/**
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ComponentEventSender.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ComponentEventSender.java?rev=1050118&r1=1050117&r2=1050118&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ComponentEventSender.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ComponentEventSender.java Thu Dec 16 19:43:04 2010
@@ -33,16 +33,21 @@ import org.apache.wicket.util.visit.Visi
final class ComponentEventSender implements IEventSource
{
private final Component source;
+ private final IEventDispatcher dispatcher;
/**
* Constructor
*
* @param source
* component that originated the event
+ * @param dispatcher
*/
- public ComponentEventSender(Component source)
+ public ComponentEventSender(Component source, IEventDispatcher dispatcher)
{
+ Args.notNull(source, "source");
+ Args.notNull(dispatcher, "dispatcher");
this.source = source;
+ this.dispatcher = dispatcher;
}
/** {@inheritDoc} */
@@ -62,7 +67,7 @@ final class ComponentEventSender impleme
depth(event);
break;
case EXACT :
- event.getSink().onEvent(event);
+ dispatcher.dispatchEvent(event.getSink(), event);
break;
}
}
@@ -83,13 +88,13 @@ final class ComponentEventSender impleme
if (!targetsComponent && !targetsCycle)
{
- sink.onEvent(event);
+ dispatcher.dispatchEvent(sink, event);
return;
}
if (targetsApplication)
{
- source.getApplication().onEvent(event);
+ dispatcher.dispatchEvent(source.getApplication(), event);
}
if (event.isStop())
{
@@ -97,7 +102,7 @@ final class ComponentEventSender impleme
}
if (targetsSession)
{
- source.getSession().onEvent(event);
+ dispatcher.dispatchEvent(source.getSession(), event);
}
if (event.isStop())
{
@@ -105,7 +110,7 @@ final class ComponentEventSender impleme
}
if (targetsCycle)
{
- source.getRequestCycle().onEvent(event);
+ dispatcher.dispatchEvent(source.getRequestCycle(), event);
}
if (event.isStop())
{
@@ -114,7 +119,7 @@ final class ComponentEventSender impleme
Component cursor = (targetsCycle) ? cursor = source.getPage() : (Component)sink;
- cursor.onEvent(event);
+ dispatcher.dispatchEvent(cursor, event);
if (event.isStop())
{
@@ -125,7 +130,7 @@ final class ComponentEventSender impleme
if (cursor instanceof MarkupContainer)
{
- ((MarkupContainer)cursor).visitChildren(new ComponentEventVisitor(event));
+ ((MarkupContainer)cursor).visitChildren(new ComponentEventVisitor(event, dispatcher));
}
}
@@ -146,7 +151,7 @@ final class ComponentEventSender impleme
if (!targetsComponnet && !targetsCycle)
{
- sink.onEvent(event);
+ dispatcher.dispatchEvent(sink, event);
return;
}
@@ -154,7 +159,7 @@ final class ComponentEventSender impleme
if (cursor instanceof MarkupContainer)
{
- Visits.visitPostOrder(cursor, new ComponentEventVisitor(event));
+ Visits.visitPostOrder(cursor, new ComponentEventVisitor(event, dispatcher));
}
if (event.isStop())
{
@@ -162,7 +167,7 @@ final class ComponentEventSender impleme
}
if (targetsCycle)
{
- source.getRequestCycle().onEvent(event);
+ dispatcher.dispatchEvent(source.getRequestCycle(), event);
}
if (event.isStop())
{
@@ -170,7 +175,7 @@ final class ComponentEventSender impleme
}
if (targetsSession)
{
- source.getSession().onEvent(event);
+ dispatcher.dispatchEvent(source.getSession(), event);
}
if (event.isStop())
{
@@ -178,7 +183,7 @@ final class ComponentEventSender impleme
}
if (targetsApplication)
{
- source.getApplication().onEvent(event);
+ dispatcher.dispatchEvent(source.getApplication(), event);
}
}
@@ -199,19 +204,19 @@ final class ComponentEventSender impleme
if (!targetsApplication && !targetsComponent)
{
- sink.onEvent(event);
+ dispatcher.dispatchEvent(sink, event);
return;
}
if (targetsComponent)
{
Component cursor = (Component)sink;
- cursor.onEvent(event);
+ dispatcher.dispatchEvent(cursor, event);
if (event.isStop())
{
return;
}
- cursor.visitParents(Component.class, new ComponentEventVisitor(event));
+ cursor.visitParents(Component.class, new ComponentEventVisitor(event, dispatcher));
}
if (event.isStop())
@@ -220,7 +225,7 @@ final class ComponentEventSender impleme
}
if (targetsCycle)
{
- source.getRequestCycle().onEvent(event);
+ dispatcher.dispatchEvent(source.getRequestCycle(), event);
}
if (event.isStop())
{
@@ -228,7 +233,7 @@ final class ComponentEventSender impleme
}
if (targetsSession)
{
- source.getSession().onEvent(event);
+ dispatcher.dispatchEvent(source.getSession(), event);
}
if (event.isStop())
{
@@ -236,7 +241,7 @@ final class ComponentEventSender impleme
}
if (targetsApplication)
{
- source.getApplication().onEvent(event);
+ dispatcher.dispatchEvent(source.getApplication(), event);
}
}
@@ -248,6 +253,7 @@ final class ComponentEventSender impleme
private static class ComponentEventVisitor implements IVisitor<Component, Void>
{
private final ComponentEvent<?> e;
+ private final IEventDispatcher dispatcher;
/**
* Constructor
@@ -255,15 +261,16 @@ final class ComponentEventSender impleme
* @param event
* event to send
*/
- private ComponentEventVisitor(ComponentEvent<?> event)
+ private ComponentEventVisitor(ComponentEvent<?> event, IEventDispatcher dispatcher)
{
e = event;
+ this.dispatcher = dispatcher;
}
/** {@inheritDoc} */
public void component(Component object, IVisit<Void> visit)
{
- object.onEvent(e);
+ dispatcher.dispatchEvent(object, e);
if (e.isStop())
{
Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java?rev=1050118&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java Thu Dec 16 19:43:04 2010
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.event.IEventSink;
+import org.apache.wicket.settings.IFrameworkSettings;
+
+/**
+ * Delivers an event to a component. Developers can implement and register their dispatchers in
+ * {@link IFrameworkSettings} to create custom strategies for how events get delivered to components
+ *
+ * @author Igor Vaynberg (ivaynberg)
+ */
+public interface IEventDispatcher
+{
+ /**
+ * Dispatches the even to the target component
+ *
+ * @param sink
+ * @param event
+ */
+ void dispatchEvent(IEventSink sink, IEvent<?> event);
+}
Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/IEventDispatcher.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/IFrameworkSettings.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/IFrameworkSettings.java?rev=1050118&r1=1050117&r2=1050118&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/IFrameworkSettings.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/IFrameworkSettings.java Thu Dec 16 19:43:04 2010
@@ -17,13 +17,14 @@
package org.apache.wicket.settings;
import org.apache.wicket.IDetachListener;
+import org.apache.wicket.IEventDispatcher;
/**
* Framework settings for retrieving and configuring framework settings.
*
* @author Martijn Dashorst
*/
-public interface IFrameworkSettings
+public interface IFrameworkSettings extends IEventDispatcher
{
/**
* Gets the Wicket version. The Wicket version is in the same format as the version element in
@@ -52,4 +53,12 @@ public interface IFrameworkSettings
* listener or <code>null</code> to remove
*/
public void setDetachListener(IDetachListener listener);
+
+ /**
+ * Registers a new event dispatcher
+ *
+ * @param dispatcher
+ */
+ public void add(IEventDispatcher dispatcher);
+
}
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/def/FrameworkSettings.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/def/FrameworkSettings.java?rev=1050118&r1=1050117&r2=1050118&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/def/FrameworkSettings.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/settings/def/FrameworkSettings.java Thu Dec 16 19:43:04 2010
@@ -16,8 +16,15 @@
*/
package org.apache.wicket.settings.def;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.wicket.IDetachListener;
+import org.apache.wicket.IEventDispatcher;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.event.IEventSink;
import org.apache.wicket.settings.IFrameworkSettings;
+import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.string.Strings;
/**
@@ -33,6 +40,7 @@ import org.apache.wicket.util.string.Str
public class FrameworkSettings implements IFrameworkSettings
{
private IDetachListener detachListener;
+ private List<IEventDispatcher> eventDispatchers = null;
/**
* @see org.apache.wicket.settings.IFrameworkSettings#getVersion()
@@ -63,4 +71,36 @@ public class FrameworkSettings implement
{
this.detachListener = detachListener;
}
+
+ public void add(IEventDispatcher dispatcher)
+ {
+ Args.notNull(dispatcher, "dispatcher");
+ if (eventDispatchers == null)
+ {
+ eventDispatchers = new ArrayList<IEventDispatcher>();
+ }
+ if (!eventDispatchers.contains(dispatcher))
+ {
+ eventDispatchers.add(dispatcher);
+ }
+ }
+
+ /**
+ * Dispatches event to registered dispatchers
+ */
+ public void dispatchEvent(IEventSink sink, IEvent<?> event)
+ {
+ // direct delivery
+ sink.onEvent(event);
+
+ // additional dispatchers delivery
+ if (eventDispatchers == null)
+ {
+ return;
+ }
+ for (IEventDispatcher dispatcher : eventDispatchers)
+ {
+ dispatcher.dispatchEvent(sink, event);
+ }
+ }
}