summaryrefslogtreecommitdiff
path: root/sources/simulator
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-17 14:55:16 +0000
committerPaul Buetow <paul@buetow.org>2008-05-17 14:55:16 +0000
commit271949bf140359dd97cbee9ef927ee9280c9f31f (patch)
tree31cd0e175401d2041e23128402c235eb6d2e3117 /sources/simulator
parent5a0924146201bc577ca170952a21a42464ac7c71 (diff)
Vectortimestamps work
Better representation of Lamporttimestamps BerkelyTimeProtocol M trunk/ROADMAP M trunk/sources/prefs/VSPrefs.java M trunk/sources/prefs/VSDefaultPrefs.java M trunk/sources/simulator/VSMain.java M trunk/sources/simulator/VSSimulation.java M trunk/sources/simulator/VSSimulationPanel.java M trunk/sources/utils/VSFrame.java M trunk/sources/utils/VSClassLoader.java M trunk/sources/utils/VSInfoArea.java M trunk/sources/protocols/BroadcastSturmProtocol.java M trunk/sources/protocols/ExternalTimeSyncProtocol.java M trunk/sources/protocols/RegisteredProtocols.java M trunk/sources/protocols/PingPongProtocol.java M trunk/sources/protocols/InternalTimeSyncProtocol.java M trunk/sources/protocols/VSProtocol.java M trunk/sources/protocols/DummyProtocol.java A trunk/sources/protocols/BerkelyTimeProtocol.java M trunk/sources/core/VSLamport.java M trunk/sources/core/VSProcess.java A trunk/sources/core/VSTime.java A trunk/sources/core/VSVectorTime.java M trunk/sources/core/VSTask.java M trunk/sources/core/VSMessage.java M trunk/sources/editors/VSEditor.java M trunk/sources/editors/VSProtocolEditor.java M trunk/sources/editors/VSSimulationEditor.java M trunk/sources/editors/VSEditorFrame.java M trunk/sources/editors/VSProcessEditor.java
Diffstat (limited to 'sources/simulator')
-rw-r--r--sources/simulator/VSMain.java10
-rw-r--r--sources/simulator/VSSimulation.java21
-rw-r--r--sources/simulator/VSSimulationPanel.java72
3 files changed, 78 insertions, 25 deletions
diff --git a/sources/simulator/VSMain.java b/sources/simulator/VSMain.java
index 9280eeb..db64092 100644
--- a/sources/simulator/VSMain.java
+++ b/sources/simulator/VSMain.java
@@ -10,14 +10,14 @@ import protocols.*;
public class VSMain {
public VSMain(VSPrefs prefs) {
- initialize(prefs, null);
+ init(prefs, null);
}
public VSMain(VSPrefs prefs, Component relativeTo) {
- initialize(prefs, relativeTo);
+ init(prefs, relativeTo);
}
- private void initialize(VSPrefs prefs, Component relativeTo) {
+ private void init(VSPrefs prefs, Component relativeTo) {
new VSSimulationEditor(prefs, relativeTo);
}
@@ -27,8 +27,8 @@ public class VSMain {
UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) { }
- VSPrefs prefs = VSDefaultPrefs.initialize();
- RegisteredProtocols.initialize(prefs);
+ VSPrefs prefs = VSDefaultPrefs.init();
+ RegisteredProtocols.init(prefs);
new VSMain(prefs);
}
}
diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java
index 2bc90d8..89ffd7c 100644
--- a/sources/simulator/VSSimulation.java
+++ b/sources/simulator/VSSimulation.java
@@ -23,6 +23,8 @@ public class VSSimulation extends VSFrame implements ActionListener {
private VSPrefs prefs;
private boolean hasStarted = false;
private VSLogging logging;
+ private JCheckBox lamportActiveCheckBox;
+ private JCheckBox vectorTimeActiveCheckBox;
public VSSimulation (VSPrefs prefs, Component relativeTo) {
super(prefs.getString("name"), relativeTo);
@@ -193,17 +195,32 @@ public class VSSimulation extends VSFrame implements ActionListener {
});
toolsPanel.add(loggingActiveCheckBox);
- JCheckBox lamportActiveCheckBox = new JCheckBox(prefs.getString("lang.time.lamport"));
+ lamportActiveCheckBox = new JCheckBox(prefs.getString("lang.time.lamport"));
lamportActiveCheckBox.setSelected(false);
lamportActiveCheckBox.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent ce) {
AbstractButton abstractButton = (AbstractButton) ce.getSource();
ButtonModel buttonModel = abstractButton.getModel();
simulationPanel.showLamport(buttonModel.isSelected());
+ if (buttonModel.isSelected())
+ vectorTimeActiveCheckBox.setSelected(false);
}
});
toolsPanel.add(lamportActiveCheckBox);
+ vectorTimeActiveCheckBox = new JCheckBox(prefs.getString("lang.time.vector"));
+ vectorTimeActiveCheckBox.setSelected(false);
+ vectorTimeActiveCheckBox.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent ce) {
+ AbstractButton abstractButton = (AbstractButton) ce.getSource();
+ ButtonModel buttonModel = abstractButton.getModel();
+ simulationPanel.showVectorTime(buttonModel.isSelected());
+ if (buttonModel.isSelected())
+ lamportActiveCheckBox.setSelected(false);
+ }
+ });
+ toolsPanel.add(vectorTimeActiveCheckBox);
+
return toolsPanel;
}
@@ -252,7 +269,7 @@ public class VSSimulation extends VSFrame implements ActionListener {
dispose();
} else if (source.getText().equals(prefs.getString("lang.new"))) {
- new VSMain(VSDefaultPrefs.initialize(), VSSimulation.this);
+ new VSMain(VSDefaultPrefs.init(), VSSimulation.this);
} else if (source.getText().equals(prefs.getString("lang.about"))) {
new VSAbout(prefs, VSSimulation.this);
diff --git a/sources/simulator/VSSimulationPanel.java b/sources/simulator/VSSimulationPanel.java
index f0d3d75..89fd0ad 100644
--- a/sources/simulator/VSSimulationPanel.java
+++ b/sources/simulator/VSSimulationPanel.java
@@ -26,6 +26,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
private volatile boolean isFinished = false;
private volatile boolean isResetted = false;
private volatile boolean showLamport = false;
+ private volatile boolean showVectorTime = false;
private volatile long pauseTime;
private volatile long startTime;
private volatile long time;
@@ -39,9 +40,10 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
private static final int SEPLINE_WIDTH = 2;
private static final int XOFFSET = 50;
private static final int YOFFSET = 30;
- private static final int YOUTER_SPACEING = 10;
+ private static final int YOUTER_SPACEING = 15;
private static final int YSEPLINE_SPACEING = 20;
private static final int TEXT_SPACEING = 10;
+ private static final int ROW_HEIGHT = 14;
/* Constats, which have to get calculated once after start */
private Color processlineColor;
@@ -226,7 +228,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
}
public VSProcess createProcess(int i) {
- VSProcess process = new VSProcess(prefs, this, logging, i+1);
+ VSProcess process = new VSProcess(prefs, this, logging);
processes.add(process);
logging.logg(prefs.getString("lang.process.new") + "; " + process);
@@ -293,24 +295,52 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
g.drawLine(xPos, yStart, xPos, yEnd);
g.drawString(localTime+"ms", xPos + 2, yStart + TEXT_SPACEING);
- if (showLamport) {
- int last = -1;
- final int distance = 20;
- final VSLamport[] lamportStamps = process.getLamportArray();
- for (VSLamport lamport : lamportStamps) {
- int xPos_ = (int) getTimeXPosition(lamport.getTime());
- if (last >= 0) {
- int diff = xPos_ - last;
- if (diff < distance)
- xPos_ += distance - diff;
+ 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;
+ }
+ }
+
+ private void paintTime(final Graphics2D g, final VSTime times[], final VSProcess 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;
}
- g.drawString(""+lamport.getLamportTime(), xPos_ + 2, yStart + 3 * TEXT_SPACEING);
- last = xPos_;
+ } else {
+ bestRow[0] = i;
+ bestRow[1] = -1;
+ break;
}
}
- for (int i = 0; i < 5; ++i)
- yPoints[i] += paintProcessesOffset;
+ 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;
}
}
@@ -324,7 +354,8 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
final int xStringPos = paintSecondlinesLine[0] - 5;
g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos1);
- g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos2);
+ if (!showVectorTime && !showLamport)
+ g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos2);
}
if (i > paintSecondlinesSeconds) {
@@ -529,6 +560,11 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
repaint();
}
+ public void showVectorTime(boolean showVectorTime) {
+ this.showVectorTime = showVectorTime;
+ repaint();
+ }
+
public void sendMessage(VSMessage message) {
VSTask task = null;
VSProcess sendingProcess = message.getSendingProcess();
@@ -554,7 +590,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
synchronized (messageLines) {
messageLines.add(new VSMessageLine(receiverProcess,
sendingProcess.getGlobalTime(), deliverTime, outageTime,
- sendingProcess.getNum(), receiverProcess.getNum()));
+ sendingProcess.getProcessID(), receiverProcess.getProcessID()));
}
}
}