28e792169c5e50d24fa2d05e6edf4bd49647206f
[Mograsim.git] / plugins / 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.HashMap;
6 import java.util.Map;
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;
14
15 public class MachineRegistry
16 {
17         private static final String MACHINE_EXT_ID = "net.mograsim.machine.machine_definition";
18
19         private static final Map<String, MachineDefinition> installedMachines = new HashMap<>();
20
21         private static void reload()
22         {
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);
27                 try
28                 {
29                         for (IConfigurationElement e : config)
30                         {
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)
36                                 {
37                                         System.out.println("Found " + id);
38                                         installedMachines.put(id, (MachineDefinition) o);
39                                 } else
40                                 {
41                                         System.err.println("Invalid machine definition: " + o + "(id=" + id + "");
42                                 }
43                         }
44                 }
45                 catch (CoreException ex)
46                 {
47                         System.out.println(ex.getMessage());
48                 }
49         }
50
51         public static void initialize()
52         {
53                 reload();
54                 Platform.getExtensionRegistry().addListener(new IRegistryEventListener()
55                 {
56
57                         @Override
58                         public void removed(IExtensionPoint[] extensionPoints)
59                         {
60                                 // nothing?
61                         }
62
63                         @Override
64                         public void removed(IExtension[] extensions)
65                         {
66                                 reload();
67                         }
68
69                         @Override
70                         public void added(IExtensionPoint[] extensionPoints)
71                         {
72                                 // nothing?
73                         }
74
75                         @Override
76                         public void added(IExtension[] extensions)
77                         {
78                                 reload();
79                         }
80                 }, MACHINE_EXT_ID);
81         }
82
83         public static Map<String, MachineDefinition> getInstalledMachines()
84         {
85                 return Collections.unmodifiableMap(installedMachines);
86         }
87
88         public static MachineDefinition getMachine(String id)
89         {
90                 return installedMachines.get(id);
91         }
92 }