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.Iterator;
24 import java.util.List;
25
26 /**
27 * The class allows registration and removal of event listeners of type
28 * TransferListener and dispatch of those events to those listeners
29 *
30 * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
31 * @version $Id: TransferEventSupport.java 682051 2008-08-02 21:29:38Z hboutemy $
32 */
33 public final class TransferEventSupport
34 {
35
36 /**
37 * registered listeners
38 */
39 private final List listeners = new ArrayList();
40
41 /**
42 * Adds the listener to the collection of listeners
43 * who will be notified when any transfer event occurs
44 * in this <code>Wagon</code> object.
45 * <br/>
46 * If listener is <code>null</code>, no exception is thrown and no action is performed
47 *
48 * @param listener the transfer listener
49 * @see #removeTransferListener(org.apache.maven.wagon.events.TransferListener)
50 * @see TransferListener
51 */
52 public synchronized void addTransferListener( final TransferListener listener )
53 {
54 if ( listener != null )
55 {
56 listeners.add( listener );
57 }
58 }
59
60 /**
61 * Removes the transfer listener from the collection of listeners so
62 * it no longer receives transfer events.
63 * <br/>
64 * If listener is <code>null</code> or specified listener was not added
65 * to this <code>TransferEventSupport</code> object
66 * no exception is thrown and no action is performed
67 *
68 * @param listener the transfer listener
69 * @see #addTransferListener(TransferListener)
70 */
71 public synchronized void removeTransferListener( final TransferListener listener )
72 {
73 listeners.remove( listener );
74 }
75
76 /**
77 * Returns whether the specified instance of transfer
78 * listener was added to the collection of listeners
79 * who will be notified when an transfer event occurs
80 *
81 * @param listener the transfer listener
82 * @return <code>true<code>
83 * if given listener was added to the collection of listeners
84 * <code>false</code> otherwise
85 * @see org.apache.maven.wagon.events.TransferEvent
86 * @see #addTransferListener(TransferListener)
87 */
88 public synchronized boolean hasTransferListener( final TransferListener listener )
89 {
90 return listeners.contains( listener );
91 }
92
93
94 /**
95 * Dispatches the given <code>TransferEvent</code>
96 * to all registered listeners (calls method {@link TransferListener#transferStarted(TransferEvent)} on all of
97 * them}. The Event should be of type {@link TransferEvent#TRANSFER_COMPLETED}
98 *
99 * @param transferEvent the TransferEvent which will be dispatched to listeners
100 */
101 public synchronized void fireTransferStarted( final TransferEvent transferEvent )
102 {
103 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
104 {
105 final TransferListener listener = (TransferListener) iter.next();
106 listener.transferStarted( transferEvent );
107 }
108 }
109
110 /**
111 * Dispatches the given <code>TransferEvent</code>
112 * to all registered listeners (calls method {@link TransferListener#transferProgress(TransferEvent, byte[], int)}
113 * on all of them). The Event should be of type {@link TransferEvent#TRANSFER_PROGRESS}.
114 *
115 * @param transferEvent the TransferEvent which will be dispatched to listeners
116 * @param buffer the buffer containing the additional content
117 * @param length the length of the content in the buffer
118 */
119 public synchronized void fireTransferProgress( final TransferEvent transferEvent, byte[] buffer, int length )
120 {
121 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
122 {
123 final TransferListener listener = (TransferListener) iter.next();
124 listener.transferProgress( transferEvent, buffer, length );
125
126 }
127 }
128
129 /**
130 * Dispatches the given <code>TransferEvent</code>
131 * to all registered listeners (calls method {@link TransferListener#transferCompleted(TransferEvent)} on all of
132 * them}. The Event should be of type {@link TransferEvent#TRANSFER_COMPLETED}
133 *
134 * @param transferEvent the TransferEvent which will be dispatched to listeners
135 */
136 public synchronized void fireTransferCompleted( final TransferEvent transferEvent )
137 {
138 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
139 {
140 final TransferListener listener = (TransferListener) iter.next();
141 listener.transferCompleted( transferEvent );
142
143 }
144 }
145
146 /**
147 * Dispatches the given <code>TransferEvent</code>
148 * to all registered listeners (calls method {@link TransferListener#transferError(TransferEvent)} on all of them.
149 * The Event should be of type {@link TransferEvent#TRANSFER_ERROR} and it is expected that
150 * {@link TransferEvent#getException()} } method will return not null value
151 *
152 * @param transferEvent the TransferEvent which will be dispatched to listeners
153 */
154 public synchronized void fireTransferError( final TransferEvent transferEvent )
155 {
156 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
157 {
158 final TransferListener listener = (TransferListener) iter.next();
159 listener.transferError( transferEvent );
160
161 }
162 }
163
164 /**
165 * Dispatches the given debug message
166 * to all registered listeners (calls method {@link TransferListener#debug(String)} on all of them.
167 *
168 * @param message the debug message which will be dispatched to listeners
169 */
170 public synchronized void fireDebug( final String message )
171 {
172
173 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
174 {
175 final TransferListener listener = (TransferListener) iter.next();
176 listener.debug( message );
177
178 }
179 }
180
181 /**
182 * Dispatches the given <code>TransferEvent</code>
183 * to all registered listeners (calls method {@link TransferListener#transferInitiated(TransferEvent)} on all of
184 * them. The Event should be of type {@link TransferEvent#TRANSFER_INITIATED}.
185 *
186 * @param transferEvent the TransferEvent which will be dispatched to listeners
187 */
188 public synchronized void fireTransferInitiated( final TransferEvent transferEvent )
189 {
190 for ( Iterator iter = listeners.iterator(); iter.hasNext(); )
191 {
192 final TransferListener listener = (TransferListener) iter.next();
193 listener.transferInitiated( transferEvent );
194 }
195 }
196 }