summaryrefslogtreecommitdiff
path: root/sources/simulator
diff options
context:
space:
mode:
authorPaul Buetow (centauri) <puppet@mx.buetow.org>2015-05-23 21:59:43 +0100
committerPaul Buetow (centauri) <puppet@mx.buetow.org>2015-05-23 21:59:43 +0100
commit9fc2fc3ccdedf1b7e48f8dfb618ca6cb6a2a662e (patch)
tree0fa92fe4e75cb53ffbf7eb56b5455eb9457bb06c /sources/simulator
parentf7873669a43421331e14b8921ebdaa8af4393bd5 (diff)
parent32749241efc1f5f70056d74a90237388f57ea350 (diff)
Merge remote-tracking branch 'remotes/github/packages' into packagespackages
Diffstat (limited to 'sources/simulator')
-rw-r--r--sources/simulator/VSCreateTask.java204
-rw-r--r--sources/simulator/VSLogging.java225
-rw-r--r--sources/simulator/VSMain.java95
-rw-r--r--sources/simulator/VSMenuItemStates.java135
-rw-r--r--sources/simulator/VSSimulator.java1537
-rw-r--r--sources/simulator/VSSimulatorFrame.java632
-rw-r--r--sources/simulator/VSSimulatorVisualization.java1821
7 files changed, 0 insertions, 4649 deletions
diff --git a/sources/simulator/VSCreateTask.java b/sources/simulator/VSCreateTask.java
deleted file mode 100644
index 1b24255..0000000
--- a/sources/simulator/VSCreateTask.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * VS-Simulator (http://vs-sim.buetow.org)
- * Copyright (c) 2008 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 core.*;
-import events.*;
-import events.internal.*;
-
-/**
- * The class VSCreateTask, an object of this class represents how new
- * VSTask objects are to be created using JComboBox selections of the
- * GUI editor..
- *
- * @author Paul C. Buetow
- */
-public class VSCreateTask {
- /** the serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The event classname. */
- private String eventClassname;
-
- /** The create task menu string. */
- private String menuText;
-
- /** The protocol classname. */
- private String protocolClassname;
-
- /** The shortname. */
- private String shortname;
-
- /** The task is a protocol activation. */
- private boolean isProtocolActivation;
-
- /** The task is a protocol deactivation. */
- private boolean isProtocolDeactivation;
-
- /** The task is a client protocol. */
- private boolean isClientProtocol;
-
- /** True, if the task is a client request. false, if the task is a
- * server request
- */
- private boolean isRequest;
-
- /**
- * Instantiates a new VSCreateTask object.
- *
- * @param menuText the menu text
- * @param eventClassname the event classname
- */
- public VSCreateTask(String menuText, String eventClassname) {
- this.menuText = menuText;
- this.eventClassname = eventClassname;
- }
-
- /**
- * Instantiates a new VSCreateTask dummy object.
- *
- * @param menuText the menu text
- */
- public VSCreateTask(String menuText) {
- this.menuText = menuText;
- this.eventClassname = null;
- }
-
- /**
- * Sets if it is a protocol activation task.
- *
- * @param isProtocolActivation true, if it is a protocol activation
- * task.
- */
- public void isProtocolActivation(boolean isProtocolActivation) {
- this.isProtocolActivation = isProtocolActivation;
-
- if (isProtocolActivation)
- isProtocolDeactivation(false);
- }
-
- /**
- * Sets if it is a protocol deactivation task.
- *
- * @param isProtocolDeactivation true, if it is a protocol deactivation
- * task.
- */
- public void isProtocolDeactivation(boolean isProtocolDeactivation) {
- this.isProtocolDeactivation = isProtocolDeactivation;
-
- if (isProtocolDeactivation)
- isProtocolActivation(false);
- }
-
- /**
- * Sets if it is a client protocol.
- *
- * @param isClientProtocol the is client protocol
- */
- public void isClientProtocol(boolean isClientProtocol) {
- this.isClientProtocol = isClientProtocol;
- }
-
- /**
- * Sets if it is a client request.
- *
- * @param isRequest the is client request
- */
- public void isRequest(boolean isRequest) {
- this.isRequest = isRequest;
- }
-
- /**
- * Checks if it is a dummy object..
- *
- * @return true, if dummy
- */
- public boolean isDummy() {
- return eventClassname == null;
- }
-
- /**
- * Sets the protocol classname.
- *
- * @param protocolClassname the protocol classname
- */
- public void setProtocolClassname(String protocolClassname) {
- this.protocolClassname = protocolClassname;
- }
-
- /**
- * Sets the shortname.
- *
- * @param shortname the shortname
- */
- public void setShortname(String shortname) {
- this.shortname = shortname;
- }
-
- /**
- * Gets the create tasks menu text.
- *
- * @return The text
- */
- public String getMenuText() {
- return menuText;
- }
-
- /**
- * Creates the task.
- *
- * @param process the process
- * @param time the time
- * @param localTimedTask the local timed task
- *
- * @return the new task
- */
- public VSTask createTask(VSInternalProcess process, long time,
- boolean localTimedTask) {
- VSAbstractEvent event = null;
-
- if (isRequest) {
- event = process.getProtocolObject(eventClassname);
-
- } else {
- event = VSRegisteredEvents.createEventInstanceByClassname(
- eventClassname, process);
- }
-
- event.init(process);
- if (shortname != null)
- event.setShortname(shortname);
-
- if (isProtocolActivation || isProtocolDeactivation) {
- VSProtocolEvent protocolEvent = (VSProtocolEvent) event;
- protocolEvent.setProtocolClassname(protocolClassname);
- protocolEvent.isProtocolActivation(isProtocolActivation);
- protocolEvent.isClientProtocol(isClientProtocol);
- }
-
- return new VSTask(time, process, event, localTimedTask);
- }
-}
-
diff --git a/sources/simulator/VSLogging.java b/sources/simulator/VSLogging.java
deleted file mode 100644
index f85ad75..0000000
--- a/sources/simulator/VSLogging.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * 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.util.*;
-import java.util.regex.*;
-import javax.swing.*;
-
-import utils.*;
-
-/**
- * The class VSLogging, an object of this class is responsible for the loging
- * of text messages into the simulator's loging window.
- *
- * @author Paul C. Buetow
- */
-public class VSLogging {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The loging area. */
- private JTextArea logingArea;
-
- /** The filter text. */
- private String filterText;
-
- /** The pause lines. Used for cacheing the loging if the loging is
- * deactivated for a while
- */
- private ArrayList<StringBuffer> pauseLines;
-
- /** The loging lines. */
- private ArrayList<StringBuffer> logingLines;
-
- /** The simulator canvas. */
- private VSSimulatorVisualization simulatorVisualization;
-
- /** The loging messages are filtered. */
- private boolean isFiltered;
-
- /** The loging is paused. */
- private boolean isPaused;
-
- /** The filter pattern. */
- private Pattern filterPattern;
-
- /**
- * Instantiates a new VSLogging object.
- */
- public VSLogging() {
- logingArea = new JTextArea(0, 0);
- logingArea.setEditable(false);
- logingArea.setLineWrap(true);
- logingArea.setWrapStyleWord(true);
- logingLines = new ArrayList<StringBuffer>();
- pauseLines = new ArrayList<StringBuffer>();
- filterText = "";
- }
-
- /**
- * Sets the simulator canvas.
- *
- * @param sv the simulator canvas
- */
- public void setSimulatorCanvas(VSSimulatorVisualization sv) {
- this.simulatorVisualization = sv;
- }
-
- /**
- * Gets the loging area.
- *
- * @return the loging area
- */
- public JTextArea getLoggingArea() {
- return logingArea;
- }
-
- /**
- * Loggs a message using the global time.
- *
- * @param message the message
- */
- public void log(String message) {
- if (simulatorVisualization == null)
- log(message, 0);
- else
- log(message, simulatorVisualization.getTime());
- }
-
- /**
- * Loggs a message using the specified time.
- *
- * @param message the message
- * @param time the time
- */
- public synchronized void log(String message, long time) {
- StringBuffer buffer = new StringBuffer();
- buffer.append(VSTools.getTimeString(time));
- buffer.append(": ");
- buffer.append(message);
-
- if (isPaused)
- pauseLines.add(buffer);
- else
- logFiltered(buffer);
- }
-
- /**
- * Sets if the loging is paused.
- *
- * @param isPaused true, if the loging is paused
- */
- public synchronized void isPaused(boolean isPaused) {
- this.isPaused = isPaused;
-
- if (!isPaused) {
- for (StringBuffer buffer : pauseLines)
- logFiltered(buffer);
-
- pauseLines.clear();
- }
- }
-
- /**
- * If the loging is filtered, it's using the pattern matching.
- *
- * @param buffer the loging buffer to filter
- */
- private void logFiltered(StringBuffer buffer) {
- logingLines.add(buffer);
- if (!isFiltered) {
- logingArea.append(buffer.toString()+"\n");
- logingArea.setCaretPosition(
- logingArea.getDocument().getLength());
-
- } else if (filterPattern != null &&
- filterPattern.matcher(buffer).find()) {
- logingArea.append(buffer.toString()+"\n");
- logingArea.setCaretPosition(
- logingArea.getDocument().getLength());
- }
- }
-
- /**
- * Checks if the loging is filtered.
- *
- * @param isFiltered true, if the loging is filtered
- */
- public synchronized void isFiltered(boolean isFiltered) {
- this.isFiltered = isFiltered;
-
- if (!isFiltered)
- setFilterText("");
- else
- filter();
- }
-
- /**
- * Sets the filter text.
- *
- * @param filterText the new filter text
- */
- public synchronized void setFilterText(String filterText) {
- this.filterText = filterText;
- filter();
- }
-
- /**
- * Clears the loging.
- */
- public synchronized void clear() {
- logingLines.clear();
- pauseLines.clear();
- logingArea.setText("");
- }
-
- /**
- * Filters the loging.
- */
- private void filter() {
- try {
- filterPattern = Pattern.compile(filterText);
- StringBuffer buffer = new StringBuffer();
-
- for (StringBuffer line : logingLines) {
- if (isFiltered) {
- Matcher matcher = filterPattern.matcher(line);
- if (matcher.find()) {
- buffer.append(line);
- buffer.append("\n");
- }
- } else {
- buffer.append(line);
- buffer.append("\n");
- }
- }
- logingArea.setText(buffer.toString());
-
- } catch (Exception e) {
- filterPattern = null;
- logingArea.setText("");
- }
- }
-}
diff --git a/sources/simulator/VSMain.java b/sources/simulator/VSMain.java
deleted file mode 100644
index 70b112e..0000000
--- a/sources/simulator/VSMain.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * 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.util.Locale;
-import javax.swing.*;
-
-import events.*;
-import prefs.*;
-//import prefs.editors.*;
-
-/**
- * The class VSMain. This class contains the static main method. The simulator
- * starts here!
- *
- * @author Paul C. Buetow
- */
-public class VSMain {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The global preferences */
- public static VSPrefs prefs;
-
- /**
- * Instantiates a new VSMain object.
- *
- * @param prefs the prefs
- */
- public VSMain(VSPrefs prefs) {
- init(prefs, null);
- }
-
- /**
- * Instantiates a new VSMain object
- *
- * @param prefs the prefs
- * @param relativeTo the component to open the window relative to
- */
- public VSMain(VSPrefs prefs, Component relativeTo) {
- init(prefs, relativeTo);
- }
-
- /**
- * Inits the VSMain object.
- *
- * @param prefs the prefs
- * @param relativeTo the component to open the window relative to
- */
- private void init(VSPrefs prefs, Component relativeTo) {
- //VSSimulatorFrame simulatorFrame =
- VSMain.prefs = prefs;
- new VSSimulatorFrame(prefs, relativeTo);
- }
-
- /**
- * The main method.
- *
- * @param args the arguments
- */
- public static void main(String[] args) {
- try {
- UIManager.setLookAndFeel(
- UIManager.getCrossPlatformLookAndFeelClassName());
- } catch (Exception e) { }
-
- Locale.setDefault(Locale.GERMAN);
- javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false);
- VSPrefs prefs = VSDefaultPrefs.init();
- VSRegisteredEvents.init(prefs);
- new VSMain(prefs);
- }
-}
diff --git a/sources/simulator/VSMenuItemStates.java b/sources/simulator/VSMenuItemStates.java
deleted file mode 100644
index fe69d92..0000000
--- a/sources/simulator/VSMenuItemStates.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * 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;
-
-/**
- * The class VSMenuItemStates. Used by the VSSimulator to update the
- * "simulator" bar of the VSSimulatorFrame.
- *
- * @author Paul C. Buetow
- */
-public class VSMenuItemStates {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The pause state. */
- private volatile boolean pause;
-
- /** The replay state. */
- private volatile boolean replay;
-
- /** The reset state. */
- private volatile boolean reset;
-
- /** The start state. */
- private volatile boolean start;
-
- /**
- * Instantiates a new VSMenuItemStates object.
- *
- * @param pause the pause state
- * @param replay the replay state
- * @param reset the reset state
- * @param start the start state
- */
- public VSMenuItemStates(boolean pause, boolean replay, boolean reset,
- boolean start) {
- this.pause = pause;
- this.replay = replay;
- this.reset = reset;
- this.start = start;
- }
-
- /**
- * Sets the pause state.
- *
- * @param pause the new pause state
- */
- public void setPause(boolean pause) {
- this.pause = pause;
- }
-
- /**
- * Sets the replay state.
- *
- * @param replay the new replay state
- */
- public void setReplay(boolean replay) {
- this.replay = replay;
- }
-
- /**
- * Sets the reset state.
- *
- * @param reset the new reset state
- */
- public void setReset(boolean reset) {
- this.reset = reset;
- }
-
- /**
- * Sets the start state.
- *
- * @param start the new start state
- */
- public void setStart(boolean start) {
- this.start = start;
- }
-
- /**
- * Gets the pause state.
- *
- * @return the pause state
- */
- public boolean getPause() {
- return pause;
- }
-
- /**
- * Gets the replay state.
- *
- * @return the replay state
- */
- public boolean getReplay() {
- return replay;
- }
-
- /**
- * Gets the reset state.
- *
- * @return the reset state
- */
- public boolean getReset() {
- return reset;
- }
-
- /**
- * Gets the start state.
- *
- * @return the start state
- */
- public boolean getStart() {
- return start;
- }
-}
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);
- }
-}
diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java
deleted file mode 100644
index f8396eb..0000000
--- a/sources/simulator/VSSimulatorFrame.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/* * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * 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 core.*;
-import prefs.*;
-import prefs.editors.*;
-import serialize.*;
-import utils.*;
-
-/**
- * The class VSSimulatorFrame, an object of this class represents a window
- * of the simulator. The window can have several tabs. Each tab contains
- * an independent simulator.
- *
- * @author Paul C. Buetow
- */
-public class VSSimulatorFrame extends VSFrame {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The pause item. */
- private JMenuItem pauseItem;
-
- /** The replay item. */
- private JMenuItem replayItem;
-
- /** The reset item. */
- private JMenuItem resetItem;
-
- /** The start item. */
- private JMenuItem startItem;
-
- /** The pause button. */
- private JButton pauseButton;
-
- /** The replay button. */
- private JButton replayButton;
-
- /** The reset button. */
- private JButton resetButton;
-
- /** The start button. */
- private JButton startButton;
-
- /** The menu edit. */
- private JMenu menuEdit;
-
- /** The menu file. */
- private JMenu menuFile;
-
- /** The close item. */
- private JMenuItem closeItem;
-
- /** The save item. */
- private JMenuItem saveItem;
-
- /** The save as item. */
- private JMenuItem saveAsItem;
-
- /** The menu simulator. */
- private JMenu menuSimulator;
-
- /** The tool bar. */
- private JToolBar toolBar;
-
- /** The prefs. */
- private VSPrefs prefs;
-
- /** The simulators. */
- private Vector<VSSimulator> simulators;
-
- /** The current simulator. */
- private VSSimulator currentSimulator;
-
- /** The tabbed pane. */
- private JTabbedPane tabbedPane;
-
- /** The action listener */
- private ActionListener actionListener;
-
- /**
- * Instantiates a new VSSimulatorFrame object.
- *
- * @param prefs the prefs
- * @param relativeTo the component to open the window relative to
- */
- public VSSimulatorFrame(VSPrefs prefs, Component relativeTo) {
- super(prefs.getString("lang.en.name"), relativeTo);
- this.prefs = prefs;
- this.simulators = new Vector<VSSimulator>();
-
- final VSPrefs finalPrefs = this.prefs;
- actionListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- Object source = e.getSource();
- String sourceText = null;
-
- if (source instanceof JMenuItem)
- sourceText = ((JMenuItem) source).getText();
- else
- sourceText = ((ImageIcon) ((JButton) source).getIcon()).
- getDescription();
-
- if (sourceText.equals(
- finalPrefs.getString("lang.en.simulator.close"))) {
- removeCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.simulator.new"))) {
- VSPrefs newPrefs = VSDefaultPrefs.init();
- VSSimulatorEditor simulatorEditor =
- new VSSimulatorEditor(newPrefs, VSSimulatorFrame.this,
- VSSimulatorEditor.OPENED_NEW_TAB);
- new VSEditorFrame(newPrefs, VSSimulatorFrame.this,
- simulatorEditor);
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.window.new"))) {
- new VSMain(VSDefaultPrefs.init(),
- VSSimulatorFrame.this);
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.window.close"))) {
- dispose();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.open"))) {
- VSSerialize serialize = new VSSerialize();
- serialize.openSimulator(VSSimulatorFrame.this);
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.save"))) {
- VSSimulatorVisualization simulatorVisualization =
- currentSimulator.getSimulatorCanvas();
- boolean flag = !simulatorVisualization.isPaused()
- && !simulatorVisualization.isResetted()
- && !simulatorVisualization.hasFinished();
-
- if (flag)
- pauseCurrentSimulator();
-
- VSSerialize serialize = new VSSerialize();
- serialize.saveSimulator(VSSerialize.LAST_FILENAME,
- currentSimulator);
- if (flag)
- startCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.saveas"))) {
- VSSimulatorVisualization simulatorVisualization =
- currentSimulator.getSimulatorCanvas();
- boolean flag = !simulatorVisualization.isPaused()
- && !simulatorVisualization.isResetted()
- && !simulatorVisualization.hasFinished();
- if (flag)
- pauseCurrentSimulator();
-
- VSSerialize serialize = new VSSerialize();
- serialize.saveSimulator(currentSimulator);
-
- if (flag)
- startCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.about"))) {
- new VSAboutFrame(finalPrefs, VSSimulatorFrame.this);
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.quit"))) {
- System.exit(0);
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.start"))) {
- startCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.pause"))) {
- pauseCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.reset"))) {
- resetCurrentSimulator();
-
- } else if (sourceText.equals(
- finalPrefs.getString("lang.en.replay"))) {
- VSMenuItemStates menuItemState =
- currentSimulator.getMenuItemStates();
- menuItemState.setStart(false);
- menuItemState.setPause(true);
- menuItemState.setReset(false);
- menuItemState.setReplay(true);
- currentSimulator.getSimulatorCanvas().reset();
- currentSimulator.getSimulatorCanvas().play();
- updateSimulatorMenu();
- }
- }
- };
-
- setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-
- setSize(prefs.getInteger("div.window.xsize"),
- prefs.getInteger("div.window.ysize"));
-
- setJMenuBar(createMenuBar());
- setLayout(new BorderLayout());
- setContentPane(createContentPane());
- setVisible(true);
-
- pauseButton.setEnabled(false);
- replayButton.setEnabled(false);
- resetButton.setEnabled(false);
- startButton.setEnabled(false);
- menuEdit.setEnabled(false);
- //menuFile.setEnabled(false);
- closeItem.setEnabled(false);
- saveItem.setEnabled(false);
- saveAsItem.setEnabled(false);
- menuSimulator.setEnabled(false);
- }
-
- /**
- * Creates the menu bar.
- *
- * @return the j menu bar
- */
- private JMenuBar createMenuBar() {
- /* File menu */
- menuFile = new JMenu(prefs.getString("lang.en.file"));
- menuFile.setMnemonic(prefs.getInteger("keyevent.file"));
- JMenuItem menuItem;
-
- menuItem = new JMenuItem(prefs.getString("lang.en.simulator.new"));
- menuItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.new"),
- ActionEvent.ALT_MASK));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- closeItem = new JMenuItem(
- prefs.getString("lang.en.simulator.close"));
- closeItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.close"),
- ActionEvent.ALT_MASK));
- closeItem.addActionListener(actionListener);
- menuFile.add(closeItem);
-
- menuFile.addSeparator();
-
- menuItem = new JMenuItem(prefs.getString("lang.en.window.new"));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- menuItem = new JMenuItem(prefs.getString("lang.en.window.close"));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- menuFile.addSeparator();
-
- menuItem = new JMenuItem(prefs.getString("lang.en.open"));
- menuItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.open"),
- ActionEvent.ALT_MASK));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- saveItem = new JMenuItem(prefs.getString("lang.en.save"));
- saveItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.save"),
- ActionEvent.ALT_MASK));
- saveItem.addActionListener(actionListener);
- menuFile.add(saveItem);
-
- saveAsItem = new JMenuItem(prefs.getString("lang.en.saveas"));
- saveAsItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.saveas"),
- ActionEvent.ALT_MASK));
- saveAsItem.addActionListener(actionListener);
- menuFile.add(saveAsItem);
-
- menuFile.addSeparator();
-
- menuItem = new JMenuItem(prefs.getString("lang.en.about"));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- menuItem = new JMenuItem(prefs.getString("lang.en.quit"));
- menuItem.addActionListener(actionListener);
- menuFile.add(menuItem);
-
- /* Edit menu */
- menuEdit = new JMenu(
- prefs.getString("lang.en.edit"));
- menuEdit.setMnemonic(prefs.getInteger("keyevent.edit"));
- updateEditMenu();
-
- /* Simulator menu */
- toolBar = new JToolBar();
- menuSimulator = new JMenu(
- prefs.getString("lang.en.simulator"));
- menuSimulator.setMnemonic(prefs.getInteger("keyevent.simulator"));
-
- resetItem = new JMenuItem(prefs.getString("lang.en.reset"));
- resetItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.reset"),
- ActionEvent.ALT_MASK));
- resetItem.addActionListener(actionListener);
- resetItem.setEnabled(false);
- menuSimulator.add(resetItem);
- resetButton = new JButton(getImageIcon("reset.png",
- prefs.getString("lang.en.reset")));
- resetButton.addActionListener(actionListener);
- toolBar.add(resetButton);
-
- replayItem = new JMenuItem(
- prefs.getString("lang.en.replay"));
- replayItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.replay"),
- ActionEvent.ALT_MASK));
- replayItem.addActionListener(actionListener);
- replayItem.setEnabled(false);
- menuSimulator.add(replayItem);
- replayButton = new JButton(
- getImageIcon("replay.png", prefs.getString("lang.en.replay")));
- replayButton.addActionListener(actionListener);
- toolBar.add(replayButton);
-
- pauseItem = new JMenuItem(prefs.getString("lang.en.pause"));
- pauseItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.pause"),
- ActionEvent.ALT_MASK));
- pauseItem.addActionListener(actionListener);
- menuSimulator.add(pauseItem);
- pauseItem.setEnabled(false);
- pauseButton = new JButton(getImageIcon("pause.png",
- prefs.getString("lang.en.pause")));
- pauseButton.addActionListener(actionListener);
- toolBar.add(pauseButton);
-
- startItem = new JMenuItem(prefs.getString("lang.en.start"));
- startItem.setAccelerator(KeyStroke.getKeyStroke(
- prefs.getInteger("keyevent.start"),
- ActionEvent.ALT_MASK));
- startItem.addActionListener(actionListener);
- menuSimulator.add(startItem);
- startButton = new JButton(getImageIcon("start.png",
- prefs.getString("lang.en.start")));
- startButton.addActionListener(actionListener);
- toolBar.add(startButton);
-
-
- JMenuBar mainMenuBar = new JMenuBar();
- mainMenuBar.add(menuFile);
- mainMenuBar.add(menuEdit);
- mainMenuBar.add(menuSimulator);
-
- return mainMenuBar;
- }
-
- /**
- * Creates the content pane.
- *
- * @return the container
- */
- private Container createContentPane() {
- Container pane = getContentPane();
- tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM,
- JTabbedPane.SCROLL_TAB_LAYOUT);
-
- tabbedPane.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent ce) {
- JTabbedPane pane = (JTabbedPane) ce.getSource();
- currentSimulator = (VSSimulator) pane.getSelectedComponent();
- if (currentSimulator != null) {
- currentSimulator.getSimulatorCanvas().paint();
- updateEditMenu();
- updateSimulatorMenu();
- }
- }
- });
-
- pane.add(toolBar, BorderLayout.PAGE_START);
- pane.add(tabbedPane, BorderLayout.CENTER);
-
- return pane;
- }
-
- /**
- * Updates the edit menu. Called if another simulator tab has been selected
- * or if processes have been added or removed.
- */
- public void updateEditMenu() {
- menuEdit.removeAll();
-
- JMenuItem globalPrefsItem = new JMenuItem(
- prefs.getString("lang.en.prefs"));
-
- globalPrefsItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- VSPrefs simulatorPrefs = currentSimulator.getPrefs();
- VSSimulatorEditor.TAKEOVER_BUTTON = true;
- VSSimulatorEditor simulatorEditor = new VSSimulatorEditor(
- simulatorPrefs, VSSimulatorFrame.this, currentSimulator);
- new VSEditorFrame(prefs, VSSimulatorFrame.this,
- simulatorEditor);
- }
- });
-
- menuEdit.add(globalPrefsItem);
- menuEdit.addSeparator();
-
- if (currentSimulator == null)
- return;
-
- String processString = prefs.getString("lang.en.process");
- ArrayList<VSInternalProcess> arr =
- currentSimulator.getSimulatorCanvas().getProcessesArray();
-
- //int numProcesses = arr.size();
- int processNum = 0;
-
- for (VSInternalProcess process : arr) {
- int processID = process.getProcessID();
- JMenuItem processItem = new JMenuItem(processString + " " +
- processID);
- if (processNum < 9)
- processItem.setAccelerator(
- KeyStroke.getKeyStroke(0x31+processNum,
- ActionEvent.ALT_MASK));
- final int finalProcessNum = processNum++;
- processItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- currentSimulator.getSimulatorCanvas().editProcess(
- finalProcessNum);
- }
- });
- menuEdit.add(processItem);
- }
- }
-
- /**
- * Updates the simulator menu. Called if the simulator state has changed
- * (e.g. start/play/stop/replay etc)
- */
- public synchronized void updateSimulatorMenu() {
- VSMenuItemStates menuItemState = currentSimulator.getMenuItemStates();
-
- pauseItem.setEnabled(menuItemState.getPause());
- replayItem.setEnabled(menuItemState.getReplay());
- resetItem.setEnabled(menuItemState.getReset());
- startItem.setEnabled(menuItemState.getStart());
-
- pauseButton.setEnabled(menuItemState.getPause());
- replayButton.setEnabled(menuItemState.getReplay());
- resetButton.setEnabled(menuItemState.getReset());
- startButton.setEnabled(menuItemState.getStart());
- }
-
- /* (non-Javadoc)
- * @see java.awt.Window#dispose()
- */
- public void dispose() {
- synchronized (simulators) {
- for (VSSimulator simulator : simulators)
- simulator.getSimulatorCanvas().stopThread();
- }
- super.dispose();
- }
-
- /**
- * Adds the simulator.
- *
- * @param simulator the simulator
- */
- public void addSimulator(VSSimulator simulator) {
- simulator.setLayout(new GridLayout(1, 1, 3, 3));
- simulator.setMinimumSize(new Dimension(0, 0));
- simulator.setMaximumSize(new Dimension(0, 0));
-
- simulators.add(simulator);
- tabbedPane.addTab(prefs.getString("lang.en.simulator")
- + " " + simulator.getSimulatorNum(), simulator);
- tabbedPane.setSelectedComponent(simulator);
-
- if (simulators.size() == 1) {
- menuEdit.setEnabled(true);
- //menuFile.setEnabled(true);
- closeItem.setEnabled(true);
- saveItem.setEnabled(true);
- saveAsItem.setEnabled(true);
- menuSimulator.setEnabled(true);
- }
- }
-
- /**
- * Removes the simulator.
- *
- * @param simulatorToRemove the simulator to remove
- */
- public void removeSimulator(VSSimulator simulatorToRemove) {
- if (simulators.size() == 1) {
- pauseButton.setEnabled(false);
- replayButton.setEnabled(false);
- resetButton.setEnabled(false);
- startButton.setEnabled(false);
- menuEdit.setEnabled(false);
- //menuFile.setEnabled(false);
- closeItem.setEnabled(false);
- saveItem.setEnabled(false);
- saveAsItem.setEnabled(false);
- menuSimulator.setEnabled(false);
- }
-
- simulators.remove(simulatorToRemove);
- tabbedPane.remove(simulatorToRemove);
- simulatorToRemove.getSimulatorCanvas().stopThread();
- }
-
- /**
- * Removes the current simulator.
- */
- private void removeCurrentSimulator() {
- removeSimulator(currentSimulator);
- }
-
- /**
- * Gets the current simulator.
- *
- * @return the current simulator
- */
- public VSSimulator getCurrentSimulator() {
- return currentSimulator;
- }
-
- /**
- * Resets the current simulator
- */
- public void resetCurrentSimulator() {
- if (currentSimulator == null)
- return;
-
- VSMenuItemStates menuItemState =
- currentSimulator.getMenuItemStates();
- menuItemState.setStart(true);
- menuItemState.setPause(false);
- menuItemState.setReset(false);
- menuItemState.setReplay(false);
- currentSimulator.getSimulatorCanvas().reset();
- updateSimulatorMenu();
- }
-
- /**
- * Starts the current simulator
- */
- public void startCurrentSimulator() {
- VSMenuItemStates menuItemState =
- currentSimulator.getMenuItemStates();
- menuItemState.setStart(false);
- menuItemState.setPause(true);
- menuItemState.setReset(false);
- menuItemState.setReplay(true);
- currentSimulator.getSimulatorCanvas().play();
- updateSimulatorMenu();
- }
-
- /**
- * Pauses the current simulator
- */
- public void pauseCurrentSimulator() {
- VSMenuItemStates menuItemState =
- currentSimulator.getMenuItemStates();
- menuItemState.setStart(true);
- menuItemState.setPause(false);
- menuItemState.setReset(true);
- menuItemState.setReplay(true);
- currentSimulator.getSimulatorCanvas().pause();
- updateSimulatorMenu();
- }
-
- /**
- * Gets the image icon.
- *
- * @param name the name
- * @param descr the descr
- *
- * @return the image icon
- */
- private ImageIcon getImageIcon(String name, String descr) {
- java.net.URL imageURL = getClass().getResource("/icons/"+name);
-
- if (imageURL == null)
- return new ImageIcon("icons/"+name, descr);
-
- return new ImageIcon(imageURL, descr);
- }
-
- /**
- * Gets the prefs.
- *
- * @return the prefs
- */
- public VSPrefs getPrefs() {
- return prefs;
- }
-}
diff --git a/sources/simulator/VSSimulatorVisualization.java b/sources/simulator/VSSimulatorVisualization.java
deleted file mode 100644
index f15d478..0000000
--- a/sources/simulator/VSSimulatorVisualization.java
+++ /dev/null
@@ -1,1821 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * 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.awt.image.*;
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
-
-import core.*;
-import core.time.*;
-import events.*;
-import events.implementations.*;
-import events.internal.*;
-import prefs.*;
-import prefs.editors.*;
-import serialize.*;
-//import utils.*;
-
-/**
- * The class VSSimulatorVisualization. An instance of this object represents the
- * graphical paint area of a simulator. It contains all graphic calculations.
- * Also the simulator thread takes place in this class in a loop! This class
- * is probably the most cryptic of the whole simulator source code. This is
- * this way in order to gain more performance of the painting area!
- *
- * @author Paul C. Buetow
- */
-public class VSSimulatorVisualization extends Canvas
- implements Runnable, VSSerializable {
-
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The highlighted process. */
- private VSInternalProcess highlightedProcess;
-
- /** The simulator. */
- private VSSimulator simulator;
-
- /** The prefs. */
- private VSPrefs prefs;
-
- /** The loging. */
- private VSLogging loging;
-
- /** The num processes. */
- private volatile int numProcesses;
-
- /** The seconds spaceing. */
- private int secondsSpaceing;
-
- /** The thread sleep. */
- private int threadSleep;
-
- /** The until time. Until then goes the simulator? */
- private long untilTime;
-
- /** The simulator is paused. */
- private volatile boolean isPaused = true;
-
- /** The simulator thread is stopped. */
- private volatile boolean hasThreadStopped = false;
-
- /** The simulator is finished. */
- private volatile boolean hasFinished = false;
-
- /** The simulator is resetted. */
- private volatile boolean isResetted = false;
-
- /** The simulator is anti aliased. */
- private volatile boolean isAntiAliased = false;
-
- /** The simulator's anti aliasing has changed. */
- private volatile boolean isAntiAliasedChanged = false;
-
- /** The simulator shows the lamport time. */
- private volatile boolean showLamport = false;
-
- /** The simulator shows the vector time. */
- private volatile boolean showVectorTime = false;
-
- /** The pause time. */
- private volatile long pauseTime;
-
- /** The start time. */
- private volatile long startTime;
-
- /** The global time. */
- private volatile long time;
-
- /** The last global time. */
- private volatile long lastTime;
-
- /** The task manager. */
- private VSTaskManager taskManager;
-
- /** The message lines. */
- private LinkedList<VSMessageLine> messageLines;
-
- /** The message lines to remove. */
- private LinkedList<VSMessageLine> messageLinesToRemove;
-
- /** The processes. */
- private ArrayList<VSInternalProcess> processes;
-
- /** The clock speed. */
- private double clockSpeed;
-
- /** The clock offset. */
- private double clockOffset;
-
- /** The simulator time. */
- private long simulatorTime;
-
- /** The x paint size. */
- double xPaintSize;
-
- /** The paint size. */
- double paintSize;
-
- /** The y distance. */
- double yDistance;
-
- /** The global time x position. */
- double globalTimeXPosition;
-
- /** The xoffset_plus_xpaintsize. */
- int xoffset_plus_xpaintsize;
-
- /** The xpaintsize_dividedby_untiltime. */
- double xpaintsize_dividedby_untiltime;
-
- /** The paint processes offset. */
- int paintProcessesOffset;
-
- /** The paint secondlines seconds. */
- int paintSecondlinesSeconds;
-
- /** The paint secondlines line. */
- int paintSecondlinesLine[] = new int[4];
-
- /** The paint secondlines y string pos1. */
- int paintSecondlinesYStringPos1;
-
- /** The paint secondlines y string pos2. */
- int paintSecondlinesYStringPos2;
-
- /** The paint global time y position. */
- int paintGlobalTimeYPosition;
-
- /* GFX buffering */
- /** The strategy for buffering. */
- private BufferStrategy strategy;
-
- /** The graphics object to paint at. */
- private Graphics2D g;
-
- /** The Constant LINE_WIDTH. */
- private static final int LINE_WIDTH = 5;
-
- /** The Constant SEPLINE_WIDTH. */
- private static final int SEPLINE_WIDTH = 2;
-
- /** The Constant XOFFSET. */
- private static final int XOFFSET = 50;
-
- /** The Constant YOFFSET. */
- private static final int YOFFSET = 30;
-
- /** The Constant YOUTER_SPACEING. */
- private static final int YOUTER_SPACEING = 15;
-
- /** The Constant YSEPLINE_SPACEING. */
- private static final int YSEPLINE_SPACEING = 20;
-
- /** The Constant TEXT_SPACEING. */
- private static final int TEXT_SPACEING = 10;
-
- /** The Constant ROW_HEIGHT. */
- private static final int ROW_HEIGHT = 14;
-
- /* Constats, which have to get calculated once after start */
- /** The processline color. */
- private Color processlineColor;
-
- /** The process secondline color. */
- private Color processSecondlineColor;
-
- /** The process sepline color. */
- private Color processSeplineColor;
-
- /** The message arrived color. */
- private Color messageArrivedColor;
-
- /** The message sending color. */
- private Color messageSendingColor;
-
- /** The message lost color. */
- private Color messageLostColor;
-
- /** The background color. */
- private Color backgroundColor;
-
- /** The message line counter. */
- private long messageLineCounter;
-
- /** The process counter. Needed for the unique process id's. */
- private int processCounter;
-
- /**
- * The class VSMessageLine, an object of this class represents a message
- * line drawn into the painting area.
- *
- * @author Paul C. Buetow
- */
- public class VSMessageLine {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The receiver process. */
- private VSInternalProcess receiverProcess;
-
- /** The color. */
- private Color color;
-
- /** The send time. */
- private long sendTime;
-
- /** The recv time. */
- private long recvTime;
-
- /** The sender num. */
- private int senderNum;
-
- /** The receiver num. */
- private int receiverNum;
-
- /** The offset1. */
- private int offset1;
-
- /** The offset2. */
- private int offset2;
-
- /** The message has arrived. */
- private boolean isArrived;
-
- /** The message is lost. */
- private boolean isLost;
-
- /** The x1. */
- private double x1;
-
- /** The y1. */
- private double y1;
-
- /** The x2. */
- private double x2;
-
- /** The y2. */
- private double y2;
-
- /** The x. */
- private double x;
-
- /** The y. */
- private double y;
-
- /** The outage time. */
- private long outageTime;
-
- /** The z. */
- private long z;
-
- /** The message line num. */
- private long messageLineNum;
-
- /** The task. */
- private VSTask task;
-
- /**
- * Instantiates a new VSMessageLine object.
- *
- * @param receiverProcess the receiver process
- * @param sendTime the send time
- * @param recvTime the recv time
- * @param outageTime the outage time
- * @param senderNum the sender num
- * @param receiverNum the receiver num
- * @param task the task
- */
- public VSMessageLine(VSInternalProcess receiverProcess, long sendTime,
- long recvTime, long outageTime, int senderNum ,
- int receiverNum, VSTask task) {
- this.receiverProcess = receiverProcess;
- this.sendTime = sendTime;
- this.recvTime = recvTime;
- this.outageTime = outageTime;
- this.senderNum = senderNum;
- this.receiverNum = receiverNum;
- this.isArrived = false;
- this.isLost = false;
- this.messageLineNum = ++messageLineCounter;
- this.task = task;
-
- if (senderNum > receiverNum) {
- //offset1 = 1;
- offset2 = LINE_WIDTH;
- } else {
- offset1 = LINE_WIDTH - 1;
- //offset2 = 1;
- }
-
- /* Needed if the message gets lost after 0ms */
- this.x = getTimeXPosition(sendTime);
- this.y = getProcessYPosition(senderNum+1) + offset1;
-
- recalcOnChange();
- paint();
- }
-
- /**
- * Recalc on change.
- */
- public void recalcOnChange() {
- x1 = getTimeXPosition(sendTime);
- y1 = getProcessYPosition(senderNum+1) + offset1;
- x2 = getTimeXPosition(recvTime);
- y2 = getProcessYPosition(receiverNum+1) + offset2;
-
- if (isLost) {
- x = getTimeXPosition(z);
- y = y1 + ( ( (y2-y1) / (x2-x1)) * (x-x1));
- }
-
- }
-
- /**
- * Draws the message line.
- *
- * @param g the grpahics object to draw at
- * @param globalTime the global time
- */
- public void draw(final Graphics2D g, final long globalTime) {
- if (isArrived) {
- g.setColor(color);
- g.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
-
- } else if (isLost) {
- g.setColor(messageLostColor);
- g.drawLine((int) x1, (int) y1, (int) x, (int) y);
-
- } else if (globalTime >= recvTime) {
- checkIfMessageIsRelevant();
- isArrived = true;
-
- if (receiverProcess.isCrashed())
- color = messageLostColor;
- else
- color = messageArrivedColor;
-
- draw(g, globalTime);
-
- } else if (outageTime >= 0 && outageTime <= globalTime) {
- checkIfMessageIsRelevant();
- isLost = true;
- draw(g, globalTime);;
-
- } else {
- z = globalTime;
- x = globalTimeXPosition;
- y = y1 + ( ( (y2-y1) / (x2-x1)) * (x-x1));
- g.setColor(messageSendingColor);
- g.drawLine((int) x1, (int) y1, (int) x, (int) y);
- }
- }
-
- /**
- * Checks if the message is relevant. If it's not relevant, then it will
- * get removed.
- */
- private void checkIfMessageIsRelevant() {
- if (prefs.getBoolean("sim.messages.relevant")) {
- VSMessageReceiveEvent event =
- (VSMessageReceiveEvent) task.getEvent();
- event.init(receiverProcess);
- if (!event.isRelevantMessage())
- removeMessageLine(this);
- }
- }
-
- /**
- * Called if a process within the simulator has been removed at a
- * specified index.
- *
- * @param index the index
- *
- * @return true, if the sender or the receiver of the message has been
- * removed from the simulator. Else false is returned.
- */
- public boolean removedAProcessAtIndex(int index) {
- if (index == receiverNum || index == senderNum)
- return true;
-
- if (index < receiverNum)
- --receiverNum;
-
- if (index < senderNum)
- --senderNum;
-
- recalcOnChange();
-
- return false;
- }
-
- /**
- * Gets the message line num.
- *
- * @return the message line num
- */
- public long getMessageLineNum() {
- return messageLineNum;
- }
-
- /**
- * Checks one line to another if they equal (have the same message line
- * id)
- *
- * @param line the line to compare against
- *
- * @return true, if they equal
- */
- public boolean equals(VSMessageLine line) {
- return messageLineNum == line.getMessageLineNum();
- }
-
- /**
- * Gets the task.
- *
- * @return the task
- */
- public VSTask getTask() {
- return task;
- }
- }
-
- /**
- * Instantiates a new VSSimulatorVisualization object.
- *
- * @param prefs the prefs
- * @param simulator the simulator
- * @param loging the loging
- */
- public VSSimulatorVisualization(VSPrefs prefs, VSSimulator simulator,
- VSLogging loging) {
- init(prefs, simulator, loging);
- }
-
- /**
- * Instantiates inits the VSSimulatorVisualization object.
- *
- * @param prefs the prefs
- * @param simulator the simulator
- * @param loging the loging
- */
- private void init(VSPrefs prefs, VSSimulator simulator,
- VSLogging loging) {
- this.prefs = prefs;
- this.simulator = simulator;
- this.loging = loging;
- this.messageLines = new LinkedList<VSMessageLine>();
- this.messageLinesToRemove = new LinkedList<VSMessageLine>();
-
- /* May be not null if called from deserialization */
- if (this.taskManager == null)
- this.taskManager = new VSTaskManager(prefs, this);
-
- /* May be not null if called from deserialization */
- if (this.processes == null) {
- this.processes = new ArrayList<VSInternalProcess>();
-
- numProcesses = prefs.getInteger("sim.process.num");
-
- for (int i = 0; i < numProcesses; ++i)
- processes.add(createProcess(i));
- }
-
- updateFromPrefs();
-
- final VSPrefs finalPrefs = prefs;
- final VSSimulator finalSimulator = simulator;
-
- addMouseListener(new MouseListener() {
- public void mouseClicked(MouseEvent me) {
- final VSInternalProcess process = getProcessAtYPos(me.getY());
-
- if (SwingUtilities.isRightMouseButton(me)) {
- ActionListener actionListener = new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- String command = ae.getActionCommand();
- if (command.equals(
- finalPrefs.getString("lang.en.process.edit"))) {
- editProcess(process);
-
- } else if (command.equals(
- finalPrefs.getString("lang.en.process.crash"))) {
- VSAbstractEvent event =
- new VSProcessCrashEvent();
-
- taskManager.addTask(new VSTask(
- process.getGlobalTime(),
- process, event,
- VSTask.GLOBAL));
-
- } else if (command.equals(
- finalPrefs.getString("lang.en.process.recover"))) {
- VSAbstractEvent event =
- new VSProcessRecoverEvent();
-
- taskManager.addTask(new VSTask(
- process.getGlobalTime(),
- process, event,
- VSTask.GLOBAL));
-
- } else if (command.equals(
- finalPrefs.getString("lang.en.process.remove"))) {
- removeProcess(process);
-
- } else if (command.equals(
- finalPrefs.getString("lang.en.process.add.new"))) {
- addProcess();
- }
- }
- };
-
- JPopupMenu popup = new JPopupMenu();
- JMenuItem item = null;
-
- if (process != null)
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.selected") +
- ": " + process.getProcessID());
- else
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.not.selected"));
-
- item.setEnabled(false);
- popup.add(item);
- popup.addSeparator();
-
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.edit"));
- if (process == null)
- item.setEnabled(false);
- else
- item.addActionListener(actionListener);
- popup.add(item);
-
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.crash"));
-
- if (process == null || process.isCrashed() || isPaused ||
- time == 0 || hasFinished)
- item.setEnabled(false);
- else
- item.addActionListener(actionListener);
- popup.add(item);
-
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.recover"));
-
- if (process == null || !process.isCrashed() || isPaused ||
- time == 0 || hasFinished)
- item.setEnabled(false);
- else
- item.addActionListener(actionListener);
- popup.add(item);
-
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.remove"));
-
- if (process == null)
- item.setEnabled(false);
- else
- item.addActionListener(actionListener);
- popup.add(item);
-
- popup.addSeparator();
-
- final long xPosTime = getXPositionTime(me.getX());
- String timeString = finalPrefs.getString(
- "lang.en.event.add.time") +
- " " + xPosTime + "ms";
-
- JMenu subMenu = new JMenu(
- finalPrefs.getString("lang.en.event.add.local")
- + " " + timeString);
-
- ArrayList<VSCreateTask> createTasks =
- finalSimulator.getCreateTaskObjects();
-
- if (process == null) {
- subMenu.setEnabled(false);
- } else {
- JMenu subSubMenu = null;
- for (final VSCreateTask createTask : createTasks) {
- if (createTask.isDummy()) {
- if (subSubMenu != null)
- subMenu.add(subSubMenu);
- subSubMenu = new JMenu(
- createTask.getMenuText());
- } else {
- item = new JMenuItem(createTask.getMenuText());
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- VSTask task =
- createTask.createTask(process,
- xPosTime,
- true);
- taskManager.addTask(
- task, VSTaskManager.PROGRAMMED);
- finalSimulator.updateTaskManagerTable();
- }
- });
- subSubMenu.add(item);
- }
- }
- }
-
- popup.add(subMenu);
-
- subMenu = new JMenu(
- finalPrefs.getString("lang.en.event.add.global")
- + " " + timeString);
- if (process == null) {
- subMenu.setEnabled(false);
- } else {
- JMenu subSubMenu = null;
- for (final VSCreateTask createTask : createTasks) {
- if (createTask.isDummy()) {
- if (subSubMenu != null)
- subMenu.add(subSubMenu);
- subSubMenu = new JMenu(
- createTask.getMenuText());
- } else {
- item = new JMenuItem(createTask.getMenuText());
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- VSTask task =
- createTask.createTask(process,
- xPosTime,
- false);
- taskManager.addTask(
- task, VSTaskManager.PROGRAMMED);
- finalSimulator.updateTaskManagerTable();
- }
- });
- subSubMenu.add(item);
- }
- }
- }
-
- if (finalPrefs.getBoolean("sim.mode.expert"))
- popup.add(subMenu);
-
- popup.addSeparator();
-
- item = new JMenuItem(
- finalPrefs.getString("lang.en.process.add.new"));
-
- item.addActionListener(actionListener);
- popup.add(item);
-
-
- popup.show(me.getComponent(), me.getX(), me.getY());
-
- } else {
- editProcess(process);
- }
- }
-
- public void mouseExited(MouseEvent e) {
- if (highlightedProcess != null) {
- highlightedProcess.highlightOff();
- highlightedProcess = null;
- paint();
- }
- }
-
- public void mouseEntered(MouseEvent e) { }
-
- public void mousePressed(MouseEvent e) { }
-
- public void mouseReleased(MouseEvent e) { }
-
- });
- addMouseMotionListener(new MouseMotionListener() {
- public void mouseDragged(MouseEvent e) { }
-
- public void mouseMoved(MouseEvent e) {
- VSInternalProcess p = getProcessAtYPos(e.getY());
-
- if (p == null) {
- if (highlightedProcess != null) {
- highlightedProcess.highlightOff();
- highlightedProcess = null;
- }
-
- if (isPaused)
- paint();
-
- return;
- }
-
- if (highlightedProcess != null) {
- if (highlightedProcess.getProcessID() != p.getProcessID()) {
- highlightedProcess.highlightOff();
- highlightedProcess = p;
- p.highlightOn();
- }
- } else {
- highlightedProcess = p;
- p.highlightOn();
- }
-
- if (isPaused)
- paint();
- }
-
- });
-
- addHierarchyBoundsListener(new HierarchyBoundsListener() {
- public void ancestorMoved(HierarchyEvent e) { }
-
- public void ancestorResized(HierarchyEvent e) {
- recalcOnChange();
- }
- });
- }
-
- /**
- * This method gets called if the window border of the simulator canvas
- * has changed. This method contains very ugly code. But this has to be in
- * order to gain performance!
- */
- private void recalcOnChange() {
- synchronized (processes) {
- if (processes.size() == 0)
- return;
- }
-
- processlineColor = prefs.getColor("col.process.line");
- processSecondlineColor = prefs.getColor("col.process.secondline");
- processSeplineColor = prefs.getColor("col.process.sepline");
- messageArrivedColor = prefs.getColor("col.message.arrived");
- messageSendingColor = prefs.getColor("col.message.sending");
- messageLostColor = prefs.getColor("col.message.lost");
- backgroundColor = prefs.getColor("col.background");
-
- paintSize = simulator.getPaintSize();
- xPaintSize = simulator.getWidth() -
- (3 * XOFFSET + simulator.getSplitSize());
- yDistance = (simulator.getPaintSize() -
- 2 * (YOFFSET + YOUTER_SPACEING))/ numProcesses;
- xpaintsize_dividedby_untiltime = xPaintSize / (double) untilTime;
-
-
- synchronized (messageLines) {
- for (VSMessageLine messageLine : messageLines)
- messageLine.recalcOnChange();
- }
-
- /* paintProcesses optimization, precalc things */
- {
- xoffset_plus_xpaintsize = XOFFSET + (int) xPaintSize;
- if (numProcesses > 1)
- paintProcessesOffset =
- (int) ((paintSize-2* (YOFFSET+
- YOUTER_SPACEING+YSEPLINE_SPACEING))/
- (numProcesses-1));
- else
- paintProcessesOffset =
- (int) ((paintSize-2*(YOFFSET+
- YOUTER_SPACEING+YSEPLINE_SPACEING)));
- }
-
- /* paintSecondlines optimization, precalc things */
- {
- int yMax = YOFFSET + YOUTER_SPACEING +
- (int) (numProcesses * yDistance);
- paintSecondlinesSeconds = (int) untilTime / 1000;
- paintSecondlinesLine[1] = YOFFSET;
- paintSecondlinesLine[3] = yMax;
- paintSecondlinesYStringPos1 = paintSecondlinesLine[1] - 5;
- paintSecondlinesYStringPos2 = paintSecondlinesLine[3] + 15;
- }
-
- /* paitnGlobalTime optimization, precalc things */
- {
- paintGlobalTimeYPosition = YOFFSET + YOUTER_SPACEING +
- (int) (numProcesses * yDistance);
- }
-
- if (strategy != null) {
- synchronized (strategy) {
- g = (Graphics2D) strategy.getDrawGraphics();
- g.setColor(backgroundColor);
- if (isAntiAliased)
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- }
- }
- }
-
- /**
- * Updates the simulator.
- *
- * @param globalTime the global time
- * @param lastGlobalTime the last global time
- */
- private void updateSimulator(long globalTime, long lastGlobalTime) {
- if (isPaused || hasFinished)
- return;
-
- long lastSimulatorTime = simulatorTime;
- long offset = globalTime - lastGlobalTime;
-
- clockOffset += offset * clockSpeed;
-
- while (clockOffset >= 1) {
- --clockOffset;
- ++simulatorTime;
- }
-
- if (simulatorTime > untilTime)
- simulatorTime = untilTime;
-
- offset = simulatorTime - lastSimulatorTime;
-
- for (long l = 0; l < offset; ++l)
- taskManager.runTasks(l, offset, lastSimulatorTime);
-
- synchronized (processes) {
- for (VSInternalProcess process : processes)
- process.syncTime(simulatorTime);
- }
- }
-
- /**
- * Paints the simulator.
- */
- public void paint() {
- while (getBufferStrategy() == null) {
- createBufferStrategy(3);
- strategy = getBufferStrategy();
-
- if (strategy != null) {
- g = (Graphics2D) strategy.getDrawGraphics();
- g.setColor(backgroundColor);
- }
- }
-
- synchronized (strategy) {
- if (isAntiAliasedChanged) {
- if (isAntiAliased)
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- else
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_OFF);
- isAntiAliasedChanged = false;
- }
-
- g.fillRect(0, 0, getWidth(), getHeight());
- long globalTime = simulatorTime;
-
- globalTimeXPosition = getTimeXPosition(globalTime);
- paintSecondlines(g);
- paintProcesses(g, globalTime);
- paintGlobalTime(g, globalTime);
-
- synchronized (messageLines) {
- synchronized (messageLinesToRemove) {
- if (messageLinesToRemove.size() > 0) {
- for (VSMessageLine removeThis : messageLinesToRemove)
- messageLines.remove(removeThis);
- messageLinesToRemove.clear();
- }
- }
-
- for (VSMessageLine line : messageLines)
- line.draw(g, globalTime);
- }
-
- g.setColor(backgroundColor);
- strategy.show();
- }
- }
-
- /**
- * Paints the processes.
- *
- * @param g the graphics object
- * @param globalTime the global time
- */
- private void paintProcesses(Graphics2D g, long globalTime) {
- /* First paint the horizontal process timelines
- * Second paint the processes
- */
- final int yOffset = YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING;
- final int xPoints[] = { XOFFSET, xoffset_plus_xpaintsize,
- xoffset_plus_xpaintsize, XOFFSET, XOFFSET
- };
- final int yPoints[] = { yOffset, yOffset, yOffset + LINE_WIDTH,
- yOffset + LINE_WIDTH, yOffset
- };
-
- synchronized (processes) {
- for (VSInternalProcess process : processes) {
- final long localTime = process.getTime();
-
- g.setColor(process.getColor());
- g.fillPolygon(xPoints, yPoints, 5);
-
- if (process.hasCrashed()) {
- g.setColor(process.getCrashedColor());
- final Long crashHistory[] = process.getCrashHistoryArray();
- final int length = crashHistory.length;
-
- for (int i = 0; i < length; i += 2) {
- final int crashStartPos =
- (int) getTimeXPosition(
- crashHistory[i].longValue());
- int crashEndPos;
-
- if (i == length - 1)
- crashEndPos = xoffset_plus_xpaintsize;
- else
- crashEndPos = (int) getTimeXPosition(
- crashHistory[i+1].longValue());
-
- final int xPointsCrashed[] = {
- crashStartPos, crashEndPos,
- crashEndPos, crashStartPos, crashStartPos
- };
- g.fillPolygon(xPointsCrashed, yPoints, 5);
- }
- }
-
- g.setColor(process.getColor());
- g.drawString("P" + process.getProcessID() + ":", XOFFSET - 30,
- yPoints[0] + LINE_WIDTH);
-
- final long tmp = localTime > untilTime ? untilTime : localTime;
- final int xPos = 1 + (int) getTimeXPosition(tmp);
- final int yStart = yPoints[0] - 14;
- final int yEnd = yPoints[0];
-
- g.setColor(processlineColor);
- g.drawLine(xPos, yStart, xPos, yEnd);
- g.drawString(localTime+"ms", xPos + 2, yStart + TEXT_SPACEING);
-
- if (showLamport)
- paintTime(g, process.getLamportTimeArray(), process,
- yStart, 25);
- else if (showVectorTime)
- paintTime(g, process.getVectorTimeArray(), process,
- yStart, 20 * numProcesses);
-
- for (int i = 0; i < 5; ++i)
- yPoints[i] += paintProcessesOffset;
- }
- }
- }
-
- /**
- * Paints the time. (e.g. lamport time or vector time)
- *
- * @param g the graphics object
- * @param times the times
- * @param process the process
- * @param yStart the y start
- * @param distance the distance
- */
- private void paintTime(final Graphics2D g, final VSTime times[],
- final VSInternalProcess process, final int yStart,
- final int distance) {
-
- final int lastPos[] = { -1, -1, -1, -1 };
-
- for (VSTime time : times) {
- int xPos = (int) getTimeXPosition(time.getGlobalTime());
- int bestRow[] = { -1, -1 };
-
- for (int i = 0; i < 4; ++i) {
- if (lastPos[i] != -1) {
- int diff = xPos - lastPos[i];
- if (diff > distance) {
- bestRow[0] = i;
- bestRow[1] = -1;
- break;
- } else if (bestRow[0] == -1) {
- bestRow[0] = i;
- bestRow[1] = diff;
- } else if (diff > bestRow[1]) {
- bestRow[0] = i;
- bestRow[1] = diff;
- }
- } else {
- bestRow[0] = i;
- bestRow[1] = -1;
- break;
- }
- }
-
- final int row = bestRow[0];
- if (bestRow[1] != -1)
- xPos += distance - bestRow[1];
-
- g.drawString(time.toString(), xPos + 2, yStart + 3 *
- TEXT_SPACEING + row * ROW_HEIGHT);
- lastPos[row] = xPos;
- }
- }
-
- /**
- * Paint the second lines.
- *
- * @param g the graphics object
- */
- private void paintSecondlines(Graphics2D g) {
- g.setColor(processSecondlineColor);
-
- int i;
- for (i = 0; i <= paintSecondlinesSeconds; i += secondsSpaceing) {
- paintSecondlinesLine[0] = paintSecondlinesLine[2] =
- (int) getTimeXPosition(i*1000);
- g.drawLine(paintSecondlinesLine[0], paintSecondlinesLine[1],
- paintSecondlinesLine[2], paintSecondlinesLine[3]);
-
- final int xStringPos = paintSecondlinesLine[0] - 5;
- g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos1);
- if (!showVectorTime && !showLamport)
- g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos2);
- }
-
- if (i > paintSecondlinesSeconds) {
- paintSecondlinesLine[0] = paintSecondlinesLine[2] =
- (int) getTimeXPosition(untilTime);
- g.drawLine(paintSecondlinesLine[0], paintSecondlinesLine[1],
- paintSecondlinesLine[2], paintSecondlinesLine[3]);
- }
- }
-
- /**
- * Paints the global time.
- *
- * @param g the graphics object
- * @param globalTime the global time
- */
- private void paintGlobalTime(Graphics2D g, long globalTime) {
- g.setColor(processSeplineColor);
- final int xOffset = (int) globalTimeXPosition;
-
- final int xPoints[] = {
- xOffset, xOffset + SEPLINE_WIDTH,
- xOffset + SEPLINE_WIDTH, xOffset, xOffset
- };
- final int yOffset = YOFFSET - 8;
- final int yPoints[] = {
- yOffset, yOffset, paintGlobalTimeYPosition,
- paintGlobalTimeYPosition, yOffset
- };
-
- g.fillPolygon(xPoints, yPoints, 5);
- g.drawString(globalTime+"ms", xPoints[1]+1, yPoints[0]+TEXT_SPACEING);
- }
-
- /**
- * Gets the process at a specified y pos.
- *
- * @param yPos the y pos
- *
- * @return the process at y pos
- */
- private VSInternalProcess getProcessAtYPos(int yPos) {
- final int reachDistance = (int) (yDistance/3);
- int y = YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING;
-
- int yOffset = numProcesses > 1
- ? (int) ((paintSize-2*
- (YOFFSET+YOUTER_SPACEING+YSEPLINE_SPACEING))/
- (numProcesses-1))
- : (int) ((paintSize-2*
- (YOFFSET+YOUTER_SPACEING+YSEPLINE_SPACEING)));
-
- for (int i = 0; i < numProcesses; ++i) {
- if (yPos < y + reachDistance && yPos > y - reachDistance -
- LINE_WIDTH) {
- VSInternalProcess process = null;
- synchronized (processes) {
- process = processes.get(i);
- }
- return process;
- }
- y += yOffset;
- }
-
- return null;
- }
-
- /**
- * Gets the x position of the given time.
- *
- * @param time the time
- *
- * @return the time x position
- */
- private double getTimeXPosition(long time) {
- return XOFFSET + xpaintsize_dividedby_untiltime * time;
- }
-
- /**
- * Gets the time of a given x position
- *
- * @param xPos the x position
- *
- * @return the time
- */
- private long getXPositionTime(double xPos) {
- xPos -= XOFFSET;
-
- if (xPos <= 0)
- return 0;
-
- else if (xPos >= xPaintSize)
- return untilTime;
-
- return (long) ((untilTime/xPaintSize) * xPos);
- }
-
- /**
- * Gets the process y position.
- *
- * @param i the process num
- *
- * @return the process y position
- */
- private int getProcessYPosition(int i) {
- int y;
-
- if (numProcesses > 1)
- y = (int) ((paintSize -
- 2 * (YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING))/
- (numProcesses-1));
- else
- y = (int) ((paintSize -
- 2 * (YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING)));
-
- return y * (i - 1) + YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING;
- }
-
- /**
- * Gets the time.
- *
- * @return the time
- */
- public long getTime() {
- return simulatorTime;
- }
-
- /**
- * Gets the until time.
- *
- * @return the until time
- */
- public long getUntilTime() {
- return untilTime;
- }
-
- /**
- * Gets the start time.
- *
- * @return the start time
- */
- public long getStartTime() {
- return startTime;
- }
-
- /**
- * Gets the next process id.
- *
- * @return the next process id
- */
- public int processIDCount() {
- return ++processCounter;
- }
-
- /**
- * Gets the task manager.
- *
- * @return the task manager
- */
- public VSTaskManager getTaskManager() {
- return taskManager;
- }
-
- /**
- * Gets the num of processes.
- *
- * @return the num of processes
- */
- public int getNumProcesses() {
- return numProcesses;
- }
-
- /**
- * Gets the specified process.
- *
- * @param processNum the process num to get the process of
- *
- * @return the process
- */
- public VSInternalProcess getProcess(int processNum) {
- synchronized (processes) {
- if (processNum >= processes.size())
- return null;
-
- return processes.get(processNum);
- }
- }
-
- /* (non-Javadoc)
- * @see java.lang.Runnable#run()
- */
- public void run() {
- while (true) {
- while (!hasThreadStopped && (isPaused || hasFinished ||
- isResetted)) {
- try {
- Thread.sleep(100);
- paint();
-
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-
- if (hasThreadStopped)
- break; /* Exit the thread */
-
- while (!isPaused && !hasThreadStopped) {
- try {
- Thread.sleep(threadSleep);
- } catch (Exception e) {
- System.out.println(e);
- }
-
- updateSimulator(time, lastTime);
-
- if (simulatorTime == untilTime) {
- finish();
- break;
- }
-
- paint();
- lastTime = time;
- time = System.currentTimeMillis() - startTime;
- }
-
- updateSimulator(time, lastTime);
- paint();
- }
- }
-
- /**
- * Starts/plays the simulator.
- */
- public void play() {
- loging.log(prefs.getString("lang.en.simulator.started"));
- final long currentTime = System.currentTimeMillis();
-
- synchronized (processes) {
- for (VSInternalProcess p : processes)
- p.play();
- }
-
- if (isResetted)
- isResetted = false;
-
- else if (hasFinished)
- hasFinished = false;
-
- if (isPaused) {
- isPaused = false;
- startTime += currentTime - pauseTime;
- time = currentTime - startTime;
-
- } else {
- startTime = currentTime;
- time = 0;
- }
-
- paint();
- }
-
- /**
- * Called if the simulator has finished.
- */
- public void finish() {
- synchronized (processes) {
- for (VSInternalProcess p : processes)
- p.finish();
- }
-
- simulator.finish();
- hasFinished = true;
- loging.log(prefs.getString("lang.en.simulator.finished"));
- paint();
-
- if (prefs.getBoolean("sim.periodic")) {
- VSSimulatorFrame simulatorFrame = simulator.getSimulatorFrame();
- simulatorFrame.resetCurrentSimulator();
- simulatorFrame.startCurrentSimulator();
- }
- }
-
- /**
- * Call this, in order to pause the simulator.
- */
- public void pause() {
- isPaused = true;
- synchronized (processes) {
- for (VSInternalProcess p : processes)
- p.pause();
- }
-
- pauseTime = System.currentTimeMillis();
- loging.log(prefs.getString("lang.en.simulator.paused"));
- paint();
- }
-
- /**
- * Call this, in order to reset the simulator.
- */
- public void reset() {
- if (!isResetted) {
- loging.log(prefs.getString("lang.en.simulator.resetted"));
-
- isResetted = true;
- isPaused = false;
- hasFinished = false;
- startTime = System.currentTimeMillis();
- time = 0;
- lastTime = 0;
- clockOffset = 0;
- simulatorTime = 0;
-
- synchronized (processes) {
- for (VSInternalProcess process : processes)
- process.reset();
- }
-
- /* Reset the task manager AFTER the processes, for the programmed
- tasks */
- taskManager.reset();
-
- synchronized (processes) {
- for (VSInternalProcess process : processes)
- process.createRandomCrashTask();
- }
-
- synchronized (messageLines) {
- messageLines.clear();
- }
-
- synchronized (messageLinesToRemove) {
- messageLinesToRemove.clear();
- }
-
- paint();
- loging.clear();
- }
- }
-
- /**
- * Stops the thread of the simulator.
- */
- public void stopThread() {
- hasThreadStopped = true;
- }
-
- /**
- * Checks if the thread has been stopped.
- *
- * @return true, if is thread has stopped
- */
- public boolean hasThreadStopped() {
- return hasThreadStopped;
- }
-
- /**
- * Sets, if the the lamport time should be shown. It implicitly disables
- * the vector time.
- *
- * @param showLamport true, if the lamport time should be shown
- */
- public void showLamport(boolean showLamport) {
- this.showLamport = showLamport;
- if (isPaused)
- paint();
- }
-
- /**
- * Sets, if the vector time should be shown. It implicitly disables the
- * lamport time.
- *
- * @param showVectorTime true, if the vector time should be shown
- */
- public void showVectorTime(boolean showVectorTime) {
- this.showVectorTime = showVectorTime;
- if (isPaused)
- paint();
- }
-
- /**
- * Sets if the simulator graphics are anti aliased.
- *
- * @param isAntiAliased true, if the simulator is anti aliased
- */
- public void isAntiAliased(boolean isAntiAliased) {
- this.isAntiAliased = isAntiAliased;
- this.isAntiAliasedChanged = true;
- if (isPaused)
- paint();
- }
-
- /**
- * Sends a message.
- *
- * @param message the message
- */
- public void sendMessage(VSMessage message) {
- VSTask task = null;
- VSAbstractEvent receiveEvent = null;
- VSInternalProcess sendingProcess = (VSInternalProcess)
- message.getSendingProcess();
- long deliverTime, outageTime, durationTime;
- boolean recvOwn = prefs.getBoolean("sim.message.own.recv");
-
- synchronized (processes) {
- for (VSInternalProcess receiverProcess : processes) {
- if (receiverProcess.equals(sendingProcess)) {
- if (recvOwn) {
- deliverTime = sendingProcess.getGlobalTime();
- receiveEvent = new VSMessageReceiveEvent(message);
- task = new VSTask(deliverTime, receiverProcess,
- receiveEvent, VSTask.GLOBAL);
- taskManager.addTask(task);
- }
-
- } else {
- durationTime = sendingProcess.getDurationTime();
-
- if (prefs.getBoolean("sim.message.sendingtime.mean")) {
- durationTime += receiverProcess.getDurationTime();
- durationTime /= 2;
- }
-
- deliverTime = sendingProcess.getGlobalTime() +
- durationTime;
-
- if (prefs.getBoolean("sim.message.prob.mean"))
- outageTime = sendingProcess.getARandomMessageOutageTime(
- durationTime, receiverProcess);
- else
- outageTime = sendingProcess.getARandomMessageOutageTime(
- durationTime, null);
-
- receiveEvent = new VSMessageReceiveEvent(message);
- task = new VSTask(deliverTime, receiverProcess,
- receiveEvent, VSTask.GLOBAL);
-
- /* Only add a 'receiving message' task if the message will
- not get lost! */
- if (outageTime == -1)
- taskManager.addTask(task);
-
- synchronized (messageLines) {
- messageLines.add(
- new VSMessageLine(receiverProcess,
- sendingProcess.getGlobalTime(),
- deliverTime, outageTime,
- sendingProcess.getProcessNum(),
- receiverProcess.getProcessNum(),
- task));
- }
- }
- }
- }
- }
-
- /**
- * Edits the process.
- *
- * @param processNum the process num
- */
- public void editProcess(int processNum) {
- synchronized (processes) {
- VSInternalProcess process = processes.get(processNum);
- /* May be null if another thread changed the processes arraylist
- before this process actually called editProcess */
- if (process != null)
- editProcess(process);
- }
- }
-
- /**
- * Edits the process.
- *
- * @param process the process
- */
- public void editProcess(VSInternalProcess process) {
- if (process != null) {
- process.updatePrefs();
- new VSEditorFrame(prefs, simulator.getSimulatorFrame(),
- new VSProcessEditor(prefs, process));
- }
- }
-
- /**
- * Gets the processes array.
- *
- * @return the processes array
- */
- public ArrayList<VSInternalProcess> getProcessesArray() {
- ArrayList<VSInternalProcess> arr = new ArrayList<VSInternalProcess>();
-
- synchronized (processes) {
- for (VSInternalProcess process : processes)
- arr.add(process);
- }
-
- return arr;
- }
-
- /**
- * Gets the processes IDs.
- *
- * @return the processes IDs
- */
- public Integer[] getProcessIDs() {
- Integer pids[] = null;
-
- synchronized (processes) {
- pids = new Integer[numProcesses];
- for (int i = 0; i < numProcesses; ++i)
- pids[i] = new Integer(processes.get(i).getProcessID());
- }
-
- return pids;
- }
-
- /**
- * Gets the processes.
- *
- * @return the processes
- */
- public ArrayList<VSInternalProcess> getProcesses() {
- return processes;
- }
-
- /**
- * Updates from the prefs. Called by the VSSimulatorEditor if values
- * have been saved.
- */
- public void updateFromPrefs() {
- untilTime = prefs.getInteger("sim.seconds") * 1000;
- clockSpeed = prefs.getFloat("sim.clock.speed");
-
- secondsSpaceing = (int) (untilTime / 15000);
- if (secondsSpaceing == 0)
- secondsSpaceing = 1;
-
- threadSleep = (int) (untilTime / 7500);
- if (threadSleep == 0)
- threadSleep = 1;
-
- recalcOnChange();
- }
-
- /**
- * Removes a specific message line from the painting area.
- *
- * @param messageLine the message line to remove
- */
- private void removeMessageLine(VSMessageLine messageLine) {
- synchronized (messageLinesToRemove) {
- messageLinesToRemove.add(messageLine);
- }
- }
-
- /**
- * Removes a process from the simulator.
- *
- * @param process the process
- */
- private void removeProcess(VSInternalProcess process) {
- if (numProcesses == 1) {
- simulator.getSimulatorFrame().removeSimulator(simulator);
-
- } else {
- int index = 0;
- synchronized (processes) {
- index = processes.indexOf(process);
- processes.remove(index);
-
- for (VSInternalProcess p : processes)
- p.removedAProcessAtIndex(index);
-
- numProcesses = processes.size();
- }
-
- taskManager.removeTasksOf(process);
- simulator.removedAProcessAtIndex(index);
- recalcOnChange();
-
- ArrayList<VSMessageLine> removeThose =
- new ArrayList<VSMessageLine>();
-
- synchronized (messageLines) {
- for (VSMessageLine line : messageLines)
- if (line.removedAProcessAtIndex(index))
- removeThose.add(line);
-
- for (VSMessageLine line : removeThose) {
- VSTask deliverTask = line.getTask();
-
- if (deliverTask != null)
- taskManager.removeTask(deliverTask);
-
- messageLines.remove(line);
- }
- }
- }
- }
-
- /**
- * Creates a process with the specified num.
- *
- * @param processNum the process num
- *
- * @return the new process
- */
- private VSInternalProcess createProcess(int processNum) {
- VSInternalProcess process =
- new VSInternalProcess(prefs, processNum, this, loging);
- loging.log(prefs.getString("lang.en.process.new") + "; " + process);
- return process;
- }
-
- /**
- * Adds a new process to the simulator.
- *
- * @return The process which has been added
- */
- private VSInternalProcess addProcess() {
- VSInternalProcess newProcess = null;
- //int foo = -1;
- //System.out.println("ADD " + ++foo);
- synchronized (processes) {
- //System.out.println("ADD " + ++foo);
- numProcesses = processes.size() + 1;
- //System.out.println("ADD " + ++foo);
- newProcess = createProcess(processes.size());
- //System.out.println("ADD " + ++foo);
- //System.out.println("ADD " + ++foo);
- }
-
- //System.out.println("ADD " + ++foo);
- addProcess(newProcess);
- //System.out.println("ADD " + ++foo);
- return newProcess;
- }
-
- /**
- * Adds a the given process to the simulator.
- *
- * @newProcess The process to add
- */
- private void addProcess(VSInternalProcess newProcess) {
- //int foo = -1;
- //System.out.println("ADD_ " + ++foo);
- synchronized (processes) {
- //System.out.println("ADD_ " + ++foo);
- processes.add(newProcess);
-
- for (VSInternalProcess process : processes)
- if (!process.equals(newProcess))
- process.addedAProcess();
- //System.out.println("ADD_ " + ++foo);
- }
-
- //System.out.println("ADD_ " + ++foo);
- recalcOnChange();
- //System.out.println("ADD_ " + ++foo);
- simulator.addProcessAtIndex(processes.size()-1);
- //System.out.println("ADD_ " + ++foo);
- }
-
- /**
- * Checks if the simulation is paused.
- *
- * @return true, if the simulation is paused
- */
- boolean isPaused() {
- return isPaused;
- }
-
- /**
- * Checks if the simulation is resetted.
- *
- * @return true, if the simulation is resetted
- */
- boolean isResetted() {
- return isResetted;
- }
-
- /**
- * Checks if the simulation has finished
- *
- * @return true, if the simulation has finished
- */
- boolean hasFinished() {
- return hasFinished;
- }
-
- /* (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));
-
- objectOutputStream.writeObject(new Integer(processCounter));
-
- synchronized (processes) {
- objectOutputStream.writeObject(new Integer(numProcesses));
- for (VSInternalProcess process : processes)
- process.serialize(serialize, objectOutputStream);
- }
-
- taskManager.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: VSSimulatorVisualization");
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
-
- processCounter = ((Integer) objectInputStream.readObject()).intValue();
-
- int num = ((Integer) objectInputStream.readObject()).intValue();
- loging.clear();
-
- if (num > numProcesses) {
- for (int i = numProcesses; i < num; ++i)
- addProcess();
- } else {
- int oldNum = numProcesses;
- for (int i = num; i < oldNum; ++i)
- removeProcess(getProcess(0));
- }
-
- for (int i = 0; i < num; ++i)
- processes.get(i).deserialize(serialize, objectInputStream);
-
- taskManager.deserialize(serialize, objectInputStream);
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
- }
-}