1 package org.springframework.roo.shell.event;
2
3 import java.util.Set;
4 import java.util.concurrent.CopyOnWriteArraySet;
5
6 import org.springframework.roo.support.util.Assert;
7
8
9
10
11
12
13
14
15 public abstract class AbstractShellStatusPublisher implements ShellStatusProvider {
16
17 protected Set<ShellStatusListener> shellStatusListeners = new CopyOnWriteArraySet<ShellStatusListener>();
18 protected ShellStatus shellStatus = ShellStatus.STARTING;
19
20 public final void addShellStatusListener(ShellStatusListener shellStatusListener) {
21 Assert.notNull(shellStatusListener, "Status listener required");
22 synchronized (shellStatus) {
23 shellStatusListeners.add(shellStatusListener);
24 }
25 }
26
27 public final void removeShellStatusListener(ShellStatusListener shellStatusListener) {
28 Assert.notNull(shellStatusListener, "Status listener required");
29 synchronized (shellStatus) {
30 shellStatusListeners.remove(shellStatusListener);
31 }
32 }
33
34 public final ShellStatus getShellStatus() {
35 synchronized (shellStatus) {
36 return shellStatus;
37 }
38 }
39
40 protected void setShellStatus(ShellStatus shellStatus) {
41 Assert.notNull(shellStatus, "Shell status required");
42
43 synchronized (this.shellStatus) {
44 if (this.shellStatus == shellStatus) {
45 return;
46 }
47
48 for (ShellStatusListener listener : shellStatusListeners) {
49 listener.onShellStatusChange(this.shellStatus, shellStatus);
50 }
51 this.shellStatus = shellStatus;
52 }
53 }
54
55 }