package org.jactr.eclipse.runtime.ui.misc; /* * default logging */ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.action.Action; import org.jactr.eclipse.runtime.RuntimePlugin; import org.jactr.eclipse.runtime.session.ISession; import org.jactr.eclipse.runtime.session.control.ISessionController; import org.jactr.eclipse.ui.images.JACTRImages; public class TerminateAction extends Action implements ISessionSelectionListener { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(TerminateAction.class); private ISession _currentSession; public TerminateAction() { setEnabled(false); setToolTipText(""); setImageDescriptor(JACTRImages.getImageDescriptor(JACTRImages.TERIMINATE)); } public void sessionSelected(ISession selectedSession) { if (_currentSession != null && !_currentSession.equals(selectedSession)) detachSession(_currentSession); if (_currentSession != selectedSession) attachSession(selectedSession); refresh(); } public void refresh() { updateStateAndIcons(); } protected void detachSession(ISession session) { if (session == _currentSession) _currentSession = null; } protected void attachSession(ISession session) { _currentSession = session; } public ISession getCurrentSession() { return _currentSession; } protected void mark(boolean enabled, String toolTip) { setEnabled(enabled); setToolTipText(toolTip); } protected void updateStateAndIcons() { ISession session = getCurrentSession(); ISessionController controller = session == null ? null : session .getController(); if (session == null || controller == null) { mark(false, "Runtime inactive"); return; } if (controller.isTerminated() || !session.isOpen()) mark(false, "Runtime inactive"); if (controller.canTerminate() && controller.isRunning()) mark(true, "Terminate runtime"); } @Override public void run() { ISession session = getCurrentSession(); if (session == null) return; ISessionController controller = session.getController(); if (controller == null) return; if (controller.canTerminate() && controller.isRunning()) try { controller.terminate(); } catch (Exception e) { RuntimePlugin.error("Failed to stop session", e); LOGGER.error( "AbstractRuntimeModelViewPart.stopSession threw Exception : ", e); } } }