1 package org.apache.maven.wagon.events;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 /**
26 * The class allows registration and deregistration of session listeners
27 *
28 * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
29 *
30 */
31 public final class SessionEventSupport
32 {
33 /**
34 * registered listeners
35 */
36 private final List<SessionListener> listeners = new ArrayList<SessionListener>();
37
38 /**
39 * Adds the listener to the collection of listeners
40 * who will be notified when any session event occurs
41 * in this <code>Wagon</code> object.
42 * <br/>
43 * If listener is <code>null</code>, no exception is thrown and no action is performed
44 *
45 * @param listener the transfer listener
46 * @see #removeSessionListener(SessionListener)
47 * @see TransferListener
48 */
49 public void addSessionListener( final SessionListener listener )
50 {
51 if ( listener != null )
52 {
53 listeners.add( listener );
54 }
55 }
56
57 /**
58 * Removes the session listener from the collection of listeners so
59 * it no longer receives session events.
60 * <br/>
61 * If listener is <code>null</code> or specified listener was not added
62 * to this <code>SessionEventSupport</code> object
63 * no exception is thrown and no action is performed
64 *
65 * @param listener the session listener
66 * @see #addSessionListener(org.apache.maven.wagon.events.SessionListener)
67 */
68 public void removeSessionListener( final SessionListener listener )
69 {
70 listeners.remove( listener );
71 }
72
73 /**
74 * Returns whether the specified instance of session
75 * listener was added to the collection of listeners
76 * who will be notified when an session event occurs
77 *
78 * @param listener the session listener
79 * @return <code>true<code>
80 * if given listener was added to the collection of listeners
81 * <code>false</code> otherwise
82 * @see org.apache.maven.wagon.events.SessionListener
83 * @see #addSessionListener(org.apache.maven.wagon.events.SessionListener)
84 */
85 public boolean hasSessionListener( final SessionListener listener )
86 {
87 return listeners.contains( listener );
88 }
89
90 /**
91 * Dispatches the given <code>SessionEvent</code>
92 * to all registered listeners (calls method {@link SessionListener#sessionDisconnected(SessionEvent)} on all of
93 * them}. The Event should be of type {@link SessionEvent#SESSION_DISCONNECTED}
94 *
95 * @param sessionEvent the SessionEvent which will be dispatched to listeners
96 */
97 public void fireSessionDisconnected( final SessionEvent sessionEvent )
98 {
99 for ( SessionListener listener : listeners )
100 {
101 listener.sessionDisconnected( sessionEvent );
102 }
103 }
104
105 /**
106 * Dispatches the given <code>SessionEvent</code>
107 * to all registered listeners (calls method {@link SessionListener#sessionDisconnecting(SessionEvent)} } on all of
108 * them}. The Event should be of type {@link SessionEvent#SESSION_DISCONNECTING}
109 *
110 * @param sessionEvent the SessionEvent which will be dispatched to listeners
111 */
112 public void fireSessionDisconnecting( final SessionEvent sessionEvent )
113 {
114 for ( SessionListener listener : listeners )
115 {
116 listener.sessionDisconnecting( sessionEvent );
117 }
118 }
119
120 /**
121 * Dispatches the given <code>SessionEvent</code>
122 * to all registered listeners (calls method {@link SessionListener#sessionLoggedIn(SessionEvent)} on all of them}.
123 * The Event should be of type {@link SessionEvent#SESSION_LOGGED_IN}
124 *
125 * @param sessionEvent the SessionEvent which will be dispatched to listeners
126 */
127 public void fireSessionLoggedIn( final SessionEvent sessionEvent )
128 {
129 for ( SessionListener listener : listeners )
130 {
131 listener.sessionLoggedIn( sessionEvent );
132 }
133 }
134
135 /**
136 * Dispatches the given <code>SessionEvent</code>
137 * to all registered listeners (calls method {@link SessionListener#sessionLoggedOff(SessionEvent)} on all of
138 * them}. The Event should be of type {@link SessionEvent#SESSION_LOGGED_OFF}
139 *
140 * @param sessionEvent the SessionEvent which will be dispatched to listeners
141 */
142 public void fireSessionLoggedOff( final SessionEvent sessionEvent )
143 {
144 for ( SessionListener listener : listeners )
145 {
146 listener.sessionLoggedOff( sessionEvent );
147 }
148 }
149
150 /**
151 * Dispatches the given <code>SessionEvent</code>
152 * to all registered listeners (calls method {@link SessionListener#sessionOpened(SessionEvent)} on all of them}.
153 * The Event should be of type {@link SessionEvent#SESSION_OPENED}
154 *
155 * @param sessionEvent the SessionEvent which will be dispatched to listeners
156 */
157 public void fireSessionOpened( final SessionEvent sessionEvent )
158 {
159 for ( SessionListener listener : listeners )
160 {
161 listener.sessionOpened( sessionEvent );
162 }
163 }
164
165 /**
166 * Dispatches the given <code>SessionEvent</code>
167 * to all registered listeners (calls method {@link SessionListener#sessionOpening(SessionEvent)} on all of them}.
168 * The Event should be of type {@link SessionEvent#SESSION_OPENING}
169 *
170 * @param sessionEvent the SessionEvent which will be dispatched to listeners
171 */
172 public void fireSessionOpening( final SessionEvent sessionEvent )
173 {
174 for ( SessionListener listener : listeners )
175 {
176 listener.sessionOpening( sessionEvent );
177 }
178 }
179
180 /**
181 * Dispatches the given <code>SessionEvent</code>
182 * to all registered listeners (calls method {@link SessionListener#sessionConnectionRefused(SessionEvent)} on all
183 * of them}. The Event should be of type {@link SessionEvent#SESSION_CONNECTION_REFUSED}
184 *
185 * @param sessionEvent the SessionEvent which will be dispatched to listeners
186 */
187 public void fireSessionConnectionRefused( final SessionEvent sessionEvent )
188 {
189 for ( SessionListener listener : listeners )
190 {
191 listener.sessionConnectionRefused( sessionEvent );
192 }
193 }
194
195 /**
196 * Dispatches the given debug message
197 * to all registered listeners (calls method {@link SessionListener#debug(String)} on all of them}.
198 *
199 * @param message the debug message which will be dispatched to listeners
200 */
201 public void fireDebug( final String message )
202 {
203 for ( SessionListener listener : listeners )
204 {
205 listener.debug( message );
206 }
207 }
208
209 /**
210 * Dispatches the given <code>SessionEvent</code>
211 * to all registered listeners (calls method {@link SessionListener#sessionConnectionRefused(SessionEvent)} on all
212 * of them}. The Event should be of type {@link SessionEvent#SESSION_ERROR_OCCURRED} and it is expected that
213 * {@link SessionEvent#getException()} method will return not null value
214 *
215 * @param sessionEvent the SessionEvent which will be dispatched to listeners
216 */
217 public void fireSessionError( final SessionEvent sessionEvent )
218 {
219 for ( SessionListener listener : listeners )
220 {
221 listener.sessionError( sessionEvent );
222 }
223 }
224 }