WorkflowHistoryCommandResult.java

package org.hammer.audio.workflow.collaboration;

import java.util.Objects;
import org.hammer.audio.workflow.Workflow;
import org.hammer.audio.workflow.collaboration.store.WorkflowOperationCommandMetadata;

/**
 * Result of an accepted undo or redo command.
 *
 * @param workflow resulting canonical workflow
 * @param command accepted durable command relation
 * @param operationId fresh semantic operation id generated from the command
 * @param revision resulting semantic revision
 * @param sequence resulting event sequence
 */
public record WorkflowHistoryCommandResult(
    Workflow workflow,
    WorkflowOperationCommandMetadata command,
    String operationId,
    long revision,
    long sequence) {

  public WorkflowHistoryCommandResult {
    Objects.requireNonNull(workflow, "workflow");
    Objects.requireNonNull(command, "command");
    operationId = requireNotBlank(operationId, "operationId");
    if (revision <= 0 || sequence < revision) {
      throw new IllegalArgumentException("invalid resulting revision/event sequence");
    }
  }

  private static String requireNotBlank(String value, String name) {
    Objects.requireNonNull(value, name);
    if (value.isBlank()) {
      throw new IllegalArgumentException(name + " must not be blank");
    }
    return value;
  }
}