package com.onionnetworks.util;
import java.util.*;
public class InvokingDispatch extends ReflectiveEventDispatch implements
EventListener{
public static final String INVOKE = "invoke";
public InvokingDispatch() {
super();
addListener(this,this,INVOKE);
}
// can't be inner class unless we create a public interface for invoke()
public void invoke(InvokeEvent ev) {
ev.getRunnable().run();
synchronized (ev) {
ev.notifyAll();
}
}
public void invokeLater(Runnable r) {
fire(new InvokeEvent(this,r),INVOKE);
}
public void invokeAndWait(Runnable r) throws InterruptedException {
InvokeEvent ev = new InvokeEvent(this,r);
synchronized (ev) {
fire(ev,INVOKE);
ev.wait();
}
}
public class InvokeEvent extends EventObject {
Runnable r;
public InvokeEvent(Object source, Runnable r) {
super(source);
this.r = r;
}
public Runnable getRunnable() {
return r;
}
}
}