Marked old MachineContext deprecated
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / MachineContext.java
1 package net.mograsim.plugin;
2
3 import java.util.HashSet;
4 import java.util.Optional;
5 import java.util.Set;
6
7 import net.mograsim.machine.Machine;
8 import net.mograsim.machine.MachineRegistry;
9 import net.mograsim.plugin.nature.ProjectMachineContext;
10
11 /**
12  * @deprecated use the {@link ProjectMachineContext} instead to make the context project dependent.
13  */
14 @Deprecated(forRemoval = true)
15 public class MachineContext
16 {
17         private Machine machine;
18         private Set<ContextObserver> observers;
19         private static MachineContext instance;
20
21         private MachineContext()
22         {
23                 observers = new HashSet<>();
24         }
25
26         public static MachineContext getInstance()
27         {
28                 if (instance == null)
29                 {
30                         instance = new MachineContext();
31                         // TODO don't hardcode the Am2900
32                         instance.setMachine(MachineRegistry.getMachine("Am2900").createNew());
33                 }
34                 return instance;
35         }
36
37         public Machine getMachine()
38         {
39                 return machine;
40         }
41
42         public void setMachine(Machine machine)
43         {
44                 this.machine = machine;
45                 notifyObservers(machine);
46         }
47
48         public void registerObserver(ContextObserver ob)
49         {
50                 observers.add(ob);
51                 ob.setMachine(Optional.ofNullable(machine));
52         }
53
54         public void deregisterObserver(ContextObserver ob)
55         {
56                 observers.remove(ob);
57         }
58
59         private void notifyObservers(Machine machine)
60         {
61                 observers.forEach(ob -> ob.setMachine(Optional.ofNullable(machine)));
62         }
63
64         @FunctionalInterface
65         public static interface ContextObserver
66         {
67                 void setMachine(Optional<Machine> machine);
68         }
69 }