WorkflowSessionSequenceConflictException.java
package org.hammer.audio.workflow.collaboration.store;
import java.util.Objects;
/** Typed durable-session failure raised when an event targets a stale collaboration sequence. */
public final class WorkflowSessionSequenceConflictException extends RuntimeException {
private final String affectedSessionId;
private final long requestedSequence;
private final long currentSequence;
/** Creates an event-sequence conflict with stable machine-readable values. */
public WorkflowSessionSequenceConflictException(
String sessionId, long expectedSequence, long actualSequence) {
this(sessionId, expectedSequence, actualSequence, null);
}
/** Creates an event-sequence conflict while preserving the persistence failure. */
public WorkflowSessionSequenceConflictException(
String sessionId, long expectedSequence, long actualSequence, Throwable cause) {
super(message(sessionId, expectedSequence, actualSequence), cause);
this.affectedSessionId = Objects.requireNonNull(sessionId, "sessionId");
this.requestedSequence = expectedSequence;
this.currentSequence = actualSequence;
}
/** Returns the affected stable session identifier. */
public String sessionId() {
return affectedSessionId;
}
/** Returns the event sequence supplied by the caller. */
public long expectedSequence() {
return requestedSequence;
}
/** Returns the event sequence currently stored in the database. */
public long actualSequence() {
return currentSequence;
}
private static String message(String sessionId, long expectedSequence, long actualSequence) {
return "Expected workflow session event sequence "
+ expectedSequence
+ " but found "
+ actualSequence
+ " for session "
+ sessionId;
}
}