Workflow.java
package org.hammer.audio.workflow;
import java.util.List;
import java.util.Objects;
/**
* Pure workflow aggregate root independent of UI, execution and persistence.
*
* @param id stable workflow identifier
* @param name human-readable workflow name
* @param nodes workflow nodes
* @param edges workflow edges
* @param metadata extensible metadata for adapters outside the core domain
*/
public record Workflow(
String id, String name, List<Node> nodes, List<Edge> edges, Metadata metadata) {
public Workflow {
StableIds.requireStable(id, "id");
if (name == null || name.isBlank()) {
throw new IllegalArgumentException("name must not be blank");
}
Objects.requireNonNull(nodes, "nodes");
Objects.requireNonNull(edges, "edges");
nodes = List.copyOf(nodes);
edges = List.copyOf(edges);
metadata = metadata == null ? Metadata.empty() : metadata;
}
public Workflow(String id, String name, List<Node> nodes, List<Edge> edges) {
this(id, name, nodes, edges, Metadata.empty());
}
}