Finished MPROM support. Fixes #10
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / nature / MachineContext.java
index 5531681..f3965f2 100644 (file)
@@ -1,6 +1,13 @@
 package net.mograsim.plugin.nature;
 
-import static net.mograsim.plugin.nature.MachineContextStatus.*;
+import static net.mograsim.plugin.nature.MachineContextStatus.ACTIVE;
+import static net.mograsim.plugin.nature.MachineContextStatus.ACTIVE_CHANGED;
+import static net.mograsim.plugin.nature.MachineContextStatus.BROKEN;
+import static net.mograsim.plugin.nature.MachineContextStatus.CLOSED;
+import static net.mograsim.plugin.nature.MachineContextStatus.DEAD;
+import static net.mograsim.plugin.nature.MachineContextStatus.INTACT;
+import static net.mograsim.plugin.nature.MachineContextStatus.READY;
+import static net.mograsim.plugin.nature.MachineContextStatus.UNKOWN;
 
 import java.io.IOException;
 import java.util.HashSet;
@@ -33,10 +40,12 @@ public class MachineContext
        final ScopedPreferenceStore prefs;
        Optional<String> machineId = Optional.empty();
        Optional<MachineDefinition> machineDefinition = Optional.empty();
+       @Deprecated(forRemoval = true)
        Optional<Machine> activeMachine = Optional.empty();
 
        private MachineContextStatus status = UNKOWN;
 
+       @Deprecated(forRemoval = true)
        private final Set<ActiveMachineListener> machineListeners = new HashSet<>();
        private final Set<MachineContextStatusListener> stateListeners = new HashSet<>();
 
@@ -63,7 +72,7 @@ public class MachineContext
         */
        public final boolean isCurrentyValid()
        {
-               return status == READY || status == ACTIVE;
+               return status == READY || isActive();
        }
 
        /**
@@ -79,6 +88,7 @@ public class MachineContext
        /**
         * Returns true if a machine is instantiated and (possibly) running
         */
+       @Deprecated(forRemoval = true)
        public final boolean isActive()
        {
                return status == ACTIVE || status == ACTIVE_CHANGED;
@@ -113,11 +123,13 @@ public class MachineContext
        /**
         * Sets the active machine in the {@link MachineContext}'s project scope.
         */
+       @Deprecated(forRemoval = true)
        public final void setActiveMachine(Machine machine)
        {
+               Optional<Machine> oldMachine = activeMachine;
                activeMachine = Optional.ofNullable(machine);
                updateStatus();
-               notifyActiveMachineListeners();
+               notifyActiveMachineListeners(oldMachine, activeMachine);
        }
 
        public final Optional<String> getMachineId()
@@ -130,6 +142,7 @@ public class MachineContext
                return machineDefinition;
        }
 
+       @Deprecated(forRemoval = true)
        public final Optional<Machine> getActiveMachine()
        {
 //             activateMachine(); // TODO is this the best way to deal with this?
@@ -142,13 +155,12 @@ public class MachineContext
         * 
         * @return true if the activation was successful
         */
+       @Deprecated(forRemoval = true)
        public final boolean activateMachine()
        {
                if (status == ACTIVE)
                        return true;
                machineDefinition.ifPresent(md -> setActiveMachine(md.createNew()));
-               if (activeMachine.isPresent())
-                       System.out.format("Created new machine %s for project %s%n", activeMachine.get().getDefinition().getId(), owner.getName());
                updateStatus();
                return isActive();
        }
@@ -172,7 +184,6 @@ public class MachineContext
                if (oldStatus == newStatus)
                        return;
                status = newStatus;
-               System.out.format("Project %s context status: %s -> %s%n", owner.getName(), oldStatus, newStatus);
                doPostStatusChangedAction();
                notifyMachineContextStatusListeners(oldStatus);
        }
@@ -183,6 +194,7 @@ public class MachineContext
         * 
         * @return the raw status of the project at the time of the call.
         */
+       @SuppressWarnings("removal")
        public final MachineContextStatus reevaluateStatus()
        {
                if (!owner.exists())
@@ -200,13 +212,14 @@ public class MachineContext
                return ACTIVE;
        }
 
+       @Deprecated(forRemoval = true)
        private void doPostStatusChangedAction()
        {
                if ((status == DEAD || status == CLOSED) && activeMachine.isPresent())
                {
-                       System.out.format("Removed machine %s for project %s%n", activeMachine.get().getDefinition().getId(), owner.getName());
+                       Optional<Machine> oldMachine = activeMachine;
                        activeMachine = Optional.empty();
-                       notifyActiveMachineListeners();
+                       notifyActiveMachineListeners(oldMachine, activeMachine);
                }
        }
 
@@ -232,6 +245,11 @@ public class MachineContext
                        return;
                machineId = newMachineDefinitionId;
                machineDefinition = machineId.map(MachineRegistry::getMachine);
+               if (machineDefinition.isEmpty() && newMachineDefinitionId.isPresent())
+               {
+                       // TODO open a dialog
+                       System.err.println("Machine definition for ID " + newMachineDefinitionId.get() + " not found");
+               }
                updateStatus();
                ProjectMachineContext.notifyListeners(new ProjectContextEvent(this, ProjectContextEventType.MACHINE_DEFINITION_CHANGE));
        }
@@ -244,17 +262,20 @@ public class MachineContext
                }
        }
 
-       private void notifyActiveMachineListeners()
+       @Deprecated(forRemoval = true)
+       private void notifyActiveMachineListeners(Optional<Machine> oldMachine, Optional<Machine> newMachine)
        {
-               machineListeners.forEach(ob -> ob.setMachine(activeMachine));
+               machineListeners.forEach(ob -> ob.setMachine(oldMachine, newMachine));
        }
 
+       @Deprecated(forRemoval = true)
        public void addActiveMachineListener(ActiveMachineListener ob)
        {
                machineListeners.add(ob);
-               ob.setMachine(activeMachine);
+               ob.setMachine(Optional.empty(), activeMachine);
        }
 
+       @Deprecated(forRemoval = true)
        public void removeActiveMachineListener(ActiveMachineListener ob)
        {
                machineListeners.remove(ob);
@@ -277,9 +298,10 @@ public class MachineContext
        }
 
        @FunctionalInterface
+       @Deprecated(forRemoval = true)
        public static interface ActiveMachineListener
        {
-               void setMachine(Optional<Machine> machine);
+               void setMachine(Optional<Machine> oldMachine, Optional<Machine> newMachine);
        }
 
        @FunctionalInterface