summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-31 00:24:30 +0000
committerPaul Buetow <paul@buetow.org>2008-05-31 00:24:30 +0000
commit56e973882cd3e8358dbefa2b6307f64301f14c92 (patch)
tree95b01e3630403ad53a0f77625d244e160dd4e4c7
parent62059d598210633f2ec52cd8d2460f275fe5390b (diff)
bugfix
-rw-r--r--ROADMAP1
-rw-r--r--sources/core/VSProcess.java41
-rw-r--r--sources/simulator/VSLogging.java12
-rw-r--r--sources/simulator/VSSimulator.java46
-rw-r--r--sources/simulator/VSSimulatorCanvas.java13
5 files changed, 56 insertions, 57 deletions
diff --git a/ROADMAP b/ROADMAP
index 11bacea..763b8b9 100644
--- a/ROADMAP
+++ b/ROADMAP
@@ -1,7 +1,6 @@
Must do:
Basic Multicast
Reliable Multicast
- VSSimulationCanvas calls VSProcess.resetProcessCounter Bugfix!
Ganze simulationseinstellungen abspeichern/laden koennen
TaskManager + Tasks serialisierbar machen
VSPrefsRestriction serialisierbar machen
diff --git a/sources/core/VSProcess.java b/sources/core/VSProcess.java
index 354ebe3..6d1b01d 100644
--- a/sources/core/VSProcess.java
+++ b/sources/core/VSProcess.java
@@ -79,7 +79,7 @@ public class VSProcess extends VSPrefs {
private VSRandom random;
/** The simulation canvas. */
- private VSSimulatorCanvas simulationCanvas;
+ private VSSimulatorCanvas simulatorCanvas;
/** The random crash task. May be null if there is no such random task. */
private VSTask randomCrashTask;
@@ -132,9 +132,6 @@ public class VSProcess extends VSPrefs {
/** The local time. */
private long localTime;
- /** The process counter. Needed for the unique process id's. */
- private static int processCounter;
-
/** The Constant DEFAULT_INTEGER_VALUE_KEYS.
* This array contains all Integer prefs of the process which should show
* up in the prefs menu! All keys which dont start with "sim." only show
@@ -190,22 +187,23 @@ public class VSProcess extends VSPrefs {
*
* @param prefs the simulation's default prefs
* @param processNum the process num
- * @param simulationCanvas the simulation canvas
+ * @param simulatorCanvas the simulation canvas
* @param logging the logging object
*/
public VSProcess(VSPrefs prefs, int processNum,
- VSSimulatorCanvas simulationCanvas, VSLogging logging) {
+ VSSimulatorCanvas simulatorCanvas, VSLogging logging) {
this.protocolsToReset = new ArrayList<VSAbstractProtocol>();
this.processNum = processNum;
this.prefs = prefs;
- this.simulationCanvas = simulationCanvas;
+ this.simulatorCanvas = simulatorCanvas;
this.logging = logging;
- random = new VSRandom(processID+processCounter);
+
+ processID = simulatorCanvas.processIDCount();
+ random = new VSRandom(processID*processNum+processID+processNum);
initTimeFormats();
isPaused = true;
- processID = ++processCounter;
/* Create the super.VSPrefs with it's default prefs */
fillWithDefaults();
@@ -233,7 +231,7 @@ public class VSProcess extends VSPrefs {
vectorTimeHistory = new ArrayList<VSVectorTime>();
crashHistory = new ArrayList<Long>();
- final int numProcesses = simulationCanvas.getNumProcesses();
+ final int numProcesses = simulatorCanvas.getNumProcesses();
for (int i = 0; i < numProcesses; ++i)
vectorTime.add(new Long(0));
}
@@ -249,7 +247,7 @@ public class VSProcess extends VSPrefs {
vectorTimeHistory.clear();
crashHistory.clear();
- final int numProcesses = simulationCanvas.getNumProcesses();
+ final int numProcesses = simulatorCanvas.getNumProcesses();
for (int i = numProcesses; i > 0; --i)
vectorTime.add(new Long(0));
}
@@ -359,7 +357,7 @@ public class VSProcess extends VSPrefs {
*/
public void createRandomCrashTask() {
if (!isCrashed) {
- VSTaskManager taskManager = simulationCanvas.getTaskManager();
+ VSTaskManager taskManager = simulatorCanvas.getTaskManager();
long crashTime = getARandomCrashTime();
if (crashTime < 0)
@@ -644,7 +642,7 @@ public class VSProcess extends VSPrefs {
/* Calculate the random outage time! */
long outageTime = globalTime + random.nextLong(durationTime+1) %
- simulationCanvas.getUntilTime();
+ simulatorCanvas.getUntilTime();
return outageTime;
}
@@ -664,8 +662,8 @@ public class VSProcess extends VSPrefs {
if (getRandomPercentage() < getInteger("process.prob.crash")) {
/* Calculate the random crash time! */
final long crashTime = random.nextLong(
- simulationCanvas.getUntilTime()+1) %
- simulationCanvas.getUntilTime();
+ simulatorCanvas.getUntilTime()+1) %
+ simulatorCanvas.getUntilTime();
return crashTime;
}
@@ -826,7 +824,7 @@ public class VSProcess extends VSPrefs {
buffer.append("; ");
buffer.append(message.toStringFull());
logg(buffer.toString());
- simulationCanvas.sendMessage(message);
+ simulatorCanvas.sendMessage(message);
}
/**
@@ -906,7 +904,7 @@ public class VSProcess extends VSPrefs {
* @return the simulation canvas
*/
public VSSimulatorCanvas getSimulatorCanvas() {
- return simulationCanvas;
+ return simulatorCanvas;
}
/**
@@ -919,15 +917,6 @@ public class VSProcess extends VSPrefs {
}
/**
- * Resets the process counter. The next newly created process will have
- * "0" as its process num. This static method is used by the simulator
- * canvas if it opens a new simulation.
- */
- public static void resetProcessCounter() {
- processCounter = 0;
- }
-
- /**
* Removes the process at the specified index. Called by the simulation
* canvas if a process has been removed from the simulation. Needed in
* order to update the vector time and the local processNum.
diff --git a/sources/simulator/VSLogging.java b/sources/simulator/VSLogging.java
index bfc9d30..f240e78 100644
--- a/sources/simulator/VSLogging.java
+++ b/sources/simulator/VSLogging.java
@@ -54,7 +54,7 @@ public class VSLogging {
private ArrayList<StringBuffer> loggingLines;
/** The simulation canvas. */
- private VSSimulatorCanvas simulationCanvas;
+ private VSSimulatorCanvas simulatorCanvas;
/** The logging messages are filtered. */
private boolean isFiltered;
@@ -81,10 +81,10 @@ public class VSLogging {
/**
* Sets the simulation canvas.
*
- * @param simulationCanvas the simulation canvas
+ * @param simulatorCanvas the simulation canvas
*/
- public void setSimulationCanvas(VSSimulatorCanvas simulationCanvas) {
- this.simulationCanvas = simulationCanvas;
+ public void setSimulationCanvas(VSSimulatorCanvas simulatorCanvas) {
+ this.simulatorCanvas = simulatorCanvas;
}
/**
@@ -102,10 +102,10 @@ public class VSLogging {
* @param message the message
*/
public void logg(String message) {
- if (simulationCanvas == null)
+ if (simulatorCanvas == null)
logg(message, 0);
else
- logg(message, simulationCanvas.getTime());
+ logg(message, simulatorCanvas.getTime());
}
/**
diff --git a/sources/simulator/VSSimulator.java b/sources/simulator/VSSimulator.java
index 680a6a7..3efc09d 100644
--- a/sources/simulator/VSSimulator.java
+++ b/sources/simulator/VSSimulator.java
@@ -127,7 +127,7 @@ public class VSSimulator extends JPanel {
private VSPrefs prefs;
/** The simulation canvas. */
- private VSSimulatorCanvas simulationCanvas;
+ private VSSimulatorCanvas simulatorCanvas;
/** The simulator frame. */
private VSSimulatorFrame simulatorFrame;
@@ -398,7 +398,7 @@ public class VSSimulator extends JPanel {
splitPane1.setDividerLocation((int) (getPaintSize()/2) - 20);
- int numProcesses = simulationCanvas.getNumProcesses();
+ int numProcesses = simulatorCanvas.getNumProcesses();
for (int i = 0; i <= numProcesses; ++i) {
localTextFields.add("0000");
globalTextFields.add("0000");
@@ -408,7 +408,7 @@ public class VSSimulator extends JPanel {
localPIDComboBox.setSelectedIndex(0);
globalPIDComboBox.setSelectedIndex(0);
- thread = new Thread(simulationCanvas);
+ thread = new Thread(simulatorCanvas);
thread.start();
}
@@ -421,13 +421,13 @@ public class VSSimulator extends JPanel {
splitPaneH = new JSplitPane();
splitPaneV = new JSplitPane();
- simulationCanvas = new VSSimulatorCanvas(prefs, this, logging);
- taskManager = simulationCanvas.getTaskManager();
- logging.setSimulationCanvas(simulationCanvas);
+ simulatorCanvas = new VSSimulatorCanvas(prefs, this, logging);
+ taskManager = simulatorCanvas.getTaskManager();
+ logging.setSimulationCanvas(simulatorCanvas);
JPanel canvasPanel = new JPanel();
canvasPanel.setLayout(new GridLayout(1, 1, 3, 3));
- canvasPanel.add(simulationCanvas);
+ canvasPanel.add(simulatorCanvas);
canvasPanel.setMinimumSize(new Dimension(0, 0));
canvasPanel.setMaximumSize(new Dimension(0, 0));
@@ -488,7 +488,7 @@ public class VSSimulator extends JPanel {
AbstractButton abstractButton =
(AbstractButton) ce.getSource();
ButtonModel buttonModel = abstractButton.getModel();
- simulationCanvas.showLamport(buttonModel.isSelected());
+ simulatorCanvas.showLamport(buttonModel.isSelected());
if (buttonModel.isSelected())
vectorTimeActiveCheckBox.setSelected(false);
}
@@ -503,7 +503,7 @@ public class VSSimulator extends JPanel {
AbstractButton abstractButton =
(AbstractButton) ce.getSource();
ButtonModel buttonModel = abstractButton.getModel();
- simulationCanvas.showVectorTime(buttonModel.isSelected());
+ simulatorCanvas.showVectorTime(buttonModel.isSelected());
if (buttonModel.isSelected())
lamportActiveCheckBox.setSelected(false);
}
@@ -518,7 +518,7 @@ public class VSSimulator extends JPanel {
AbstractButton abstractButton =
(AbstractButton) ce.getSource();
ButtonModel buttonModel = abstractButton.getModel();
- simulationCanvas.isAntiAliased(buttonModel.isSelected());
+ simulatorCanvas.isAntiAliased(buttonModel.isSelected());
}
});
toolsPanel.add(antiAliasing);
@@ -600,11 +600,11 @@ public class VSSimulator extends JPanel {
globalPIDComboBox = new JComboBox();
lastSelectedProcessNum = 0;
- int numProcesses = simulationCanvas.getNumProcesses();
+ int numProcesses = simulatorCanvas.getNumProcesses();
String processString = prefs.getString("lang.process");
for (int i = 0; i < numProcesses; ++i) {
- int pid = simulationCanvas.getProcess(i).getProcessID();
+ int pid = simulatorCanvas.getProcess(i).getProcessID();
processesComboBox.addItem(processString + " " + pid);
localPIDComboBox.addItem("PID: " + pid);
globalPIDComboBox.addItem("PID: " + pid);
@@ -649,7 +649,7 @@ public class VSSimulator extends JPanel {
localPIDComboBox.setSelectedIndex(processNum);
globalPIDComboBox.setSelectedIndex(processNum);
- if (processNum == simulationCanvas.getNumProcesses()) {
+ if (processNum == simulatorCanvas.getNumProcesses()) {
tabbedPane.setEnabledAt(1, false);
if (tabbedPane.getSelectedIndex() == 1)
tabbedPane.setSelectedIndex(0);
@@ -658,7 +658,7 @@ public class VSSimulator extends JPanel {
tabbedPane.setEnabledAt(1, true);
}
- if (processNum != simulationCanvas.getNumProcesses()) {
+ if (processNum != simulatorCanvas.getNumProcesses()) {
VSProcess process = getSelectedProcess();
VSProcessEditor processEditor =
new VSProcessEditor(prefs, process);
@@ -1009,7 +1009,7 @@ public class VSSimulator extends JPanel {
*/
private VSProcess getSelectedProcess() {
int processNum = getSelectedProcessNum();
- return simulationCanvas.getProcess(processNum);
+ return simulatorCanvas.getProcess(processNum);
}
/**
@@ -1025,11 +1025,11 @@ public class VSSimulator extends JPanel {
? localPIDComboBox.getSelectedIndex()
: globalPIDComboBox.getSelectedIndex();
- if (processNum == simulationCanvas.getNumProcesses())
- return simulationCanvas.getProcessesArray();
+ if (processNum == simulatorCanvas.getNumProcesses())
+ return simulatorCanvas.getProcessesArray();
ArrayList<VSProcess> arr = new ArrayList<VSProcess>();
- arr.add(simulationCanvas.getProcess(processNum));
+ arr.add(simulatorCanvas.getProcess(processNum));
return arr;
}
@@ -1081,7 +1081,7 @@ public class VSSimulator extends JPanel {
* @return the simulation canvas
*/
public VSSimulatorCanvas getSimulatorCanvas() {
- return simulationCanvas;
+ return simulatorCanvas;
}
/**
@@ -1097,8 +1097,8 @@ public class VSSimulator extends JPanel {
* Update from prefs.
*/
public void updateFromPrefs() {
- simulationCanvas.setBackground(prefs.getColor("col.background"));
- simulationCanvas.updateFromPrefs();
+ simulatorCanvas.setBackground(prefs.getColor("col.background"));
+ simulatorCanvas.updateFromPrefs();
}
/**
@@ -1128,7 +1128,7 @@ public class VSSimulator extends JPanel {
* @param index the index
*/
public void addProcessAtIndex(int index) {
- int processID = simulationCanvas.getProcess(index).getProcessID();
+ int processID = simulatorCanvas.getProcess(index).getProcessID();
String processString = prefs.getString("lang.process");
localTextFields.add(index, "0000");
@@ -1172,7 +1172,7 @@ public class VSSimulator extends JPanel {
tabbedPane.setSelectedIndex(selectedIndex);
/* Update the 'Variables tab' */
- if (getSelectedProcessNum() != simulationCanvas.getNumProcesses()) {
+ if (getSelectedProcessNum() != simulatorCanvas.getNumProcesses()) {
VSProcess process = getSelectedProcess();
VSProcessEditor editor = new VSProcessEditor(prefs, process);
tabbedPane.setComponentAt(1, editor.getContentPane());
diff --git a/sources/simulator/VSSimulatorCanvas.java b/sources/simulator/VSSimulatorCanvas.java
index be66f2a..c1ddd65 100644
--- a/sources/simulator/VSSimulatorCanvas.java
+++ b/sources/simulator/VSSimulatorCanvas.java
@@ -220,6 +220,9 @@ public class VSSimulatorCanvas extends Canvas implements Runnable {
/** 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.
@@ -458,7 +461,6 @@ public class VSSimulatorCanvas extends Canvas implements Runnable {
numProcesses = prefs.getInteger("sim.process.num");
updateFromPrefs();
- VSProcess.resetProcessCounter();
for (int i = 0; i < numProcesses; ++i)
processes.add(createProcess(i));
@@ -1029,6 +1031,15 @@ public class VSSimulatorCanvas extends Canvas implements Runnable {
}
/**
+ * Gets the next process id.
+ *
+ * @return the next process id
+ */
+ public int processIDCount() {
+ return ++processCounter;
+ }
+
+ /**
* Gets the task manager.
*
* @return the task manager