package org.netbeans.gradle.project.event; import org.jtrim.concurrent.TaskExecutor; import org.jtrim.event.EventListeners; import org.jtrim.event.ListenerRef; import org.jtrim.event.OneShotListenerManager; import org.jtrim.swing.concurrent.SwingTaskExecutor; import org.jtrim.utils.ExceptionHelper; public final class OneShotChangeListenerManager implements PausableChangeListenerManager { private final OneShotListenerManager<Runnable, Void> oneShotManager; private final PausableChangeListenerManager pausableManager; public OneShotChangeListenerManager() { this(new OneShotListenerManager<Runnable, Void>(), null); } public OneShotChangeListenerManager(TaskExecutor executor) { this(new OneShotListenerManager<Runnable, Void>(), executor); } private OneShotChangeListenerManager( OneShotListenerManager<Runnable, Void> oneShotManager, TaskExecutor executor) { ExceptionHelper.checkNotNullArgument(executor, "executor"); this.oneShotManager = oneShotManager; this.pausableManager = executor != null ? new GenericChangeListenerManager(wrapOneShotManager(oneShotManager), executor) : new GenericChangeListenerManager(wrapOneShotManager(oneShotManager)); } private static ChangeListenerManager wrapOneShotManager(final OneShotListenerManager<Runnable, Void> wrapped) { assert wrapped != null; return new ChangeListenerManager() { @Override public void fireEventually() { EventListeners.dispatchRunnable(wrapped); } @Override public ListenerRef registerListener(Runnable listener) { return wrapped.registerListener(listener); } @Override public int getListenerCount() { return wrapped.getListenerCount(); } }; } public static OneShotChangeListenerManager getSwingNotifier() { return new OneShotChangeListenerManager(SwingTaskExecutor.getStrictExecutor(false)); } public ListenerRef registerOrNotifyListener(Runnable listener) { return oneShotManager.registerOrNotifyListener(listener); } @Override public PauseRef pauseManager() { return pausableManager.pauseManager(); } @Override public void fireEventually() { pausableManager.fireEventually(); } @Override public ListenerRef registerListener(Runnable listener) { return pausableManager.registerListener(listener); } @Override public int getListenerCount() { return pausableManager.getListenerCount(); } }