Further work on machine launch configs
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineLaunchConfigType.java
1 package net.mograsim.plugin.launch;
2
3 import org.eclipse.core.resources.IProject;
4 import org.eclipse.core.resources.IResourceChangeEvent;
5 import org.eclipse.core.resources.IResourceChangeListener;
6 import org.eclipse.core.resources.ResourcesPlugin;
7 import org.eclipse.core.runtime.CoreException;
8 import org.eclipse.core.runtime.IProgressMonitor;
9 import org.eclipse.debug.core.ILaunch;
10 import org.eclipse.debug.core.ILaunchConfiguration;
11 import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
12
13 import net.mograsim.machine.MachineDefinition;
14 import net.mograsim.plugin.MograsimActivator;
15 import net.mograsim.plugin.nature.MachineContext;
16 import net.mograsim.plugin.nature.ProjectMachineContext;
17
18 public class MachineLaunchConfigType extends LaunchConfigurationDelegate
19 {
20         public static final String PROJECT_ATTR = MograsimActivator.PLUGIN_ID + "project";
21
22         private final IResourceChangeListener resChangedListener;
23
24         public MachineLaunchConfigType()
25         {
26                 this.resChangedListener = this::resourceChanged;
27                 ResourcesPlugin.getWorkspace().addResourceChangeListener(resChangedListener,
28                                 // IResourceChangeEvent.POST_BUILD |
29                                 IResourceChangeEvent.POST_CHANGE |
30                                 // IResourceChangeEvent.PRE_BUILD |
31                                 // IResourceChangeEvent.PRE_CLOSE |
32                                 // IResourceChangeEvent.PRE_DELETE |
33                                 // IResourceChangeEvent.PRE_REFRESH |
34                                                 0);
35         }
36
37         @Override
38         public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException
39         {
40                 String projName = configuration.getAttribute(PROJECT_ATTR, "");
41                 IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projName);
42                 MachineContext machineContext = ProjectMachineContext.getMachineContextOf(project);
43                 MachineDefinition machineDefinition = machineContext.getMachineDefinition().orElseThrow();
44
45                 MachineDebugTarget debugTarget = new MachineDebugTarget(new MachineProcess(launch, machineDefinition));
46                 debugTarget.setExecutionSpeed(10d);
47         }
48
49         private void resourceChanged(IResourceChangeEvent event)
50         {
51                 // TODO react to MPM changes
52                 int type = event.getType();
53                 String typeStr;
54                 switch (type)
55                 {
56                 case IResourceChangeEvent.POST_BUILD:
57                         typeStr = "POST_BUILD";
58                         break;
59                 case IResourceChangeEvent.POST_CHANGE:
60                         typeStr = "POST_CHANGE";
61                         break;
62                 case IResourceChangeEvent.PRE_BUILD:
63                         typeStr = "PRE_BUILD";
64                         break;
65                 case IResourceChangeEvent.PRE_CLOSE:
66                         typeStr = "PRE_CLOSE";
67                         break;
68                 case IResourceChangeEvent.PRE_DELETE:
69                         typeStr = "PRE_DELETE";
70                         break;
71                 case IResourceChangeEvent.PRE_REFRESH:
72                         typeStr = "PRE_REFRESH";
73                         break;
74                 default:
75                         typeStr = "<unknown: " + type + ">";
76                 }
77                 System.out.println(typeStr + ": " + event);
78         }
79 }