Experimental approach to register machines via extension point
[Mograsim.git] / net.mograsim.machine / src / net / mograsim / machine / MachineRegistry.java
1 package net.mograsim.machine;
2
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.HashSet;
6 import java.util.Set;
7
8 import org.eclipse.core.runtime.CoreException;
9 import org.eclipse.core.runtime.IConfigurationElement;
10 import org.eclipse.core.runtime.IExtensionRegistry;
11 import org.eclipse.core.runtime.ISafeRunnable;
12 import org.eclipse.core.runtime.SafeRunner;
13 import org.eclipse.e4.core.di.annotations.Execute;
14
15 public class MachineRegistry
16 {
17         private static final String MACHINE_EXT_ID = "net.mograsim.machine.machinedefinition";
18
19         private static Set<MachineDefinition> installedMachines = new HashSet<>();
20
21         @Execute
22         public void execute(IExtensionRegistry registry)
23         {
24                 System.out.println(Arrays.toString(registry.getExtensionPoints("net.mograsim.machine")));
25                 IConfigurationElement[] config = registry.getConfigurationElementsFor(MACHINE_EXT_ID);
26                 try
27                 {
28                         for (IConfigurationElement e : config)
29                         {
30                                 final Object o = e.createExecutableExtension("class");
31                                 if (o instanceof MachineDefinition)
32                                 {
33                                         executeExtension(o);
34                                 } else
35                                 {
36                                         System.err.println("Invalid machine definition: " + o);
37                                 }
38                         }
39                 }
40                 catch (CoreException ex)
41                 {
42                         System.out.println(ex.getMessage());
43                 }
44         }
45
46         private void executeExtension(final Object o)
47         {
48                 ISafeRunnable runnable = new ISafeRunnable()
49                 {
50                         @Override
51                         public void handleException(Throwable e)
52                         {
53                                 System.out.println("Exception in client");
54                         }
55
56                         @Override
57                         public void run() throws Exception
58                         {
59                                 System.out.println(((MachineDefinition) o).getAddressBits());
60                         }
61                 };
62                 SafeRunner.run(runnable);
63         }
64
65         public static Set<MachineDefinition> getinstalledMachines()
66         {
67                 return Collections.unmodifiableSet(installedMachines);
68         }
69 }