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 installedMachines.put(id, (MachineDefinition) o);
41 System.err.println("Invalid machine definition: " + o + "(id=" + id + "");
45 catch (CoreException ex)
47 System.out.println(ex.getMessage());
51 public static void initialize()
54 Platform.getExtensionRegistry().addListener(new IRegistryEventListener()
58 public void removed(IExtensionPoint[] extensionPoints)
64 public void removed(IExtension[] extensions)
70 public void added(IExtensionPoint[] extensionPoints)
76 public void added(IExtension[] extensions)
83 public static Map<String, MachineDefinition> getInstalledMachines()
85 return Collections.unmodifiableMap(installedMachines);
88 public static MachineDefinition getMachine(String id)
90 return installedMachines.get(id);