summaryrefslogtreecommitdiff
path: root/src/main/java/events/implementations/VSVectorTimestampEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/events/implementations/VSVectorTimestampEvent.java')
-rw-r--r--src/main/java/events/implementations/VSVectorTimestampEvent.java142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/main/java/events/implementations/VSVectorTimestampEvent.java b/src/main/java/events/implementations/VSVectorTimestampEvent.java
new file mode 100644
index 0000000..4d3b327
--- /dev/null
+++ b/src/main/java/events/implementations/VSVectorTimestampEvent.java
@@ -0,0 +1,142 @@
+package events.implementations;
+
+import core.VSInternalProcess;
+import core.time.VSVectorTime;
+
+/**
+ * Concrete implementation of a Vector timestamp-triggered event.
+ * This event fires when a specific Vector timestamp condition is met.
+ *
+ * Example usage:
+ * - Fire when vector clock equals [3,2,1]
+ * - Fire when vector clock is greater than or equal to [5,0,2]
+ * - Fire when any element in vector clock reaches a threshold
+ *
+ * @author Paul C. Buetow
+ */
+public class VSVectorTimestampEvent extends VSTimestampTriggeredEvent {
+
+ private String actionDescription;
+ private Runnable customAction;
+
+ /**
+ * Constructor for basic Vector timestamp event
+ */
+ public VSVectorTimestampEvent(VSVectorTime targetVector, ComparisonOperator op) {
+ super(targetVector, op);
+ this.actionDescription = "Vector timestamp condition met";
+ }
+
+ /**
+ * Constructor with custom action description
+ */
+ public VSVectorTimestampEvent(VSVectorTime targetVector, ComparisonOperator op, String description) {
+ super(targetVector, op);
+ this.actionDescription = description;
+ }
+
+ /**
+ * Constructor with custom action
+ */
+ public VSVectorTimestampEvent(VSVectorTime targetVector, ComparisonOperator op, String description, Runnable action) {
+ super(targetVector, op);
+ this.actionDescription = description;
+ this.customAction = action;
+ }
+
+ /**
+ * Default constructor for serialization
+ */
+ public VSVectorTimestampEvent() {
+ super();
+ this.actionDescription = "Vector timestamp event";
+ }
+
+ @Override
+ public void onInit() {
+ super.onInit();
+ }
+
+ @Override
+ protected void onTimestampReached() {
+ VSInternalProcess internalProcess = (VSInternalProcess) process;
+
+ // Log the event
+ String message = String.format("Vector timestamp event triggered: %s (current: %s, target: %s %s)",
+ actionDescription,
+ internalProcess.getVectorTime(),
+ targetVectorTime,
+ 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();
+ }
+ }
+
+ /**
+ * Convenience method to create event that triggers when any vector element reaches threshold
+ */
+ public static VSVectorTimestampEvent createThresholdEvent(int processCount, long threshold, String description) {
+ VSVectorTime targetVector = new VSVectorTime(0);
+ for (int i = 0; i < processCount; i++) {
+ targetVector.add(threshold);
+ }
+ return new VSVectorTimestampEvent(targetVector, ComparisonOperator.GREATER_EQUAL, description);
+ }
+
+ /**
+ * Convenience method to create event that triggers when specific process element reaches value
+ */
+ public static VSVectorTimestampEvent createProcessThresholdEvent(int processCount, int processIndex, long threshold, String description) {
+ VSVectorTime targetVector = new VSVectorTime(0);
+ for (int i = 0; i < processCount; i++) {
+ targetVector.add(i == processIndex ? threshold : 0L);
+ }
+ return new VSVectorTimestampEvent(targetVector, ComparisonOperator.GREATER_EQUAL, description);
+ }
+
+ @Override
+ public String toString() {
+ return String.format(" [VectorTrigger: %s %s - %s]",
+ targetVectorTime, 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 "VectorTrigger";
+ }
+} \ No newline at end of file