package pl.net.bluesoft.rnd.processtool.event; import pl.net.bluesoft.rnd.processtool.ProcessToolContext; import pl.net.bluesoft.rnd.processtool.ProcessToolContextCallback; import pl.net.bluesoft.rnd.processtool.plugins.ProcessToolRegistry; import pl.net.bluesoft.util.eventbus.ConcurrentEventBusManager; import java.util.concurrent.ExecutorService; public class ProcessToolEventBusManager extends ConcurrentEventBusManager { protected ProcessToolRegistry registry; public ProcessToolEventBusManager(ProcessToolRegistry registry) { super(); this.registry = registry; } public ProcessToolEventBusManager(ProcessToolRegistry registry, ExecutorService executorService) { super(executorService); this.registry = registry; } @Override protected Runnable getEventRunnable(final Object event) { return new Runnable() { @Override public void run() { registry.withProcessToolContext(new ProcessToolContextCallback() { @Override public void withContext(ProcessToolContext ctx) { ProcessToolContext.Util.setThreadProcessToolContext(ctx); try { publish(event); } finally { ProcessToolContext.Util.removeThreadProcessToolContext(); } } }); } }; } }