1 package net.mograsim.machine;
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.HashMap;
7 import org.eclipse.core.runtime.CoreException;
8 import org.eclipse.core.runtime.IConfigurationElement;
9 import org.eclipse.core.runtime.IExtension;
10 import org.eclipse.core.runtime.IExtensionPoint;
11 import org.eclipse.core.runtime.IExtensionRegistry;
12 import org.eclipse.core.runtime.IRegistryEventListener;
13 import org.eclipse.core.runtime.Platform;
15 public class MachineRegistry
17 private static final String MACHINE_EXT_ID = "net.mograsim.machine.machine_definition";
19 private static final Map<String, MachineDefinition> installedMachines = new HashMap<>();
21 private static void reload()
23 installedMachines.clear();
24 IExtensionRegistry registry = Platform.getExtensionRegistry();
25 System.out.println(Arrays.toString(registry.getExtensionPoints("net.mograsim.machine")));
26 IConfigurationElement[] config = registry.getConfigurationElementsFor(MACHINE_EXT_ID);
29 for (IConfigurationElement e : config)
31 System.out.println(e.getNamespaceIdentifier());
32 System.out.println(Arrays.toString(e.getAttributeNames()));
33 final Object o = e.createExecutableExtension("class");
34 final String id = e.getAttribute("unique_id");
35 if (o instanceof MachineDefinition)
37 System.out.println("Found " + id);
38 MachineDefinition md = (MachineDefinition) o;
39 if (Objects.equals(id, md.getId()))
40 installedMachines.put(id, md);
42 System.err.println("Machine definition ids to not match: " + id + " and " + md.getId());
45 System.err.println("Invalid machine definition: " + o + "(id=" + id + "");
49 catch (CoreException ex)
51 System.out.println(ex.getMessage());
55 public static void initialize()
58 Platform.getExtensionRegistry().addListener(new IRegistryEventListener()
62 public void removed(IExtensionPoint[] extensionPoints)
68 public void removed(IExtension[] extensions)
74 public void added(IExtensionPoint[] extensionPoints)
80 public void added(IExtension[] extensions)
87 public static Map<String, MachineDefinition> getInstalledMachines()
89 return Collections.unmodifiableMap(installedMachines);
92 public static MachineDefinition getMachine(String id)
94 return installedMachines.get(id);