Author: gnodet
Date: Wed Oct 28 20:14:14 2009
New Revision: 830749
URL:
http://svn.apache.org/viewvc?rev=830749&view=revLog:
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 {