diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-17 14:55:16 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-17 14:55:16 +0000 |
| commit | 271949bf140359dd97cbee9ef927ee9280c9f31f (patch) | |
| tree | 31cd0e175401d2041e23128402c235eb6d2e3117 /sources/simulator | |
| parent | 5a0924146201bc577ca170952a21a42464ac7c71 (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.java | 10 | ||||
| -rw-r--r-- | sources/simulator/VSSimulation.java | 21 | ||||
| -rw-r--r-- | sources/simulator/VSSimulationPanel.java | 72 |
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())); } } } |
