diff options
Diffstat (limited to 'dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java')
-rw-r--r-- | dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java | 265 |
1 files changed, 137 insertions, 128 deletions
diff --git a/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java b/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java index ed353214a3a..e6c29cba1ba 100644 --- a/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java +++ b/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java @@ -7,7 +7,7 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * + * * Contributors: * Wind River Systems - initial API and implementation *******************************************************************************/ @@ -27,145 +27,154 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentati import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; /** - * The View Model provider for the Timers view. This provider allows for + * The View Model provider for the Timers view. This provider allows for * switching between two different view layouts: * <ol> * <li>Timers -> Triggers -> Alarms</li> * <li>Triggers -> Timers -> Alarms</li> - * </ol> + * </ol> * A special event is sent when the layout is changed in order to generate - * a proper delta to refresh the view. + * a proper delta to refresh the view. */ @SuppressWarnings("restriction") public class TimersVMProvider extends AbstractDMVMProvider { - /** Event indicating that the timers view layout has changed */ - public static class TimersViewLayoutChanged {} - - /** Enumeration of possible layouts for the timers view model */ - public enum ViewLayout { TRIGGERS_AT_TOP, TIMERS_AT_TOP } - - /** Have we registered ourselves as a listener for DM events? */ - private boolean fRegisteredEventListener; - - public TimersVMProvider(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) { - super(adapter, presentationContext, session); - - // Add ourselves as listener for DM events events. - try { - session.getExecutor().execute(new Runnable() { - @Override - public void run() { - if (DsfSession.isSessionActive(getSession().getId())) { - getSession().addServiceEventListener(TimersVMProvider.this, null); - fRegisteredEventListener = true; - } - } - }); - } catch (RejectedExecutionException e) { - // Session shut down, not much we can do but wait to be disposed. - } - - // Set the initial view layout. - setViewLayout(ViewLayout.TIMERS_AT_TOP); - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMProvider#dispose() - */ - @Override + /** Event indicating that the timers view layout has changed */ + public static class TimersViewLayoutChanged { + } + + /** Enumeration of possible layouts for the timers view model */ + public enum ViewLayout { + TRIGGERS_AT_TOP, TIMERS_AT_TOP + } + + /** Have we registered ourselves as a listener for DM events? */ + private boolean fRegisteredEventListener; + + public TimersVMProvider(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) { + super(adapter, presentationContext, session); + + // Add ourselves as listener for DM events events. + try { + session.getExecutor().execute(new Runnable() { + @Override + public void run() { + if (DsfSession.isSessionActive(getSession().getId())) { + getSession().addServiceEventListener(TimersVMProvider.this, null); + fRegisteredEventListener = true; + } + } + }); + } catch (RejectedExecutionException e) { + // Session shut down, not much we can do but wait to be disposed. + } + + // Set the initial view layout. + setViewLayout(ViewLayout.TIMERS_AT_TOP); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMProvider#dispose() + */ + @Override public void dispose() { // Remove ourselves as listener for DM events events. In practice, we // get called after the session has shut down, so we'll end up with a // RejectedExecutionException. We put this here all the same for // completeness sake. - try { - getSession().getExecutor().execute(new Runnable() { - @Override - public void run() { - if (fRegisteredEventListener && DsfSession.isSessionActive(getSession().getId())) { - getSession().removeServiceEventListener(TimersVMProvider.this); - fRegisteredEventListener = false; - } - } - }); - } catch (RejectedExecutionException e) { - // Session shut down, not much we can do but wait to be disposed. - } - - super.dispose(); - } - - /** - * Configures a new layout for the timers view model. - * @param layout New layout to use. - */ - public void setViewLayout(ViewLayout layout) { - clearNodes(); - if (layout == ViewLayout.TRIGGERS_AT_TOP) { - IRootVMNode root = new TimersRootVMNode(this); - IVMNode triggersNode = new TriggersVMNode(this, getSession()); - addChildNodes(root, new IVMNode[] { triggersNode }); - IVMNode timersNode = new TimersVMNode(this, getSession()); - addChildNodes(triggersNode, new IVMNode[] { timersNode }); - IVMNode alarmNode = new AlarmsVMNode(this, getSession()); - addChildNodes(timersNode, new IVMNode[] { alarmNode }); - setRootNode(root); - } else if (layout == ViewLayout.TIMERS_AT_TOP) { - IRootVMNode root = new TimersRootVMNode(this); - IVMNode timersNode = new TimersVMNode(this, getSession()); - addChildNodes(root, new IVMNode[] { timersNode }); - IVMNode triggersNode = new TriggersVMNode(this, getSession()); - addChildNodes(timersNode, new IVMNode[] { triggersNode }); - IVMNode alarmNode = new AlarmsVMNode(this, getSession()); - addChildNodes(triggersNode, new IVMNode[] { alarmNode }); - setRootNode(root); - } - - handleEvent(new TimersViewLayoutChanged()); - } - - @Override - public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) { - return new TimersViewColumnPresentation(); - } - - @Override - public String getColumnPresentationId(IPresentationContext context, Object element) { - return TimersViewColumnPresentation.ID; - } - - // Add a handler for the triggers and timers changed events. The - // AbstractDMVMProvider superclass automatically registers this provider - // for all IDMEvent events, however these two events do not implement - // IDMEvent - @DsfServiceEventHandler - public void eventDispatched(final TriggersChangedEvent event) { - if (isDisposed()) return; - - try { - getExecutor().execute(new Runnable() { - @Override - public void run() { - if (isDisposed()) return; - handleEvent(event); - } - }); - } catch (RejectedExecutionException e) {} - } - - @DsfServiceEventHandler - public void eventDispatched(final TimersChangedEvent event) { - if (isDisposed()) return; - - try { - getExecutor().execute(new Runnable() { - @Override - public void run() { - if (isDisposed()) return; - handleEvent(event); - } - }); - } catch (RejectedExecutionException e) {} - } + try { + getSession().getExecutor().execute(new Runnable() { + @Override + public void run() { + if (fRegisteredEventListener && DsfSession.isSessionActive(getSession().getId())) { + getSession().removeServiceEventListener(TimersVMProvider.this); + fRegisteredEventListener = false; + } + } + }); + } catch (RejectedExecutionException e) { + // Session shut down, not much we can do but wait to be disposed. + } + + super.dispose(); + } + + /** + * Configures a new layout for the timers view model. + * @param layout New layout to use. + */ + public void setViewLayout(ViewLayout layout) { + clearNodes(); + if (layout == ViewLayout.TRIGGERS_AT_TOP) { + IRootVMNode root = new TimersRootVMNode(this); + IVMNode triggersNode = new TriggersVMNode(this, getSession()); + addChildNodes(root, new IVMNode[] { triggersNode }); + IVMNode timersNode = new TimersVMNode(this, getSession()); + addChildNodes(triggersNode, new IVMNode[] { timersNode }); + IVMNode alarmNode = new AlarmsVMNode(this, getSession()); + addChildNodes(timersNode, new IVMNode[] { alarmNode }); + setRootNode(root); + } else if (layout == ViewLayout.TIMERS_AT_TOP) { + IRootVMNode root = new TimersRootVMNode(this); + IVMNode timersNode = new TimersVMNode(this, getSession()); + addChildNodes(root, new IVMNode[] { timersNode }); + IVMNode triggersNode = new TriggersVMNode(this, getSession()); + addChildNodes(timersNode, new IVMNode[] { triggersNode }); + IVMNode alarmNode = new AlarmsVMNode(this, getSession()); + addChildNodes(triggersNode, new IVMNode[] { alarmNode }); + setRootNode(root); + } + + handleEvent(new TimersViewLayoutChanged()); + } + + @Override + public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) { + return new TimersViewColumnPresentation(); + } + + @Override + public String getColumnPresentationId(IPresentationContext context, Object element) { + return TimersViewColumnPresentation.ID; + } + + // Add a handler for the triggers and timers changed events. The + // AbstractDMVMProvider superclass automatically registers this provider + // for all IDMEvent events, however these two events do not implement + // IDMEvent + @DsfServiceEventHandler + public void eventDispatched(final TriggersChangedEvent event) { + if (isDisposed()) + return; + + try { + getExecutor().execute(new Runnable() { + @Override + public void run() { + if (isDisposed()) + return; + handleEvent(event); + } + }); + } catch (RejectedExecutionException e) { + } + } + + @DsfServiceEventHandler + public void eventDispatched(final TimersChangedEvent event) { + if (isDisposed()) + return; + + try { + getExecutor().execute(new Runnable() { + @Override + public void run() { + if (isDisposed()) + return; + handleEvent(event); + } + }); + } catch (RejectedExecutionException e) { + } + } } |