001 /*
002 * Copyright 2009-2012 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package griffon.core;
017
018 import griffon.util.RunnableWithArgs;
019 import groovy.lang.Closure;
020
021 import java.util.List;
022
023 /**
024 * Base contract for classes that can publish events using their own
025 * event bus.
026 *
027 * @author Andres Almiray
028 * @since 0.9.3
029 */
030 public interface EventPublisher {
031 /**
032 * Adds an event listener.<p>
033 * Accepted types are: Script, Map and Object.
034 *
035 * @param listener an event listener
036 */
037 void addEventListener(Object listener);
038
039 /**
040 * Adds a closure as an event listener.<p>
041 *
042 * @param eventName the name of the event
043 * @param listener an event listener
044 */
045 void addEventListener(String eventName, Closure listener);
046
047 /**
048 * Adds a runnable as an event listener.<p>
049 *
050 * @param eventName the name of the event
051 * @param listener an event listener
052 */
053 void addEventListener(String eventName, RunnableWithArgs listener);
054
055 /**
056 * Removes an event listener.<p>
057 * Accepted types are: Script, Map and Object.
058 *
059 * @param listener an event listener
060 */
061 void removeEventListener(Object listener);
062
063 /**
064 * Removes a closure as an event listener.<p>
065 *
066 * @param eventName the name of the event
067 * @param listener an event listener
068 */
069 void removeEventListener(String eventName, Closure listener);
070
071 /**
072 * Removes a runnable as an event listener.<p>
073 *
074 * @param eventName the name of the event
075 * @param listener an event listener
076 */
077 void removeEventListener(String eventName, RunnableWithArgs listener);
078
079 /**
080 * Publishes an event.<p>
081 * Listeners will be notified in the same thread as the publisher.
082 *
083 * @param eventName the name of the event
084 */
085 void publishEvent(String eventName);
086
087 /**
088 * Publishes an event.<p>
089 * Listeners will be notified in the same thread as the publisher.
090 *
091 * @param eventName the name of the event
092 * @param args event arguments sent to listeners
093 */
094 void publishEvent(String eventName, List args);
095
096 /**
097 * Publishes an event.<p>
098 * Listeners will be notified outside of the UI thread.
099 *
100 * @param eventName the name of the event
101 * @deprecated use #publishEventOutsideUI() instead
102 */
103 @Deprecated
104 void publishEventOutside(String eventName);
105
106 /**
107 * Publishes an event.<p>
108 * Listeners will be notified outside of the UI thread.
109 *
110 * @param eventName the name of the event
111 * @param args event arguments sent to listeners
112 * @deprecated use #publishEventOutsideUI() instead
113 */
114 @Deprecated
115 void publishEventOutside(String eventName, List args);
116
117 /**
118 * Publishes an event.<p>
119 * Listeners will be notified outside of the UI thread.
120 *
121 * @param eventName the name of the event
122 */
123 void publishEventOutsideUI(String eventName);
124
125 /**
126 * Publishes an event.<p>
127 * Listeners will be notified outside of the UI thread.
128 *
129 * @param eventName the name of the event
130 * @param args event arguments sent to listeners
131 */
132 void publishEventOutsideUI(String eventName, List args);
133
134 /**
135 * Publishes an event.<p>
136 * Listeners will be notified in a different thread.
137 *
138 * @param eventName the name of the event
139 */
140 void publishEventAsync(String eventName);
141
142 /**
143 * Publishes an event.<p>
144 * Listeners will be notified in a different thread.
145 *
146 * @param eventName the name of the event
147 * @param args event arguments sent to listeners
148 */
149 void publishEventAsync(String eventName, List args);
150
151 /**
152 * Returns whether events will be published by the event bus or not.
153 *
154 * @return true if event publishing is enabled; false otherwise.
155 */
156 boolean isEventPublishingEnabled();
157
158 /**
159 * Sets the enabled state for event publishing.</p>
160 * Events will be automatically discarded when the enabled state is set to false.
161 *
162 * @param enabled the value fot the enabled state.
163 */
164 void setEventPublishingEnabled(boolean enabled);
165 }
|