1 package net.sf.josceleton.core.impl.async;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 import net.sf.josceleton.core.api.async.Async;
7 import net.sf.josceleton.core.api.async.Listener;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11
12
13
14
15 public class DefaultAsync<L extends Listener> implements Async<L> {
16
17 private static final Log LOG = LogFactory.getLog(DefaultAsync.class);
18
19 private final Set<L> registeredListeners = new HashSet<L>();
20
21
22 protected final Iterable<L> getListeners() {
23 return this.registeredListeners;
24 }
25
26
27 @Override public final void addListener(final L listener) {
28 this.beforeAddListener(listener);
29
30 final boolean wasChanged = this.registeredListeners.add(listener);
31 if(wasChanged == false) {
32 LOG.warn("Not added listener [" + listener + "] as it was yet added!");
33 }
34 }
35
36
37 @Override public final void removeListener(final L listener) {
38 this.beforeRemoveListener(listener);
39
40 final boolean wasRemoved = this.registeredListeners.remove(listener);
41 if(wasRemoved == false) {
42 LOG.warn("Not removed listener [" + listener + "] as it was not yet added!");
43 }
44 }
45
46
47
48
49 protected void beforeAddListener(@SuppressWarnings("unused") final L listener) {
50
51 }
52
53
54
55
56 protected void beforeRemoveListener(@SuppressWarnings("unused") final L listener) {
57
58 }
59 }