001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.wicket;
018
019import org.apache.wicket.behavior.Behavior;
020import org.apache.wicket.event.IEvent;
021import org.apache.wicket.event.IEventSink;
022
023/**
024 * Delivers an event to a component. Developers can implement and register their dispatchers in
025 * {@link org.apache.wicket.settings.FrameworkSettings} to create custom strategies for
026 * how events get delivered to components
027 * 
028 * @see IEventSink
029 * @see IComponentAwareEventSink
030 * 
031 * @author Igor Vaynberg (ivaynberg)
032 */
033@FunctionalInterface
034public interface IEventDispatcher
035{
036        /**
037         * Dispatches the even to the target component
038         * 
039         * @param sink
040         *            the sink for the event. Sinks usually implement {@link IEventSink} or
041         *            {@link IComponentAwareEventSink}. See the {@code component} parameter described
042         *            below.
043         * @param event
044         * @param component
045         *            provides context to the sink. Some sinks are owned by the component, eg
046         *            {@link Behavior}s, and thus it is useful for them to have a reference to their
047         *            owning component. If this method is not {@code null} the dispatcher should try to
048         *            look for an alternative sink method which takes a component reference as an
049         *            additional parameter, one such implementation is {@link IComponentAwareEventSink}.
050         */
051        void dispatchEvent(Object sink, IEvent<?> event, Component component);
052}