diff options
Diffstat (limited to 'sources/simulator/VSSimulation.java')
| -rw-r--r-- | sources/simulator/VSSimulation.java | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java index 458d7be..3cf42e0 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulation.java @@ -674,20 +674,26 @@ public class VSSimulation extends VSFrame implements ActionListener { } private boolean takeover(long time) { - VSProcess process = getSelectedProcess(); - int index = comboBox.getSelectedIndex(); + VSProcess selectedProcess = getSelectedProcess(); + int index = comboBox.getSelectedIndex(); VSCreateTask createTask = createTasks.get(index); if (createTask == null) return false; - VSTask task = createTask.createTask(process, time, localTasks); - taskManager.addTask(task, VSTaskManager.PROGRAMMED); + ArrayList<VSProcess> processes = getConcernedProcesses(localTasks); - if (localTasks) - taskManagerLocalModel.addTask(task); - else - taskManagerGlobalModel.addTask(task); + for (VSProcess process : processes) { + VSTask task = createTask.createTask(process, time, localTasks); + taskManager.addTask(task, VSTaskManager.PROGRAMMED); + + if (process.equals(selectedProcess)) { + if (localTasks) + taskManagerLocalModel.addTask(task); + else + taskManagerGlobalModel.addTask(task); + } + } return true; } @@ -881,6 +887,20 @@ public class VSSimulation extends VSFrame implements ActionListener { return simulationPanel.getProcess(processNum); } + private ArrayList<VSProcess> getConcernedProcesses(boolean localTasks) { + int processNum = localTasks + ? localPIDComboBox.getSelectedIndex() + : globalPIDComboBox.getSelectedIndex(); + + if (processNum == simulationPanel.getNumProcesses()) + return simulationPanel.getProcessesArray(); + + ArrayList<VSProcess> arr = new ArrayList<VSProcess>(); + arr.add(simulationPanel.getProcess(processNum)); + + return arr; + } + public void updateTaskManagerTable() { VSProcess process = getSelectedProcess(); boolean allProcesses = process == null; |
