1 package net.mograsim.plugin.launch;
3 import java.util.Optional;
5 import org.eclipse.debug.core.ILaunch;
6 import org.eclipse.debug.core.model.IDebugElement;
7 import org.eclipse.debug.core.model.IDebugTarget;
8 import org.eclipse.debug.ui.contexts.DebugContextEvent;
9 import org.eclipse.debug.ui.contexts.IDebugContextListener;
10 import org.eclipse.jface.viewers.ISelection;
11 import org.eclipse.jface.viewers.TreeSelection;
13 public abstract class MachineDebugContextListener implements IDebugContextListener
15 private MachineDebugTarget debugTarget;
18 public void debugContextChanged(DebugContextEvent e)
20 debugContextChanged(e.getContext());
23 public void debugContextChanged(ISelection selection)
25 if (selection != null && selection instanceof TreeSelection)
27 TreeSelection treeSelection = (TreeSelection) selection;
28 Object[] selectedElements = treeSelection.toArray();
29 for (Object selectedElement : selectedElements)
31 IDebugTarget debugTarget;
32 if (selectedElement instanceof IDebugElement)
33 debugTarget = ((IDebugElement) selectedElement).getDebugTarget();
34 else if (selectedElement instanceof ILaunch)
35 debugTarget = ((ILaunch) selectedElement).getDebugTarget();
38 if (!(debugTarget instanceof MachineDebugTarget))
40 if (debugTarget.isTerminated())
42 // we found a selected MachineDebugTarget
43 if (this.debugTarget != debugTarget)
44 updateContextAndCallContextChanged((MachineDebugTarget) debugTarget);
48 // we didn't find a selected MachineDebugTarget
49 updateContextAndCallContextChanged(null);
52 private void updateContextAndCallContextChanged(MachineDebugTarget newTarget)
54 MachineDebugTarget oldTarget = this.debugTarget;
55 this.debugTarget = newTarget;
56 machineDebugContextChanged(Optional.ofNullable(oldTarget), Optional.ofNullable(newTarget));
59 public abstract void machineDebugContextChanged(Optional<MachineDebugTarget> oldTarget, Optional<MachineDebugTarget> newTarget);