X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Fnature%2FMachineContext.java;h=b1708482514def0ded98bbacd3b584d979c709aa;hb=59afdc935cc4455d8ade9264b81b3cf7a8223eda;hp=b434ec9786505fa6bed9c30d92e937092dc1841d;hpb=51a65b109c1c7e9d0be14556c39c81a9f71c4e0c;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java index b434ec97..b1708482 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java @@ -1,8 +1,10 @@ package net.mograsim.plugin.nature; import java.io.IOException; +import java.util.HashSet; import java.util.Objects; import java.util.Optional; +import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.jface.util.PropertyChangeEvent; @@ -20,6 +22,8 @@ public class MachineContext Optional machineDefinition; Optional activeMachine; + private final Set observers = new HashSet<>(); + public MachineContext(IProject owner) { this.owner = Objects.requireNonNull(owner); @@ -87,6 +91,7 @@ public class MachineContext public final void setActiveMachine(Machine machine) { activeMachine = Optional.ofNullable(machine); + notifyObservers(); } public final Optional getMachineId() @@ -117,4 +122,26 @@ public class MachineContext updateDefinition(); } } + + public void registerObserver(ActiveMachineListener ob) + { + observers.add(ob); + ob.setMachine(activeMachine); + } + + public void deregisterObserver(ActiveMachineListener ob) + { + observers.remove(ob); + } + + private void notifyObservers() + { + observers.forEach(ob -> ob.setMachine(activeMachine)); + } + + @FunctionalInterface + public static interface ActiveMachineListener + { + void setMachine(Optional machine); + } } \ No newline at end of file