View Javadoc

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    * Provides a convenience superclass for those shells wishing to publish status messages.
10   * 
11   * @author Ben Alex
12   * @since 1.0
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  }