Author: gnodet
Date: Wed Oct 28 20:14:14 2009
New Revision: 830749

URL: http://svn.apache.org/viewvc?rev=830749&view=rev
Log:
Slightly refactor the Environment / Signal api

Modified:
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/ShellFactory.java
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/ShellFactory.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/ShellFactory.java?rev=830749&r1=830748&r2=830749&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/ShellFactory.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/ShellFactory.java
 Wed Oct 28 20:14:14 2009
@@ -100,9 +100,6 @@
      * Interface providing access to the environment map and allowing the 
registration
      * of listeners for certain signals.
      *
-     * TODO: should we use enums for signals to allow using EnumSet or varags 
for
-     *       interesting signals ? 
-     *
      * @see Signal
      */
     public interface Environment {
@@ -136,17 +133,17 @@
 
         /**
          * Add a qualified listener for the specific signal
-         * @param signal the signal the listener is interested in
          * @param listener the listener to register
+         * @param signal the signal the listener is interested in
          */
-       void addSignalListener(Signal signal, SignalListener listener);
+       void addSignalListener(SignalListener listener, Signal... signal);
 
         /**
          * Add a qualified listener for the specific set of signal
-         * @param signals the signals the listener is interested in
          * @param listener the listener to register
+         * @param signals the signals the listener is interested in
          */
-       void addSignalListener(EnumSet<Signal> signals, SignalListener 
listener);
+       void addSignalListener(SignalListener listener, EnumSet<Signal> 
signals);
 
         /**
          * Add a global listener for all signals

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java?rev=830749&r1=830748&r2=830749&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
 Wed Oct 28 20:14:14 2009
@@ -26,8 +26,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.apache.sshd.common.Channel;
 import org.apache.sshd.common.NamedFactory;
@@ -69,29 +70,35 @@
 
     protected static class StandardEnvironment implements Environment {
 
-        private final Map<Signal, List<SignalListener>> listeners;
+        private final Map<Signal, Set<SignalListener>> listeners;
         private final Map<String,String> env;
 
         public StandardEnvironment() {
-            listeners = new ConcurrentHashMap<Signal, List<SignalListener>>(3);
+            listeners = new ConcurrentHashMap<Signal, Set<SignalListener>>(3);
             env = new ConcurrentHashMap<String, String>();
         }
 
-        public void addSignalListener(Signal signal, SignalListener listener) {
-            addSignalListener(EnumSet.of(signal), listener);
+        public void addSignalListener(SignalListener listener, Signal... 
signals) {
+            if (signals == null) {
+                throw new IllegalArgumentException("signals may not be null");
+            }
+            if (listener == null) {
+                throw new IllegalArgumentException("listener may not be null");
+            }
+            for (Signal s : signals) {
+                getSignalListeners(s, true).add(listener);
+            }
         }
 
         public void addSignalListener(SignalListener listener) {
-            addSignalListener(EnumSet.allOf(Signal.class), listener);
+            addSignalListener(listener, EnumSet.allOf(Signal.class));
         }
 
-        public void addSignalListener(EnumSet<Signal> signals, SignalListener 
listener) {
-            if (listener == null) {
-                throw new IllegalArgumentException("listener may not be null");
-            }
-            for (Signal s : signals) {
-                getSignalListenersList(s, true).add(listener);
+        public void addSignalListener(SignalListener listener, EnumSet<Signal> 
signals) {
+            if (signals == null) {
+                throw new IllegalArgumentException("signals may not be null");
             }
+            addSignalListener(listener, signals.toArray(new 
Signal[signals.size()]));
         }
 
         public Map<String, String> getEnv() {
@@ -103,7 +110,7 @@
                 throw new IllegalArgumentException("listener may not be null");
             }
             for (Signal s : EnumSet.allOf(Signal.class)) {
-                final List<SignalListener> ls = getSignalListenersList(s, 
false);
+                final Set<SignalListener> ls = getSignalListeners(s, false);
                 if (ls != null) {
                     ls.remove(listener);
                 }
@@ -111,7 +118,7 @@
         }
 
         public void signal(Signal signal) {
-            final List<SignalListener> ls = getSignalListenersList(signal, 
false);
+            final Set<SignalListener> ls = getSignalListeners(signal, false);
             if (ls != null) {
                 for (SignalListener l : ls) {
                     l.signal(signal);
@@ -130,13 +137,13 @@
             getEnv().put(key, value);
         }
         
-        protected List<SignalListener> getSignalListenersList(Signal signal, 
boolean create) {
-            List<SignalListener> ls = listeners.get(signal);
+        protected Set<SignalListener> getSignalListeners(Signal signal, 
boolean create) {
+            Set<SignalListener> ls = listeners.get(signal);
             if (ls == null && create) {
                 synchronized (listeners) {
                     ls = listeners.get(signal);
                     if (ls == null) {
-                        ls = new CopyOnWriteArrayList<SignalListener>();
+                        ls = new CopyOnWriteArraySet<SignalListener>();
                         listeners.put(signal, ls);
                     }
                 }
@@ -144,7 +151,7 @@
             // may be null in case create=false
             return ls;
         }
-        
+
     }
 
     protected static enum PtyMode {


Reply via email to