summaryrefslogtreecommitdiff
path: root/sources/simulator/VSSimulator.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/simulator/VSSimulator.java')
-rw-r--r--sources/simulator/VSSimulator.java1537
1 files changed, 0 insertions, 1537 deletions
diff --git a/sources/simulator/VSSimulator.java b/sources/simulator/VSSimulator.java
deleted file mode 100644
index fdcf40d..0000000
--- a/sources/simulator/VSSimulator.java
+++ /dev/null
@@ -1,1537 +0,0 @@
-/*
- * VS-Simulator (http://vs-sim.buetow.org)
- * Copyright (c) 2008 - 2009 by Dipl.-Inform. (FH) Paul C. Buetow
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package simulator;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.table.*;
-
-import core.*;
-import events.*;
-import exceptions.*;
-import prefs.*;
-import prefs.editors.*;
-import serialize.*;
-
-/**
- * The class VSSimulator, an object of this class represents a whole simulator.
- * It may be, that several parallel simulators exist. They are independent
- * fron each other.
- *
- * @author Paul C. Buetow
- */
-public class VSSimulator extends JPanel implements VSSerializable {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The global text fields. */
- private ArrayList<String> globalTextFields;
-
- /** The local text fields. */
- private ArrayList<String> localTextFields;
-
- /** The create tasks array list. */
- private ArrayList<VSCreateTask> createTasks;
-
- /** The filter active check box. */
- private JCheckBox filterActiveCheckBox;
-
- /** The lamport active check box. */
- private JCheckBox lamportActiveCheckBox;
-
- /** The vector time active check box. */
- private JCheckBox vectorTimeActiveCheckBox;
-
- /** The global pid combo box. */
- private JComboBox globalPIDComboBox;
-
- /** The local pid combo box. */
- private JComboBox localPIDComboBox;
-
- /** The processes combo box. */
- private JComboBox processesComboBox;
-
- /** The local add panel. */
- private JPanel localAddPanel;
-
- /** The local panel. */
- private JPanel localPanel;
-
- /** The loging panel. */
- private JPanel logingPanel;
-
- /** The split pane1. */
- private JSplitPane splitPane1;
-
- /** The split pane h. */
- private JSplitPane splitPaneH;
-
- /** The split pane v. */
- private JSplitPane splitPaneV;
-
- /** The tabbed pane. */
- private JTabbedPane tabbedPane;
-
- /** The loging area. */
- private JTextArea logingArea;
-
- /** The filter text field. */
- private JTextField filterTextField;
-
- /** The global text field. */
- private JTextField globalTextField;
-
- /** The local text field. */
- private JTextField localTextField;
-
- /** The thread. */
- private Thread thread;
-
- /** The loging. */
- private VSLogging loging;
-
- /** The menu item states. */
- private VSMenuItemStates menuItemStates;
-
- /** The prefs. */
- private VSPrefs prefs;
-
- /** The simulator canvas. */
- private VSSimulatorVisualization simulatorVisualization;
-
- /** The simulator frame. */
- private VSSimulatorFrame simulatorFrame;
-
- /** The task manager. */
- private VSTaskManager taskManager;
-
- /** The task manager global model. */
- private VSTaskManagerTableModel taskManagerGlobalModel;
-
- /** The task manager local model. */
- private VSTaskManagerTableModel taskManagerLocalModel;
-
- /** The task manager global editor. */
- private VSTaskManagerCellEditor taskManagerGlobalEditor;
-
- /** The task manager local editor. */
- private VSTaskManagerCellEditor taskManagerLocalEditor;
-
- /** The last selected process num. */
- private int lastSelectedProcessNum;
-
- /** The last expert state. */
- private boolean lastExpertState;
-
- /** The simulator counter. */
- private static int simulatorCounter;
-
- /** The simulator num. */
- private static int simulatorNum;
-
- /**
- * The class VSTaskManagerTableModel, an object of this class handles
- * the task manager's JTable.
- */
- @SuppressWarnings("unchecked")
- private class VSTaskManagerTableModel extends AbstractTableModel
- implements MouseListener {
- /** the serial version uid */
- private static final long serialVersionUID = 1l;
-
- /** The Constant LOCAL. */
- public static final boolean LOCAL = true;
-
- /** The Constant GLOBAL. */
- public static final boolean GLOBAL = false;
-
- /** The Constant ALL_PROCESSES. */
- public static final boolean ALL_PROCESSES = true;
-
- /** The Constant ONE_PROCESS. */
- public static final boolean ONE_PROCESS = false;
-
- /** The all processes. */
- public boolean allProcesses;
-
- /** The tasks. */
- private ArrayList<VSTask> tasks;
-
- /** The column names. */
- private String columnNames[];
-
- /** The num columns. */
- private int numColumns;
-
- /** The table. */
- //private JTable table;
-
- /** The editor. */
- //private VSTaskManagerCellEditor editor;
-
- /**
- * Instantiates a new VSTaskManagerTableModel object
- *
- * @param process the process
- * @param localTask true, if this table manages the local task. false,
- * if this table manages the global tasks.
- */
- public VSTaskManagerTableModel(VSInternalProcess process,
- boolean localTask) {
- tasks = new ArrayList<VSTask>();
- set(process, localTask, ONE_PROCESS);
- columnNames = new String[3];
- columnNames[0]= prefs.getString("lang.en.time") + " (ms)";
- columnNames[1] = prefs.getString("lang.en.process.id");
- columnNames[2] = prefs.getString("lang.en.event");
- numColumns = 3;
- }
-
- /**
- * Sets the table.
- *
- * @param table the table
- */
- public void setTable(JTable table) {
- /* Maybe needed for future usage */
- //this.table = table;
- }
-
- /**
- * Sets the editor.
- *
- * @param editor the editor
- */
- public void setEditor(VSTaskManagerCellEditor editor) {
- /* Maybe needed for future usage */
- //this.editor = editor;
- }
-
- /**
- * Sets new values.
- *
- * @param process the process
- * @param localTasks true, if this table manages the local tasks. false
- * if this table manages the global tasks.
- * @param allProcesses true, if this table shows tasks of all processes.
- * false, if this table only shows tasks of the specified process.
- */
- public void set(VSInternalProcess 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);
- }
-
- Collections.sort(tasks);
- fireTableDataChanged();
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.AbstractTableModel#getColumnName(int)
- */
- public String getColumnName(int col) {
- return columnNames[col];
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.TableModel#getRowCount()
- */
- public int getRowCount() {
- return tasks == null ? 0 : tasks.size();
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.TableModel#getColumnCount()
- */
- public int getColumnCount() {
- return numColumns;
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.TableModel#getValueAt(int, int)
- */
- public Object getValueAt(int row, int col) {
- VSTask task = tasks.get(row);
-
- switch (col) {
- case 0:
- return task.getTaskTime();
- case 1:
- return task.getProcess().getProcessID();
- }
-
- return task.getEvent().getShortname();
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
- */
- public boolean isCellEditable(int row, int col) {
- if (col == 2)
- return false;
-
- return true;
- }
-
- /* (non-Javadoc)
- * @see javax.swing.table.AbstractTableModel#setValueAt(
- * java.lang.Object, int, int)
- */
- public void setValueAt(Object value, int row, int col) {
- }
-
- /**
- * Adds the task.
- *
- * @param task the task
- */
- public void addTask(VSTask task) {
- tasks.add(task);
- Collections.sort(tasks);
- fireTableDataChanged();
- }
-
- /**
- * Removes the task at a specified row.
- *
- * @param row the row
- * @return The removed task
- */
- public VSTask removeTaskAtRow(int row) {
- VSTask task = tasks.get(row);
- tasks.remove(task);
- taskManager.removeTask(task);
- fireTableDataChanged();
- return task;
- }
-
- /**
- * Checks if a specific row exists
- *
- * @param row the row
- * @return True, if the row exists. False, if not
- */
- public boolean rowExists(int row) {
- if (row < 0)
- return false;
-
- if (tasks.size() <= row)
- return false;
-
- return true;
- }
-
- /**
- * Gets the task at a specified row.
- *
- * @param row the row
- * @return The task
- */
- public VSTask getTaskAtRow(int row) {
- return tasks.get(row);
- }
-
- /**
- * Gets the index of a specific task
- *
- * @param task The task
- * @return The index of the task
- */
- public int getIndexOf(VSTask task) {
- return tasks.indexOf(task);
- }
-
- /**
- * Copies the tasks at a specified rows.
- *
- * @param rows the rows
- */
- private void copyTasksAtRows(int rows[]) {
- ArrayList<VSTask> copiedTasks = new ArrayList<VSTask>();
-
- for (int row : rows)
- /* Use the copy constructor */
- copiedTasks.add(new VSTask(tasks.get(row)));
-
- for (VSTask task : copiedTasks) {
- taskManager.addTask(task, VSTaskManager.PROGRAMMED);
- addTask(task);
- }
-
- fireTableDataChanged();
- }
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mouseClicked(
- * java.awt.event.MouseEvent)
- */
- public void mouseClicked(MouseEvent me) {
- final JTable source = (JTable) me.getSource();
- //final int row = source.rowAtPoint(me.getPoint());
- //final int col = source.columnAtPoint(me.getPoint());
-
- if (SwingUtilities.isRightMouseButton(me)) {
- ActionListener actionListener = new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- String command = ae.getActionCommand();
- int rows[] = source.getSelectedRows();
-
- if (command.equals(prefs.getString("lang.en.remove"))) {
- for (int i = rows.length - 1; i >= 0; --i)
- removeTaskAtRow(rows[i]);
-
- } else if (command.equals(
- prefs.getString("lang.en.copy"))) {
- copyTasksAtRows(rows);
- }
- }
- };
-
- JPopupMenu popup = new JPopupMenu();
- JMenuItem item = new JMenuItem(prefs.getString("lang.en.remove"));
- item.addActionListener(actionListener);
- popup.add(item);
-
- item = new JMenuItem(prefs.getString("lang.en.copy"));
- item.addActionListener(actionListener);
- popup.add(item);
-
- popup.show(me.getComponent(), me.getX(), me.getY());
- }
- }
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mouseEntered(
- * java.awt.event.MouseEvent)
- */
- public void mouseEntered(MouseEvent me) { }
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mouseExited(
- * java.awt.event.MouseEvent)
- */
- public void mouseExited(MouseEvent me) { }
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mousePressed(
- * java.awt.event.MouseEvent)
- */
- public void mousePressed(MouseEvent me) { }
-
- /* (non-Javadoc)
- * @see java.awt.event.MouseListener#mouseReleased(
- * java.awt.event.MouseEvent)
- */
- public void mouseReleased(MouseEvent me) { }
- }
-
- /**
- * The class VSTaskManagerCellEditor, an object of this class handles
- * the task manager's JTable editor
- */
- private class VSTaskManagerCellEditor extends AbstractCellEditor
- implements TableCellEditor {
- /** the serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The JTable model */
- private VSTaskManagerTableModel model;
-
- /**
- * Instantiates a new VSTaskManagerCellEditor object.
- *
- * @param model the model
- */
- public VSTaskManagerCellEditor(VSTaskManagerTableModel model) {
- this.model = model;
- model.setEditor(this);
- }
-
- /**
- * Stops editing
- */
- public void stopEditing() {
- fireEditingStopped();
- }
-
- /**
- /* (non-Javadoc)
- * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(
- * javax.swing.JTable, java.lang.Object, boolean, int, int)
- */
- public Component getTableCellEditorComponent(final JTable table,
- Object object,
- boolean isSelected,
- final int row,
- final int col) {
- switch (col) {
- case 0:
- Long val = (Long) model.getValueAt(row, col);
- final JTextField valField = new JTextField(val.toString());
- valField.setBackground(Color.WHITE);
- valField.setBorder(null);
- valField.addActionListener(new ActionListener() {
- private boolean isRed = false;
- public void actionPerformed(ActionEvent ae) {
- try {
- Long val = Long.valueOf(valField.getText());
- if (val.longValue() < 0)
- throw new VSNegativeNumberException();
- VSTask task = model.removeTaskAtRow(row);
- task.setTaskTime(val.longValue());
- taskManager.addTask(task, VSTaskManager.PROGRAMMED);
- model.addTask(task);
- if (isRed) {
- valField.setBackground(Color.WHITE);
- isRed = false;
- }
- int index = model.getIndexOf(task);
- ListSelectionModel selectionModel =
- table.getSelectionModel();
- selectionModel.setSelectionInterval(index, index);
- fireEditingStopped();
-
- } catch (NumberFormatException exc) {
- valField.setBackground(Color.RED);
- isRed = true;
-
- } catch (VSNegativeNumberException exc) {
- valField.setBackground(Color.RED);
- isRed = true;
- }
- }
- });
- return valField;
- case 1:
- Integer current[] = { (Integer) model.getValueAt(row, col) };
- final JComboBox comboBox = new JComboBox(current);
-
- Integer pids[] = simulatorVisualization.getProcessIDs();
- for (Integer pid : pids)
- comboBox.addItem(pid);
-
- comboBox.setSelectedIndex(0);
- comboBox.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- int index = comboBox.getSelectedIndex() - 1;
- if (model.rowExists(row)) {
- VSTask task = model.removeTaskAtRow(row);
- VSInternalProcess process =
- simulatorVisualization.getProcess(index);
- task.setProcess(process);
- taskManager.addTask(task, VSTaskManager.PROGRAMMED);
- if (allProcessesAreSelected())
- model.addTask(task);
- }
-
- fireEditingStopped();
- }
- });
-
- return comboBox;
- case 2:
- break;
- }
-
- return null;
- }
-
- /* (non-Javadoc)
- * @see javax.swing.CellEditor#getCellEditorValue()
- */
- public Object getCellEditorValue() {
- return new String("");
- }
- }
-
-
- /**
- * Instantiates a new VSSimulator object.
- *
- * @param prefs the prefs
- * @param simulatorFrame the simulator frame
- */
- public VSSimulator(VSPrefs prefs, VSSimulatorFrame simulatorFrame) {
- init(prefs, simulatorFrame);
- }
-
- /**
- * inits the VSSimulator object.
- *
- * @param prefs the prefs
- * @param simulatorFrame the simulator frame
- */
- private void init(VSPrefs prefs, VSSimulatorFrame simulatorFrame) {
- this.prefs = prefs;
- this.simulatorFrame = simulatorFrame;
- this.simulatorNum = ++simulatorCounter;
- this.menuItemStates = new VSMenuItemStates(false, false, false, true);
- this.localTextFields = new ArrayList<String>();
- this.globalTextFields = new ArrayList<String>();
-
- /* Not null if init has been called from the deserialization */
- if (this.loging == null)
- this.loging = new VSLogging();
-
- loging.log(prefs.getString("lang.en.simulator.new"));
-
- fillContentPane();
- updateFromPrefs();
-
- splitPaneH.setDividerLocation(
- prefs.getInteger("div.window.splitsize"));
-
- splitPaneV.setDividerLocation(
- prefs.getInteger("div.window.ysize")
- - prefs.getInteger("div.window.logsize"));
-
- splitPane1.setDividerLocation((int) (getPaintSize()/2) - 20);
-
- int numProcesses = simulatorVisualization.getNumProcesses();
- for (int i = 0; i <= numProcesses; ++i) {
- localTextFields.add("0000");
- globalTextFields.add("0000");
- }
-
- processesComboBox.setSelectedIndex(0);
- localPIDComboBox.setSelectedIndex(0);
- globalPIDComboBox.setSelectedIndex(0);
-
- thread = new Thread(simulatorVisualization);
- thread.start();
- }
-
- /**
- * Fills the content pane.
- */
- private void fillContentPane() {
- logingArea = loging.getLoggingArea();
-
- splitPaneH = new JSplitPane();
- splitPaneV = new JSplitPane();
-
- /* Not null if init has been called from the deserialization */
- if (this.simulatorVisualization == null)
- simulatorVisualization = new VSSimulatorVisualization(
- prefs, this, loging);
-
- taskManager = simulatorVisualization.getTaskManager();
- loging.setSimulatorCanvas(simulatorVisualization);
-
- JPanel canvasPanel = new JPanel();
- canvasPanel.setLayout(new GridLayout(1, 1, 3, 3));
- canvasPanel.add(simulatorVisualization);
- canvasPanel.setMinimumSize(new Dimension(0, 0));
- canvasPanel.setMaximumSize(new Dimension(0, 0));
-
- logingPanel = new JPanel(new BorderLayout());
- logingPanel.add(new JScrollPane(logingArea), BorderLayout.CENTER);
- logingPanel.add(createToolsPanel(), BorderLayout.SOUTH);
- logingPanel.setPreferredSize(new Dimension(200, 1));
-
- splitPaneH.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
- splitPaneH.setLeftComponent(createProcessPanel());
- splitPaneH.setRightComponent(canvasPanel);
- splitPaneH.setContinuousLayout(true);
- splitPaneH.setOneTouchExpandable(true);
-
- splitPaneV.setOrientation(JSplitPane.VERTICAL_SPLIT);
- splitPaneV.setTopComponent(splitPaneH);
- splitPaneV.setBottomComponent(logingPanel);
- splitPaneV.setContinuousLayout(true);
-
- this.add(splitPaneV);
- }
-
- /**
- * Creates the tools panel.
- *
- * @return the panel
- */
- private JPanel createToolsPanel() {
- JPanel toolsPanel = new JPanel();
- boolean expertMode = prefs.getBoolean("sim.mode.expert");
-
- toolsPanel.setLayout(new BoxLayout(toolsPanel, BoxLayout.X_AXIS));
- JCheckBox expertActiveCheckBox =
- new JCheckBox(prefs.getString("lang.en.mode.expert"));
-
- expertActiveCheckBox.setSelected(expertMode);
- expertActiveCheckBox.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- boolean newState = buttonModel.isSelected();
- if (lastExpertState != newState) {
- lastExpertState = newState;
- prefs.setBoolean("sim.mode.expert", newState);
- fireExpertModeChanged();
- }
- }
- });
- toolsPanel.add(expertActiveCheckBox);
-
- if (expertMode) {
- lamportActiveCheckBox = new JCheckBox(
- prefs.getString("lang.en.time.lamport"));
- lamportActiveCheckBox.setSelected(false);
- lamportActiveCheckBox.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- simulatorVisualization.showLamport(
- buttonModel.isSelected());
- if (buttonModel.isSelected())
- vectorTimeActiveCheckBox.setSelected(false);
- }
- });
- toolsPanel.add(lamportActiveCheckBox);
-
- vectorTimeActiveCheckBox = new JCheckBox(
- prefs.getString("lang.en.time.vector"));
- vectorTimeActiveCheckBox.setSelected(false);
- vectorTimeActiveCheckBox.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- simulatorVisualization.showVectorTime(
- buttonModel.isSelected());
- if (buttonModel.isSelected())
- lamportActiveCheckBox.setSelected(false);
- }
- });
- toolsPanel.add(vectorTimeActiveCheckBox);
-
- JCheckBox antiAliasing = new JCheckBox(
- prefs.getString("lang.en.antialiasing"));
- antiAliasing.setSelected(false);
- antiAliasing.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- simulatorVisualization.isAntiAliased(
- buttonModel.isSelected());
- }
- });
- toolsPanel.add(antiAliasing);
- }
-
- JCheckBox logingActiveCheckBox = new JCheckBox(
- prefs.getString("lang.en.loging.active"));
- logingActiveCheckBox.setSelected(true);
- logingActiveCheckBox.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- loging.isPaused(!buttonModel.isSelected());
- }
- });
- toolsPanel.add(logingActiveCheckBox);
-
- if (expertMode) {
- filterActiveCheckBox = new JCheckBox(
- prefs.getString("lang.en.filter"));
- filterActiveCheckBox.setSelected(false);
- filterActiveCheckBox.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- AbstractButton abstractButton =
- (AbstractButton) ce.getSource();
- ButtonModel buttonModel = abstractButton.getModel();
- loging.isFiltered(buttonModel.isSelected());
- if (buttonModel.isSelected())
- loging.setFilterText(filterTextField.getText());
- }
- });
- toolsPanel.add(filterActiveCheckBox);
-
- filterTextField = new JTextField();
- filterTextField.getDocument().addDocumentListener(
- new DocumentListener() {
- public void insertUpdate(DocumentEvent de) {
- loging.setFilterText(filterTextField.getText());
- }
- public void removeUpdate(DocumentEvent de) {
- loging.setFilterText(filterTextField.getText());
- }
- public void changedUpdate(DocumentEvent de) {
- loging.setFilterText(filterTextField.getText());
- }
- });
- toolsPanel.add(filterTextField);
-
- JButton clearButton = new JButton(
- prefs.getString("lang.en.loging.clear"));
- clearButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- String command = ae.getActionCommand();
- if (command.equals(
- prefs.getString("lang.en.loging.clear"))) {
- loging.clear();
- }
- }
- });
- toolsPanel.add(clearButton);
- }
-
- return toolsPanel;
- }
-
- /**
- * Creates the process panel.
- *
- * @return the panel
- */
- private JPanel createProcessPanel() {
- JPanel editPanel = new JPanel(new GridBagLayout());
- boolean expertMode = prefs.getBoolean("sim.mode.expert");
- editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.Y_AXIS));
-
- processesComboBox = new JComboBox();
- localPIDComboBox = new JComboBox();
- globalPIDComboBox = new JComboBox();
-
- lastSelectedProcessNum = 0;
- int numProcesses = simulatorVisualization.getNumProcesses();
- String processString = prefs.getString("lang.en.process");
-
- for (int i = 0; i < numProcesses; ++i) {
- int pid = simulatorVisualization.getProcess(i).getProcessID();
- processesComboBox.addItem(processString + " " + pid);
- localPIDComboBox.addItem("PID: " + pid);
- globalPIDComboBox.addItem("PID: " + pid);
- }
-
- processesComboBox.addItem(prefs.getString("lang.en.processes.all"));
- localPIDComboBox.addItem(prefs.getString("lang.en.all"));
- globalPIDComboBox.addItem(prefs.getString("lang.en.all"));
-
- tabbedPane = new JTabbedPane(JTabbedPane.TOP,
- JTabbedPane.WRAP_TAB_LAYOUT);
- localPanel = createTaskLabel(VSTaskManagerTableModel.LOCAL);
- JPanel globalPanel = createTaskLabel(VSTaskManagerTableModel.GLOBAL);
-
- splitPane1 = new JSplitPane();
- splitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
- splitPane1.setTopComponent(localPanel);
- splitPane1.setBottomComponent(globalPanel);
- splitPane1.setOneTouchExpandable(true);
-
- if (expertMode)
- tabbedPane.addTab(prefs.getString("lang.en.events"), splitPane1);
-
- else
- tabbedPane.addTab(prefs.getString("lang.en.events"), localPanel);
-
- processesComboBox.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- localTextFields.set(lastSelectedProcessNum,
- localTextField.getText());
- globalTextFields.set(lastSelectedProcessNum,
- globalTextField.getText());
- updateTaskManagerTable();
-
- int processNum = getSelectedProcessNum();
- localTextField.setText(localTextFields.get(processNum));
- globalTextField.setText(globalTextFields.get(processNum));
- localTextField.setBackground(Color.WHITE);
- globalTextField.setBackground(Color.WHITE);
- lastSelectedProcessNum = processNum;
-
- localPIDComboBox.setSelectedIndex(processNum);
- globalPIDComboBox.setSelectedIndex(processNum);
-
- if (processNum == simulatorVisualization.getNumProcesses()) {
- tabbedPane.setEnabledAt(1, false);
- if (tabbedPane.getSelectedIndex() == 1)
- tabbedPane.setSelectedIndex(0);
-
- } else if (!tabbedPane.isEnabledAt(1)) {
- tabbedPane.setEnabledAt(1, true);
- }
-
- if (processNum != simulatorVisualization.getNumProcesses()) {
- VSInternalProcess process = getSelectedProcess();
- VSProcessEditor processEditor =
- new VSProcessEditor(prefs, process);
- tabbedPane.setComponentAt(1,
- processEditor.getContentPane());
- }
- }
- });
-
- tabbedPane.add(prefs.getString("lang.en.variables"), null);
-
- editPanel.add(processesComboBox);
- editPanel.add(tabbedPane);
-
- return editPanel;
- }
-
- /**
- * Creates the label panel.
- *
- * @param text the text
- *
- * @return the panel
- */
- private JPanel createLabelPanel(String text) {
- JPanel panel = new JPanel();
- JLabel label = new JLabel(text);
- panel.add(label);
-
- return panel;
- }
-
- /**
- * Creates the task label.
- *
- * @param localTasks true, if the local task label has to get created.
- * false, if the global task label has to get created.
- *
- * @return the panel
- */
- private JPanel createTaskLabel(boolean localTasks) {
- JPanel panel = new JPanel(new GridBagLayout());
- panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
-
- if (localTasks)
- panel.add(createLabelPanel(prefs.getString("lang.en.timed.local")));
- else
- panel.add(createLabelPanel(prefs.getString("lang.en.timed.global")));
-
- JScrollPane scrollPane = new JScrollPane(createTaskTable(localTasks));
- panel.add(scrollPane);
-
- if (localTasks)
- localAddPanel = initAddPanel(panel, localTasks);
- else
- /*globalAddPanel = */ initAddPanel(panel, localTasks);
-
- return panel;
- }
-
- /**
- * Creates the task table.
- *
- * @param localTasks true, if the local task label has to get created.
- * false, if the global task label has to get created.
- *
- * @return the table
- */
- private JTable createTaskTable(boolean localTasks) {
- VSInternalProcess process = getSelectedProcess();
- VSTaskManagerTableModel model =
- new VSTaskManagerTableModel(process, localTasks);
- VSTaskManagerCellEditor cellEditor =
- new VSTaskManagerCellEditor(model);
-
- if (localTasks) {
- taskManagerLocalModel = model;
- taskManagerLocalEditor = cellEditor;
- } else {
- taskManagerGlobalModel = model;
- taskManagerGlobalEditor = cellEditor;
- }
-
- JTable table = new JTable(model);
- table.setDefaultEditor(Object.class, cellEditor);
- model.setTable(table);
-
- table.addMouseListener(model);
-
- TableColumn col = table.getColumnModel().getColumn(0);
- col.setMaxWidth(62);
- col.setResizable(false);
-
- col = table.getColumnModel().getColumn(1);
- col.setMaxWidth(40);
- col.setResizable(false);
-
- col = table.getColumnModel().getColumn(2);
- col.sizeWidthToFit();
- table.setBackground(Color.WHITE);
-
- return table;
- }
-
- /**
- * Inits the add panel.
- *
- * @param panel the panel
- * @param localTasks true, if the local task label has to get created.
- * false, if the global task label has to get created.
- *
- * @return the panel
- */
- private JPanel initAddPanel(JPanel panel, final boolean localTasks) {
- JPanel addPanel = new JPanel();
- addPanel.setLayout(new BoxLayout(addPanel, BoxLayout.X_AXIS));
- boolean expertMode = prefs.getBoolean("sim.mode.expert");
-
- final JTextField textField = new JTextField();
- if (localTasks)
- localTextField = textField;
- else
- globalTextField = textField;
-
- textField.setText("0000");
- textField.setBackground(Color.WHITE);
- addPanel.add(textField);
-
- addPanel.add(new JLabel(" ms "));
-
- if (localTasks) {
- if (expertMode)
- addPanel.add(localPIDComboBox);
- } else {
- addPanel.add(globalPIDComboBox);
- }
-
- final JComboBox comboBox = new JComboBox();
- JButton takeoverButton = new JButton(prefs.getString("lang.en.takeover"));
- takeoverButton.setMnemonic(prefs.getInteger("keyevent.takeover"));
- takeoverButton.addActionListener(new ActionListener() {
- private boolean isRed;
- public void actionPerformed(ActionEvent ae) {
- String textValue = textField.getText();
- Long longValue = null;
-
- try {
- longValue = Long.valueOf(textValue);
-
- if (longValue.longValue() < 0) {
- makeRed();
- return;
- }
-
- if (isRed) {
- makeWhite();
- }
-
- } catch (NumberFormatException e) {
- makeRed();
- }
-
- if (longValue == null)
- return;
-
- if (takeover(longValue.longValue())) {
- if (isRed)
- makeWhite();
-
- } else {
- makeRed();
- }
- }
-
- private void makeWhite() {
- textField.setBackground(Color.WHITE);
- isRed = false;
- }
-
- private void makeRed() {
- textField.setBackground(Color.RED);
- isRed = true;
- }
-
- private boolean takeover(long time) {
- VSInternalProcess selectedProcess = getSelectedProcess();
- int index = comboBox.getSelectedIndex();
- VSCreateTask createTask = createTasks.get(index);
-
- if (createTask.isDummy())
- return false;
-
- ArrayList<VSInternalProcess> processes =
- getConcernedProcesses(localTasks);
-
- for (VSInternalProcess process : processes) {
- VSTask task = createTask.createTask(process, time,
- localTasks);
- taskManager.addTask(task, VSTaskManager.PROGRAMMED);
-
- if (selectedProcess == null ||
- process.equals(selectedProcess)) {
- if (localTasks)
- taskManagerLocalModel.addTask(task);
- else
- taskManagerGlobalModel.addTask(task);
- }
- }
-
- return true;
- }
- });
-
- addPanel.add(takeoverButton);
-
- boolean createTaskFlag = createTasks == null;
- if (createTaskFlag) createTasks = new ArrayList<VSCreateTask>();
-
- Vector<String> eventClassnames =
- VSRegisteredEvents.getNonProtocolClassnames();
-
- comboBox.setMaximumRowCount(20);
- String menuText = prefs.getString("lang.en.events.process");
- comboBox.addItem("----- " + menuText + " -----");
-
- if (createTaskFlag)
- createTasks.add(new VSCreateTask(menuText));
-
- for (String eventClassname : eventClassnames) {
- String eventShortname =
- VSRegisteredEvents.getShortnameByClassname(eventClassname);
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag)
- createTasks.add(new VSCreateTask(menuText, eventClassname));
- }
-
- String activate = prefs.getString("lang.en.activate");
- String client = prefs.getString("lang.en.client");
- String clientRequest = prefs.getString("lang.en.clientrequest.start");
- String deactivate = prefs.getString("lang.en.deactivate");
- String server = prefs.getString("lang.en.server");
- String serverRequest = prefs.getString("lang.en.serverrequest.start");
- String protocol = prefs.getString("lang.en.protocol");
-
- String protocolEventClassname = "events.internal.VSProtocolEvent";
- eventClassnames = VSRegisteredEvents.getProtocolClassnames();
-
- for (String eventClassname : eventClassnames) {
- String eventShortname_ =
- VSRegisteredEvents.getShortnameByClassname(eventClassname);
- String eventShortname = null;
-
- menuText = eventShortname_ + " " + protocol;
- comboBox.addItem("----- " + menuText + " -----");
-
- if (createTaskFlag)
- createTasks.add(new VSCreateTask(menuText));
-
- if (VSRegisteredEvents.isOnServerStartProtocol(eventClassname))
- eventShortname = eventShortname_ + " " + serverRequest;
- else
- eventShortname = eventShortname_ + " " + clientRequest;
-
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag) {
- VSCreateTask createTask = new VSCreateTask(menuText,
- eventClassname);
- createTask.setShortname(eventShortname);
- createTask.isRequest(true);
- createTasks.add(createTask);
- }
-
- eventShortname = eventShortname_ + " " + client + " " + activate;
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag) {
- VSCreateTask createTask =
- new VSCreateTask(menuText, protocolEventClassname);
- createTask.isProtocolActivation(true);
- createTask.isClientProtocol(true);
- createTask.setProtocolClassname(eventClassname);
- createTask.setShortname(eventShortname);
- createTasks.add(createTask);
- }
-
- eventShortname = eventShortname_ + " " + client + " " + deactivate;
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag) {
- VSCreateTask createTask =
- new VSCreateTask(menuText, protocolEventClassname);
- createTask.isProtocolDeactivation(true);
- createTask.isClientProtocol(true);
- createTask.setProtocolClassname(eventClassname);
- createTask.setShortname(eventShortname);
- createTasks.add(createTask);
- }
-
- eventShortname = eventShortname_ + " " + server + " " + activate;
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag) {
- VSCreateTask createTask =
- new VSCreateTask(menuText, protocolEventClassname);
- createTask.isProtocolActivation(true);
- createTask.isClientProtocol(false);
- createTask.setProtocolClassname(eventClassname);
- createTask.setShortname(eventShortname);
- createTasks.add(createTask);
- }
-
- eventShortname = eventShortname_ + " " + server + " " + deactivate;
- menuText = eventShortname;
- comboBox.addItem(menuText);
- if (createTaskFlag) {
- VSCreateTask createTask =
- new VSCreateTask(menuText, protocolEventClassname);
- createTask.isProtocolDeactivation(true);
- createTask.isClientProtocol(false);
- createTask.setProtocolClassname(eventClassname);
- createTask.setShortname(eventShortname);
- createTasks.add(createTask);
- }
- }
-
- panel.add(comboBox);
- panel.add(addPanel);
-
- return addPanel;
- }
-
- /**
- * Gets the split size.
- *
- * @return the split size
- */
- public synchronized int getSplitSize() {
- return splitPaneH.getDividerLocation();
- }
-
- /**
- * Gets the paint size.
- *
- * @return the paint size
- */
- public synchronized int getPaintSize() {
- return splitPaneV.getDividerLocation();
- }
-
- /**
- * Gets the selected process num.
- *
- * @return the selected process num
- */
- private int getSelectedProcessNum() {
- return processesComboBox.getSelectedIndex();
- }
-
- /**
- * Checks if 'all processes' is selected
- *
- * @return True, if 'all processes' are selected, else false
- */
- private boolean allProcessesAreSelected() {
- return processesComboBox.getSelectedIndex() + 1
- == processesComboBox.getItemCount();
- }
-
- /**
- * Gets the selected process.
- *
- * @return the selected process
- */
- private VSInternalProcess getSelectedProcess() {
- int processNum = getSelectedProcessNum();
- return simulatorVisualization.getProcess(processNum);
- }
-
- /**
- * Gets the concerned processes.
- *
- * @param localTasks true, if this table manages the local tasks. false
- * if this table manages the global tasks.
- *
- * @return the concerned processes
- */
- private ArrayList<VSInternalProcess> getConcernedProcesses(
- boolean localTasks) {
- int processNum = localTasks
- ? localPIDComboBox.getSelectedIndex()
- : globalPIDComboBox.getSelectedIndex();
-
- if (processNum == simulatorVisualization.getNumProcesses())
- return simulatorVisualization.getProcessesArray();
-
- ArrayList<VSInternalProcess> arr = new ArrayList<VSInternalProcess>();
- arr.add(simulatorVisualization.getProcess(processNum));
-
- return arr;
- }
-
- /**
- * Update task manager table.
- */
- public synchronized void updateTaskManagerTable() {
- VSInternalProcess process = getSelectedProcess();
- boolean allProcesses = process == null;
-
- taskManagerLocalEditor.stopEditing();
- taskManagerGlobalEditor.stopEditing();
-
- taskManagerLocalModel.set(process,
- VSTaskManagerTableModel.LOCAL,
- allProcesses);
-
- taskManagerGlobalModel.set(process,
- VSTaskManagerTableModel.GLOBAL,
- allProcesses);
- }
-
- /**
- * Update the processes combo box
- */
- private void updateProcessesComboBox() {
- int numProcesses = simulatorVisualization.getNumProcesses();
- String processString = prefs.getString("lang.en.process");
-
- for (int i = 0; i < numProcesses; ++i) {
- int processID = simulatorVisualization.getProcess(i).getProcessID();
-
- processesComboBox.removeItemAt(i);
- localPIDComboBox.removeItemAt(i);
- globalPIDComboBox.removeItemAt(i);
-
- processesComboBox.insertItemAt(processString + " " + processID, i);
- localPIDComboBox.insertItemAt("PID: " + processID, i);
- globalPIDComboBox.insertItemAt("PID: " + processID, i);
- }
- }
-
- /**
- * The simulator has finished.
- */
- public synchronized void finish() {
- menuItemStates.setStart(false);
- menuItemStates.setPause(false);
- menuItemStates.setReset(true);
- menuItemStates.setReplay(true);
- simulatorFrame.updateSimulatorMenu();
- }
-
- /**
- * Gets the simulator num.
- *
- * @return the simulator num
- */
- public synchronized int getSimulatorNum() {
- return simulatorNum;
- }
-
- /**
- * Gets the menu item states.
- *
- * @return the menu item states
- */
- public synchronized VSMenuItemStates getMenuItemStates() {
- return menuItemStates;
- }
-
- /**
- * Gets the simulator canvas.
- *
- * @return the simulator canvas
- */
- public synchronized VSSimulatorVisualization getSimulatorCanvas() {
- return simulatorVisualization;
- }
-
- /**
- * Gets the simulator frame.
- *
- * @return the simulator frame
- */
- public synchronized VSSimulatorFrame getSimulatorFrame() {
- return simulatorFrame;
- }
-
- /**
- * Update from prefs.
- */
- public synchronized void updateFromPrefs() {
- simulatorVisualization.setBackground(prefs.getColor("col.background"));
- simulatorVisualization.updateFromPrefs();
- }
-
- /**
- * Removes the process at a specified index.
- *
- * @param index the index
- */
- public synchronized void removedAProcessAtIndex(int index) {
- if (lastSelectedProcessNum > index)
- --lastSelectedProcessNum;
-
- globalTextFields.remove(index);
- localTextFields.remove(index);
-
- globalPIDComboBox.removeItemAt(index);
- localPIDComboBox.removeItemAt(index);
-
- processesComboBox.removeItemAt(index);
- simulatorFrame.updateEditMenu();
-
- updateTaskManagerTable();
- }
-
- /**
- * Adds the process at a specified index.
- *
- * @param index the index
- */
- public synchronized void addProcessAtIndex(int index) {
- int processID = simulatorVisualization.getProcess(index).getProcessID();
- String processString = prefs.getString("lang.en.process");
-
- localTextFields.add(index, "0000");
- globalTextFields.add(index, "0000");
-
- localPIDComboBox.insertItemAt("PID: " + processID, index);
- globalPIDComboBox.insertItemAt("PID: " + processID, index);
-
- processesComboBox.insertItemAt(processString + " " + processID, index);
- simulatorFrame.updateEditMenu();
- }
-
- /**
- * Fire expert mode changed. Tell, that the expert mode has changed.
- */
- public synchronized void fireExpertModeChanged() {
- boolean expertMode = prefs.getBoolean("sim.mode.expert");
-
- /* Update the Task Manager GUI */
- int selectedIndex = tabbedPane.getSelectedIndex();
-
- if (expertMode) {
- tabbedPane.remove(localPanel);
- tabbedPane.insertTab(prefs.getString("lang.en.events"), null,
- splitPane1, null, 0);
- splitPane1.setTopComponent(localPanel);
- //splitPane1.setDividerLocation((int) (getPaintSize()/2) - 20);
-
- /* addPanel */
- localAddPanel.add(localPIDComboBox, 2);
-
- } else {
- tabbedPane.remove(splitPane1);
- tabbedPane.insertTab(prefs.getString("lang.en.events"), null,
- localPanel, null, 0);
-
- /* addPanel */
- localAddPanel.remove(2);
- }
-
- tabbedPane.setSelectedIndex(selectedIndex);
-
- /* Update the 'Variables tab' */
- if (getSelectedProcessNum() !=
- simulatorVisualization.getNumProcesses()) {
- VSInternalProcess process = getSelectedProcess();
- VSProcessEditor editor = new VSProcessEditor(prefs, process);
- tabbedPane.setComponentAt(1, editor.getContentPane());
- }
-
- /* Update the tools panel */
- logingPanel.remove(1);
- logingPanel.add(createToolsPanel(), BorderLayout.SOUTH);
- updateUI();
- }
-
- /**
- * Gets the prefs.
- *
- * @return the prefs
- */
- public synchronized VSPrefs getPrefs() {
- return prefs;
- }
-
- /**
- * Gets the create tasks objects. Those objects are for creating new tasks
- * via the task manager GUI or via right click on the paint area of the
- * simulator canvas!
- *
- * @return The create tasks objects
- */
- ArrayList<VSCreateTask> getCreateTaskObjects() {
- return createTasks;
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#serialize(serialize.VSSerialize,
- * java.io.ObjectOutputStream)
- */
- public synchronized void serialize(VSSerialize serialize,
- ObjectOutputStream objectOutputStream)
- throws IOException {
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
-
- simulatorVisualization.serialize(serialize, objectOutputStream);
-
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
-
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#deserialize(serialize.VSSerialize,
- * java.io.ObjectInputStream)
- */
- @SuppressWarnings("unchecked")
- public synchronized void deserialize(VSSerialize serialize,
- ObjectInputStream objectInputStream)
- throws IOException, ClassNotFoundException {
- if (VSSerialize.DEBUG)
- System.out.println("Deserializing: VSSimulator");
-
- serialize.setObject("simulator", this);
- serialize.setObject("loging", loging);
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
-
- simulatorVisualization.deserialize(serialize, objectInputStream);
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
-
- updateFromPrefs();
- updateTaskManagerTable();
- updateProcessesComboBox();
- processesComboBox.setSelectedIndex(processesComboBox.getItemCount()-1);
- }
-}