Added String preferences
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineDebugContextListener.java
1 package net.mograsim.plugin.launch;
2
3 import java.util.Optional;
4
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;
12
13 public abstract class MachineDebugContextListener implements IDebugContextListener
14 {
15         private MachineDebugTarget debugTarget;
16
17         @Override
18         public void debugContextChanged(DebugContextEvent e)
19         {
20                 debugContextChanged(e.getContext());
21         }
22
23         public void debugContextChanged(ISelection selection)
24         {
25                 if (selection != null && selection instanceof TreeSelection)
26                 {
27                         TreeSelection treeSelection = (TreeSelection) selection;
28                         Object[] selectedElements = treeSelection.toArray();
29                         for (Object selectedElement : selectedElements)
30                         {
31                                 IDebugTarget debugTarget;
32                                 if (selectedElement instanceof IDebugElement)
33                                         debugTarget = ((IDebugElement) selectedElement).getDebugTarget();
34                                 else if (selectedElement instanceof ILaunch)
35                                         debugTarget = ((ILaunch) selectedElement).getDebugTarget();
36                                 else
37                                         continue;
38                                 if (!(debugTarget instanceof MachineDebugTarget))
39                                         continue;
40                                 if (debugTarget.isTerminated())
41                                         continue;
42                                 // we found a selected MachineDebugTarget
43                                 if (this.debugTarget != debugTarget)
44                                         updateContextAndCallContextChanged((MachineDebugTarget) debugTarget);
45                                 return;
46                         }
47                 }
48                 // we didn't find a selected MachineDebugTarget
49                 updateContextAndCallContextChanged(null);
50         }
51
52         private void updateContextAndCallContextChanged(MachineDebugTarget newTarget)
53         {
54                 MachineDebugTarget oldTarget = this.debugTarget;
55                 this.debugTarget = newTarget;
56                 machineDebugContextChanged(Optional.ofNullable(oldTarget), Optional.ofNullable(newTarget));
57         }
58
59         public abstract void machineDebugContextChanged(Optional<MachineDebugTarget> oldTarget, Optional<MachineDebugTarget> newTarget);
60 }