package org.jactr.eclipse.runtime.ui.misc; /* * default logging */ import java.util.concurrent.Executor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.eclipse.runtime.session.ISession; import org.jactr.eclipse.runtime.trace.impl.GeneralEventManager; import org.jactr.eclipse.runtime.trace.impl.GeneralEventManager.INotifier; public class BasicSessionSelectionProvider implements ISessionSelectionProvider { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(BasicSessionSelectionProvider.class); protected final GeneralEventManager<ISessionSelectionListener, ISession> _eventManager; private volatile boolean _isSelecting = false; private ISession _currentSession; public BasicSessionSelectionProvider() { _eventManager = new GeneralEventManager<ISessionSelectionListener, ISession>( new INotifier<ISessionSelectionListener, ISession>() { public void notify(ISessionSelectionListener listener, ISession event) { listener.sessionSelected(event); } }); } public void addListener(ISessionSelectionListener listener, Executor executor) { _eventManager.addListener(listener, executor); } public void removeListener(ISessionSelectionListener listener) { _eventManager.removeListener(listener); } public ISession getSelection() { return _currentSession; } public boolean isSelecting() { return _isSelecting; } public void select(ISession session) { if (_isSelecting) return; try { _isSelecting = true; _currentSession = session; _eventManager.notify(_currentSession); } finally { _isSelecting = false; } } }