summaryrefslogtreecommitdiff
path: root/src/main/java/events/implementations/VSLamportTimestampEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/events/implementations/VSLamportTimestampEvent.java')
-rw-r--r--src/main/java/events/implementations/VSLamportTimestampEvent.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/main/java/events/implementations/VSLamportTimestampEvent.java b/src/main/java/events/implementations/VSLamportTimestampEvent.java
new file mode 100644
index 0000000..272ea06
--- /dev/null
+++ b/src/main/java/events/implementations/VSLamportTimestampEvent.java
@@ -0,0 +1,119 @@
+package events.implementations;
+
+import core.VSInternalProcess;
+
+/**
+ * Concrete implementation of a Lamport timestamp-triggered event.
+ * This event fires when a specific Lamport timestamp condition is met.
+ *
+ * Example usage:
+ * - Fire when Lamport time equals 10
+ * - Fire when Lamport time reaches 50 or greater
+ * - Fire when Lamport time is less than 5
+ *
+ * @author Paul C. Buetow
+ */
+public class VSLamportTimestampEvent extends VSTimestampTriggeredEvent {
+
+ private String actionDescription;
+ private Runnable customAction;
+
+ /**
+ * Constructor for basic Lamport timestamp event
+ */
+ public VSLamportTimestampEvent(long targetLamport, ComparisonOperator op) {
+ super(targetLamport, op);
+ this.actionDescription = "Lamport timestamp condition met";
+ }
+
+ /**
+ * Constructor with custom action description
+ */
+ public VSLamportTimestampEvent(long targetLamport, ComparisonOperator op, String description) {
+ super(targetLamport, op);
+ this.actionDescription = description;
+ }
+
+ /**
+ * Constructor with custom action
+ */
+ public VSLamportTimestampEvent(long targetLamport, ComparisonOperator op, String description, Runnable action) {
+ super(targetLamport, op);
+ this.actionDescription = description;
+ this.customAction = action;
+ }
+
+ /**
+ * Default constructor for serialization
+ */
+ public VSLamportTimestampEvent() {
+ super();
+ this.actionDescription = "Lamport timestamp event";
+ }
+
+ @Override
+ public void onInit() {
+ super.onInit();
+ }
+
+ @Override
+ protected void onTimestampReached() {
+ VSInternalProcess internalProcess = (VSInternalProcess) process;
+
+ // Log the event
+ String message = String.format("Lamport timestamp event triggered: %s (current: %d, target: %d %s)",
+ actionDescription,
+ internalProcess.getLamportTime(),
+ targetLamportTime,
+ operator);
+
+ internalProcess.log(message);
+
+ // Execute custom action if provided
+ if (customAction != null) {
+ try {
+ customAction.run();
+ } catch (Exception e) {
+ internalProcess.log("Error executing custom action: " + e.getMessage());
+ }
+ }
+
+ // Default behavior: change process color to indicate trigger
+ changeProcessColor();
+ }
+
+ /**
+ * Change process color to indicate the timestamp event has been triggered
+ */
+ protected void changeProcessColor() {
+ if (process instanceof VSInternalProcess) {
+ VSInternalProcess internalProcess = (VSInternalProcess) process;
+ // Change to highlight color temporarily
+ internalProcess.highlightOn();
+ }
+ }
+
+ @Override
+ public String toString() {
+ return String.format(" [LamportTrigger: %d %s - %s]",
+ targetLamportTime, operator, actionDescription);
+ }
+
+ // Getters and setters
+ public String getActionDescription() {
+ return actionDescription;
+ }
+
+ public void setActionDescription(String description) {
+ this.actionDescription = description;
+ }
+
+ public void setCustomAction(Runnable action) {
+ this.customAction = action;
+ }
+
+ @Override
+ protected String createShortname(String savedShortname) {
+ return "LamportTrigger";
+ }
+} \ No newline at end of file