summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-17 20:36:00 +0000
committerPaul Buetow <paul@buetow.org>2008-05-17 20:36:00 +0000
commitdbb780b7295c0df60269ee6f3c85c3056d6262b8 (patch)
treed8f084283d6b5b86482e7edb3d7fc786de737ceb
parenta622ebff377f37d14535f91e484335e2ad215acb (diff)
VSEvent interface has now has the init method.
-rw-r--r--sources/core/VSMessage.java12
-rw-r--r--sources/core/VSProcess.java6
-rw-r--r--sources/core/VSTask.java18
-rw-r--r--sources/events/VSEvent.java3
-rw-r--r--sources/events/VSProcessEvent.java11
-rw-r--r--sources/events/implementations/ProcessCrashEvent.java5
-rw-r--r--sources/events/implementations/ProcessRecoverEvent.java5
-rw-r--r--sources/prefs/VSDefaultPrefs.java62
-rw-r--r--sources/protocols/VSProtocol.java2
-rw-r--r--sources/simulator/VSSimulationPanel.java52
10 files changed, 114 insertions, 62 deletions
diff --git a/sources/core/VSMessage.java b/sources/core/VSMessage.java
index 1ccad7f..1bd4ca6 100644
--- a/sources/core/VSMessage.java
+++ b/sources/core/VSMessage.java
@@ -18,6 +18,12 @@ public class VSMessage extends VSPrefs implements VSEvent {
this.messageID = ++messageCounter;
}
+ public void init(VSProcess process) {
+ this.sendingProcess = process;
+ lamportTime = sendingProcess.getLamportTime();
+ vectorTime = sendingProcess.getVectorTime().getCopy();
+ }
+
public String getProtocolName() {
return VSRegisteredProtocols.getProtocolName(getProtocolClassname());
}
@@ -30,12 +36,6 @@ public class VSMessage extends VSPrefs implements VSEvent {
return messageID;
}
- public void setSendingProcess(VSProcess sendingProcess) {
- this.sendingProcess = sendingProcess;
- lamportTime = sendingProcess.getLamportTime();
- vectorTime = sendingProcess.getVectorTime().getCopy();
- }
-
public VSProcess getSendingProcess() {
return sendingProcess;
}
diff --git a/sources/core/VSProcess.java b/sources/core/VSProcess.java
index 5c3435e..e3d260e 100644
--- a/sources/core/VSProcess.java
+++ b/sources/core/VSProcess.java
@@ -5,6 +5,7 @@ import java.util.*;
import core.time.*;
import events.*;
+import events.implementations.*;
import prefs.*;
import protocols.*;
import simulator.*;
@@ -225,9 +226,10 @@ public final class VSProcess extends VSPrefs {
taskManager.removeTask(randomCrashTask);
if (crashTime >= 0 && crashTime >= getGlobalTime()) {
- randomCrashTask = new VSTask(crashTime, this, new ProcessCrashEvent());
+ VSProcessEvent event = new ProcessCrashEvent();
+ event.init(this);
+ randomCrashTask = new VSTask(crashTime, this, event);
taskManager.addTask(randomCrashTask);
- //System.out.println("DEBUG " + processID + " crashes at " + crashTime);
} else {
randomCrashTask = null;
diff --git a/sources/core/VSTask.java b/sources/core/VSTask.java
index 26b2485..d481300 100644
--- a/sources/core/VSTask.java
+++ b/sources/core/VSTask.java
@@ -5,7 +5,7 @@ import events.*;
import protocols.VSProtocol;
import simulator.*;
-public class VSTask implements Comparable {
+public class VSTask {
//public final static int RUN_ON_CLIENT_START = 1;
private long taskTime;
private VSEvent event;
@@ -114,7 +114,7 @@ public class VSTask implements Comparable {
private void onProcessEventStart() {
final VSProcessEvent processEvent = (VSProcessEvent) event;
- processEvent.onStart(process);
+ processEvent.onStart();
}
public long getTaskTime() {
@@ -129,20 +129,6 @@ public class VSTask implements Comparable {
process.logg(message);
}
- public int compareTo(Object object) {
- if (object instanceof VSTask) {
- final VSTask task = (VSTask) object;
-
- if (taskTime < task.getTaskTime())
- return -1;
-
- else if (taskTime > task.getTaskTime())
- return 1;
- }
-
- return 0;
- }
-
public String toString() {
String descr = "VSTask: " + getTaskTime();
diff --git a/sources/events/VSEvent.java b/sources/events/VSEvent.java
index cf5ab5b..2435320 100644
--- a/sources/events/VSEvent.java
+++ b/sources/events/VSEvent.java
@@ -1,4 +1,7 @@
package events;
+import core.VSProcess;
+
public interface VSEvent {
+ public void init(VSProcess process);
}
diff --git a/sources/events/VSProcessEvent.java b/sources/events/VSProcessEvent.java
index cb651ad..28f6b86 100644
--- a/sources/events/VSProcessEvent.java
+++ b/sources/events/VSProcessEvent.java
@@ -1,7 +1,16 @@
package events;
import core.VSProcess;
+import prefs.VSPrefs;
abstract public class VSProcessEvent implements VSEvent {
- abstract public void onStart(VSProcess process);
+ protected VSProcess process;
+ protected VSPrefs prefs;
+
+ public void init(VSProcess process) {
+ this.process = process;
+ this.prefs = process.getPrefs();
+ }
+
+ abstract public void onStart();
}
diff --git a/sources/events/implementations/ProcessCrashEvent.java b/sources/events/implementations/ProcessCrashEvent.java
index 6f28e9a..de5dfa5 100644
--- a/sources/events/implementations/ProcessCrashEvent.java
+++ b/sources/events/implementations/ProcessCrashEvent.java
@@ -1,10 +1,11 @@
package events.implementations;
import core.VSProcess;
+import events.VSProcessEvent;
public class ProcessCrashEvent extends VSProcessEvent {
- public void onStart(VSProcess process) {
- process.logg("Crashed");
+ public void onStart() {
+ process.logg(prefs.getString("lang.crashed"));
process.isCrashed(true);
}
}
diff --git a/sources/events/implementations/ProcessRecoverEvent.java b/sources/events/implementations/ProcessRecoverEvent.java
index 02b8495..6522537 100644
--- a/sources/events/implementations/ProcessRecoverEvent.java
+++ b/sources/events/implementations/ProcessRecoverEvent.java
@@ -1,10 +1,11 @@
package events.implementations;
import core.VSProcess;
+import events.VSProcessEvent;
public class ProcessRecoverEvent extends VSProcessEvent {
- public void onStart(VSProcess process) {
- process.logg("Recovered");
+ public void onStart() {
+ process.logg(prefs.getString("lang.recovered"));
process.isCrashed(false);
}
}
diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java
index 07876d6..13a0167 100644
--- a/sources/prefs/VSDefaultPrefs.java
+++ b/sources/prefs/VSDefaultPrefs.java
@@ -39,66 +39,63 @@ public class VSDefaultPrefs extends VSPrefs {
}
public void fillDefaultStrings() {
- /* Internal prefs */
- initString("lang.time.vector", "Vektorzeit");
- initString("lang.time.lamport", "Lamportzeit");
- initString("lang.message.sent", "Nachricht versendet");
- initString("lang.logging.active", "Logging");
- initString("lang.logging.clear", "Loggs löschen");
- initString("lang.message", "Nachricht");
- initString("lang.message.recv", "Nachricht erhalten");
initString("lang.about", "About");
initString("lang.about.info!", "Dieses Programm wurde von Paul Bütow im Rahmen der Diplomarbeit bei Prof. Dr.-Ing. Oßmann erstellt. Dieses Programm stellt noch keinesfalls eine fertige Version dar, da es sich noch in Entwicklung befindet und die Diplomarbeit erst mitte August abgeschlossen sein wird! Bei Fehlern bitte eine kurze Mail mitsamt Fehlerbeschreibung an paul@buetow.org schicken! Dieser Simulator wird später außerdem unter einer open source Linzenz (wahrscheinlich der GNU General Public License) freigegeben!");
+ initString("lang.activate", "aktivieren");
+ initString("lang.activated", "Aktiviert");
+ initString("lang.actualize", "Aktualisieren");
initString("lang.cancel", "Abbrechen");
+ initString("lang.client", "Client");
initString("lang.close", "Schliessen");
- initString("lang.requesttime", "Requestzeit");
initString("lang.colorchooser", "Farbauswahl");
initString("lang.colorchooser2", "Bitte Farbe auswählen");
+ initString("lang.crash", "Abstürzen");
+ initString("lang.crashed", "Abgestürzt");
initString("lang.default", "Defaults");
- initString("lang.remove", "Entfernen");
- initString("lang.filter", "Filter");
initString("lang.edit", "Editieren");
initString("lang.editor", "Editor");
- initString("lang.activate", "aktivieren");
- initString("lang.activated", "Aktiviert");
- initString("lang.server", "Server");
- initString("lang.client", "Client");
- initString("lang.type", "Typ");
- initString("lang.taskmanager", "Taskmanager");
- initString("lang.protocol", "Protokoll");
- initString("lang.protocol.editor", "Protokolleditor");
- initString("lang.protocol.tasks.activation", "Client-/Serverprotokoll Aktivierung");
- initString("lang.protocol.tasks.client", "Client Task-Manager (Clientanfragen)");
- //initString("lang.protocol.tasks.server", "Server Task-Manager (onServerStart Schedule)");
- initString("lang.protocol.client", "Clientseite");
- initString("lang.protocol.server", "Serverseite");
initString("lang.file", "Datei");
+ initString("lang.filter", "Filter");
+ initString("lang.logging.active", "Logging");
+ initString("lang.logging.clear", "Loggs löschen");
+ initString("lang.message", "Nachricht");
+ initString("lang.message.recv", "Nachricht erhalten");
+ initString("lang.message.sent", "Nachricht versendet");
initString("lang.new", "Neu");
initString("lang.ok", "OK");
- initString("lang.actualize", "Aktualisieren");
- initString("lang.takeover", "Übernehmen");
initString("lang.open", "Öffnen");
initString("lang.pause", "Pausieren");
initString("lang.prefs", "Einstellungen");
- initString("lang.prefs.more", "Mehr Einstellungen");
initString("lang.prefs.ext", "Erweiterte Einstellungen");
initString("lang.prefs.info!", "Prozesseinstellungen können später für jeden Prozess einzelnd eingestellt werden.Die folgenden Werte sind lediglich die globalen Defaultwerte, die für neue Prozesse verwendet werden!");
- initString("lang.prefs.protocol", "Protokolleinstellungen");
+ initString("lang.prefs.more", "Mehr Einstellungen");
initString("lang.prefs.process", "Prozesseinstellungen");
initString("lang.prefs.process.ext", "Erweiterte Prozesseinstellungen");
initString("lang.prefs.process.info!", "Änderungen werden erst nach Betätigen des \"Übernehmen\" oder \"OK\" Knopfes übernommen!");
+ initString("lang.prefs.protocol", "Protokolleinstellungen");
initString("lang.prefs.protocol.info!", "Änderungen werden erst nach Betätigen des \"Übernehmen\" oder \"OK\" Knopfes übernommen!");
+ initString("lang.process", "Prozess");
initString("lang.process.clock.variance", "Uhrabweichung");
initString("lang.process.id", "PID");
initString("lang.process.new", "Neuer Prozess");
+ initString("lang.process.task", "Prozess-Task");
initString("lang.process.time.local", "Lokale Zeit");
+ initString("lang.protocol", "Protokoll");
+ initString("lang.protocol.client", "Clientseite");
+ initString("lang.protocol.editor", "Protokolleditor");
+ initString("lang.protocol.server", "Serverseite");
+ initString("lang.protocol.tasks.activation", "Client-/Serverprotokoll Aktivierung");
+ initString("lang.protocol.tasks.client", "Client Task-Manager (Clientanfragen)");
initString("lang.quit", "Beenden");
+ initString("lang.recover", "Wiederbeleben");
+ initString("lang.recovered", "Wiederbelebt");
+ initString("lang.remove", "Entfernen");
initString("lang.replay", "Wiederholen");
- initString("lang.process", "Prozess");
+ initString("lang.requesttime", "Requestzeit");
initString("lang.reset", "Reset");
initString("lang.save", "Speichern");
initString("lang.saveas", "Speichern unter");
- initString("lang.process.task", "Prozess-Task");
+ initString("lang.server", "Server");
initString("lang.simulation", "Simulation");
initString("lang.simulation.finished", "Simulation beendet");
initString("lang.simulation.new", "Neue Simulation");
@@ -107,6 +104,11 @@ public class VSDefaultPrefs extends VSPrefs {
initString("lang.simulation.started", "Simulation gestartet");
initString("lang.start", "Starten");
initString("lang.stop", "Stoppen");
+ initString("lang.takeover", "Übernehmen");
+ initString("lang.taskmanager", "Taskmanager");
+ initString("lang.time.lamport", "Lamportzeit");
+ initString("lang.time.vector", "Vektorzeit");
+ initString("lang.type", "Typ");
initString("name", "Verteilte Systeme v0.2-devel");
}
diff --git a/sources/protocols/VSProtocol.java b/sources/protocols/VSProtocol.java
index 7154c78..761c427 100644
--- a/sources/protocols/VSProtocol.java
+++ b/sources/protocols/VSProtocol.java
@@ -41,7 +41,7 @@ abstract public class VSProtocol extends VSPrefs implements VSEvent {
protected void sendMessage(VSMessage message) {
process.increaseLamportTime();
process.increaseVectorTime();
- message.setSendingProcess(process);
+ message.init(process);
process.sendMessage(message);
}
diff --git a/sources/simulator/VSSimulationPanel.java b/sources/simulator/VSSimulationPanel.java
index 7fd0c23..e750b0a 100644
--- a/sources/simulator/VSSimulationPanel.java
+++ b/sources/simulator/VSSimulationPanel.java
@@ -9,6 +9,7 @@ import javax.swing.*;
import core.*;
import core.time.*;
import events.*;
+import events.implementations.*;
import prefs.*;
import prefs.editors.*;
import utils.*;
@@ -603,8 +604,55 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
}
public void mouseClicked(MouseEvent e) {
- VSProcess process = getProcessAtYPos(e.getY());
- editProcess(process);
+ final VSProcess process = getProcessAtYPos(e.getY());
+
+ if (process == null)
+ return;
+
+ if (SwingUtilities.isRightMouseButton(e)) {
+ ActionListener actionListener = new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ String actionCommand = ae.getActionCommand();
+ if (actionCommand.equals(prefs.getString("lang.edit"))) {
+ editProcess(process);
+
+ } else if (actionCommand.equals(prefs.getString("lang.crash"))) {
+ VSProcessEvent event = new ProcessCrashEvent();
+ event.init(process);
+ taskManager.addTask(new VSTask(process.getTime(), process, event));
+
+ } else if (actionCommand.equals(prefs.getString("lang.recover"))) {
+ VSProcessEvent event = new ProcessRecoverEvent();
+ event.init(process);
+ taskManager.addTask(new VSTask(process.getTime(), process, event));
+ }
+ }
+ };
+
+ JPopupMenu popup = new JPopupMenu();
+ JMenuItem item = new JMenuItem(prefs.getString("lang.edit"));
+ item.addActionListener(actionListener);
+ popup.add(item);
+
+ item = new JMenuItem(prefs.getString("lang.crash"));
+ if (process.isCrashed() || isPaused || time == 0)
+ item.setEnabled(false);
+ else
+ item.addActionListener(actionListener);
+ popup.add(item);
+
+ item = new JMenuItem(prefs.getString("lang.recover"));
+ if (!process.isCrashed() || isPaused || time == 0)
+ item.setEnabled(false);
+ else
+ item.addActionListener(actionListener);
+ popup.add(item);
+
+ popup.show(e.getComponent(), e.getX(), e.getY());
+
+ } else {
+ editProcess(process);
+ }
}
public void editProcess(int processNum) {