1 package net.mograsim.plugin.nature;
3 import java.io.IOException;
4 import java.util.Objects;
5 import java.util.Optional;
7 import org.eclipse.core.resources.IProject;
8 import org.eclipse.jface.util.PropertyChangeEvent;
9 import org.eclipse.ui.preferences.ScopedPreferenceStore;
11 import net.mograsim.machine.Machine;
12 import net.mograsim.machine.MachineDefinition;
13 import net.mograsim.machine.MachineRegistry;
15 public class MachineContext
18 ScopedPreferenceStore prefs;
19 Optional<String> machineId;
20 Optional<MachineDefinition> machineDefinition;
21 Optional<Machine> activeMachine;
23 public MachineContext(IProject owner)
25 this.owner = Objects.requireNonNull(owner);
26 prefs = ProjectMachineContext.getProjectPrefs(owner);
27 prefs.addPropertyChangeListener(this::preferenceListener);
28 machineId = ProjectMachineContext.getMachineIdFrom(prefs);
32 public final IProject getProject()
37 public final ScopedPreferenceStore getPreferences()
43 * Returns true if the project configuration is valid in the current environment
45 public final boolean isCurrentyValid()
47 return machineDefinition.isPresent();
51 * Returns true if the persisted project configuration itself is intact
53 public final boolean isIntact()
55 return machineId.isPresent();
59 * Returns true if a machine is instantiated and (possibly) running
61 public final boolean isActive()
63 return activeMachine.isPresent();
67 * Sets the projects machineId. Will likely break things, if the {@link MachineContext} {@link #isActive()}.
69 public final boolean setMachineId(String machineId)
71 prefs.setValue(ProjectMachineContext.MACHINE_PROPERTY, machineId);
85 * Sets the active machine in the {@link MachineContext}'s project scope.
87 public final void setActiveMachine(Machine machine)
89 activeMachine = Optional.ofNullable(machine);
92 public final Optional<String> getMachineId()
97 public final Optional<MachineDefinition> getMachineDefinition()
99 return machineDefinition;
102 public final Optional<Machine> getActiveMachine()
104 return activeMachine;
107 final void updateDefinition()
109 machineDefinition = machineId.map(MachineRegistry::getMachine);
112 private void preferenceListener(PropertyChangeEvent changeEvent)
114 if (changeEvent.getProperty().equals(ProjectMachineContext.MACHINE_PROPERTY))
116 machineId = Optional.ofNullable((String) changeEvent.getNewValue());