diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-19 03:38:05 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-19 03:38:05 +0000 |
| commit | 500b15abeb493bc40b77b964aba1eb0186d79b9e (patch) | |
| tree | 0ac24f853288d5274406cfd3a72c81f8fd5ce52a /sources/simulator/VSSimulation.java | |
| parent | 88f7efd0ccc386db4672750eca227af40db04a13 (diff) | |
TaskManager improvements.
Diffstat (limited to 'sources/simulator/VSSimulation.java')
| -rw-r--r-- | sources/simulator/VSSimulation.java | 160 |
1 files changed, 109 insertions, 51 deletions
diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java index 0748e75..458d7be 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulation.java @@ -21,6 +21,8 @@ public class VSSimulation extends VSFrame implements ActionListener { private JCheckBox lamportActiveCheckBox; private JCheckBox vectorTimeActiveCheckBox; private JComboBox processesComboBox; + private JComboBox localPIDComboBox; + private JComboBox globalPIDComboBox; private int lastSelectedProcessNum; private ArrayList<String> localTextFields; private ArrayList<String> globalTextFields; @@ -63,7 +65,7 @@ public class VSSimulation extends VSFrame implements ActionListener { this.globalTextFields = new ArrayList<String>(); int numProcesses = simulationPanel.getNumProcesses(); - for (int i = 0; i < numProcesses; ++i) { + for (int i = 0; i <= numProcesses; ++i) { localTextFields.add("0000"); globalTextFields.add("0000"); } @@ -309,11 +311,23 @@ public class VSSimulation extends VSFrame implements ActionListener { editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.Y_AXIS)); processesComboBox = new JComboBox(); + localPIDComboBox = new JComboBox(); + globalPIDComboBox = new JComboBox(); + lastSelectedProcessNum = 0; int numProcesses = simulationPanel.getNumProcesses(); String processString = prefs.getString("lang.process"); - for (int i = 1; i <= numProcesses; ++i) - processesComboBox.addItem(processString + " " + i); + + for (int i = 0; i < numProcesses; ++i) { + int pid = simulationPanel.getProcess(i).getProcessID(); + processesComboBox.addItem(processString + " " + pid); + localPIDComboBox.addItem("PID: " + pid); + globalPIDComboBox.addItem("PID: " + pid); + } + + processesComboBox.addItem(prefs.getString("lang.processes.all")); + localPIDComboBox.addItem(prefs.getString("lang.all")); + globalPIDComboBox.addItem(prefs.getString("lang.all")); JPanel localPanel = createTaskLabel(VSTaskManagerTableModel.LOCAL); JPanel globalPanel = createTaskLabel(VSTaskManagerTableModel.GLOBAL); @@ -342,6 +356,9 @@ public class VSSimulation extends VSFrame implements ActionListener { localTextField.setBackground(Color.WHITE); globalTextField.setBackground(Color.WHITE); lastSelectedProcessNum = processNum; + + localPIDComboBox.setSelectedIndex(processNum); + globalPIDComboBox.setSelectedIndex(processNum); } }); @@ -448,47 +465,66 @@ public class VSSimulation extends VSFrame implements ActionListener { private class VSTaskManagerTableModel extends AbstractTableModel implements MouseListener { public static final boolean LOCAL = true; public static final boolean GLOBAL = false; + public static final boolean ALL_PROCESSES = true; + public static final boolean ONE_PROCESS = false; + public boolean allProcesses; private VSPriorityQueue<VSTask> tasks; private String columnNames[]; - private VSProcess process; + private int numColumns; + private JTable table; public VSTaskManagerTableModel(VSProcess process, boolean localTask) { - set(process, localTask); - columnNames = new String[2]; + set(process, localTask, ONE_PROCESS); + columnNames = new String[3]; columnNames[0]= prefs.getString("lang.time") + " (ms)"; - columnNames[1] = prefs.getString("lang.event"); + columnNames[1] = prefs.getString("lang.process.id"); + columnNames[2] = prefs.getString("lang.event"); + numColumns = 3; } - public void set(VSProcess process, boolean localTasks) { - this.process = process; - this.tasks = localTasks + public void setTable(JTable table) { + this.table = table; + } + + public void set(VSProcess process, boolean localTasks, boolean allProcesses) { + this.allProcesses = allProcesses; + + if (allProcesses) { + this.tasks = localTasks + ? taskManager.getLocalTasks() + : taskManager.getGlobalTasks(); + } else { + this.tasks = localTasks ? taskManager.getProcessLocalTasks(process) : taskManager.getProcessGlobalTasks(process); + } fireTableDataChanged(); } public String getColumnName(int col) { - if (col == 0) - return columnNames[0]; - return columnNames[1]; + return columnNames[col]; } public int getRowCount() { - return tasks.size(); + return tasks == null ? 0 : tasks.size(); } public int getColumnCount() { - return 2; + return numColumns; } public Object getValueAt(int row, int col) { VSTask task = tasks.get(row); - if (col == 0) - return task.getTaskTime(); - - return task.getEvent().getShortname(); + switch (col) { + case 0: + return task.getTaskTime(); + case 1: + return task.getProcess().getProcessID(); + } + + return task.getEvent().getShortname(); } public boolean isCellEditable(int row, int col) { @@ -504,7 +540,7 @@ public class VSSimulation extends VSFrame implements ActionListener { fireTableDataChanged(); } - private void removeRow(int row) { + private void removeTaskAtRow(int row) { VSTask task = tasks.get(row); tasks.remove(task); taskManager.removeTask(task); @@ -521,7 +557,7 @@ public class VSSimulation extends VSFrame implements ActionListener { public void actionPerformed(ActionEvent ae) { String actionCommand = ae.getActionCommand(); if (actionCommand.equals(prefs.getString("lang.remove"))) { - removeRow(row); + removeTaskAtRow(row); } } }; @@ -551,12 +587,18 @@ public class VSSimulation extends VSFrame implements ActionListener { taskManagerGlobalModel = model; JTable table = new JTable(model); + model.setTable(table); table.addMouseListener(model); TableColumn col = table.getColumnModel().getColumn(0); - col.setMaxWidth(75); + col.setMaxWidth(62); col.setResizable(false); + col = table.getColumnModel().getColumn(1); + col.setMaxWidth(23); + col.setResizable(false); + + col = table.getColumnModel().getColumn(2); col.sizeWidthToFit(); table.setBackground(Color.WHITE); @@ -578,8 +620,13 @@ public class VSSimulation extends VSFrame implements ActionListener { panel1.add(textField); panel1.add(new JLabel(" ms ")); - final JComboBox comboBox = new JComboBox(); + if (localTasks) + panel1.add(localPIDComboBox); + else + panel1.add(globalPIDComboBox); + + final JComboBox comboBox = new JComboBox(); JButton takeoverButton = new JButton(prefs.getString("lang.takeover")); takeoverButton.addActionListener(new ActionListener() { private boolean isRed; @@ -655,16 +702,38 @@ public class VSSimulation extends VSFrame implements ActionListener { comboBox.setMaximumRowCount(15); comboBox.addItem("-- " + prefs.getString("lang.events.process") + " --"); - if (flag) createTasks.add(null); + if (flag) + createTasks.add(null); for (String eventClassname : eventClassnames) { String eventShortname = VSRegisteredEvents.getShortname(eventClassname); comboBox.addItem(eventShortname); - if (flag) createTasks.add(new VSCreateTask(eventClassname)); + if (flag) + createTasks.add(new VSCreateTask(eventClassname)); + } + + comboBox.addItem("-- " + prefs.getString("lang.requests") + " --"); + if (flag) + createTasks.add(null); + String clientrequest = prefs.getString("lang.clientrequest.start"); + + for (String eventClassname : eventClassnames) { + String eventShortname = VSRegisteredEvents.getShortname(eventClassname) + + " " + clientrequest; + + comboBox.addItem(eventShortname); + + if (flag) { + VSCreateTask createTask = new VSCreateTask(eventClassname); + createTask.setShortname(eventShortname); + createTask.isClientRequest(true); + createTasks.add(createTask); + } } comboBox.addItem("-- " + prefs.getString("lang.events.protocol") + " --"); - if (flag) createTasks.add(null); + if (flag) + createTasks.add(null); eventClassnames = VSRegisteredEvents.getProtocolClassnames(); String activate = prefs.getString("lang.activate"); @@ -721,24 +790,6 @@ public class VSSimulation extends VSFrame implements ActionListener { } } - comboBox.addItem("-- " + prefs.getString("lang.requests") + " --"); - if (flag) createTasks.add(null); - String clientrequest = prefs.getString("lang.clientrequest.start"); - - for (String eventClassname : eventClassnames) { - String eventShortname = VSRegisteredEvents.getShortname(eventClassname) - + " " + clientrequest; - - comboBox.addItem(eventShortname); - - if (flag) { - VSCreateTask createTask = new VSCreateTask(eventClassname); - createTask.setShortname(eventShortname); - createTask.isClientRequest(true); - createTasks.add(createTask); - } - } - panel.add(comboBox); panel.add(panel1); } @@ -814,20 +865,27 @@ public class VSSimulation extends VSFrame implements ActionListener { } private int getSelectedProcessNum() { - String string = (String) processesComboBox.getSelectedItem(); - int cutLen = prefs.getString("lang.process").length() + 1; - string = string.substring(cutLen); - return Integer.parseInt(string) - 1; + try { + String string = (String) processesComboBox.getSelectedItem(); + int cutLen = prefs.getString("lang.process").length() + 1; + string = string.substring(cutLen); + return Integer.parseInt(string) - 1; + } catch (NumberFormatException e) { + } + + return simulationPanel.getNumProcesses(); } private VSProcess getSelectedProcess() { - return simulationPanel.getProcess(getSelectedProcessNum()); + int processNum = getSelectedProcessNum(); + return simulationPanel.getProcess(processNum); } public void updateTaskManagerTable() { VSProcess process = getSelectedProcess(); - taskManagerLocalModel.set(process, VSTaskManagerTableModel.LOCAL); - taskManagerGlobalModel.set(process, VSTaskManagerTableModel.GLOBAL); + boolean allProcesses = process == null; + taskManagerLocalModel.set(process, VSTaskManagerTableModel.LOCAL, allProcesses); + taskManagerGlobalModel.set(process, VSTaskManagerTableModel.GLOBAL, allProcesses); } public void finish() { |
