refactor: split public types into definition, runtime, and spi packages
Keep Maven modules unchanged. Hosts import models and SPIs from the new packages; OrdoEngine stays at com.jetlumen.ordo.api. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,9 +1,15 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
|
||||
import com.jetlumen.ordo.api.definition.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.query.InstanceQuery;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
import com.jetlumen.ordo.api.query.TaskQuery;
|
||||
import com.jetlumen.ordo.api.runtime.ActionExecution;
|
||||
import com.jetlumen.ordo.api.runtime.ApprovalTask;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessContext;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessEvent;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessInstance;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import com.jetlumen.ordo.api.runtime.TaskStatus;
|
||||
|
||||
/**
|
||||
* Decision rule applied when an approval step has more than one candidate.
|
||||
+3
-1
@@ -1,9 +1,11 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import com.jetlumen.ordo.api.spi.ActionHandler;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/**
|
||||
* A named step in a process definition. Approval steps have one or more candidate assignees;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
/** What happens when an approval step's due time is reached. */
|
||||
public enum DueThen {
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** One branch inside a {@link StepKind#PARALLEL} block. The first step id is the branch start. */
|
||||
public record ParallelBranch(String id, List<String> stepIds) {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
/** Locates an inner step inside a {@link StepKind#PARALLEL} block. */
|
||||
public record ParallelMembership(ApprovalStep parallel, ParallelBranch branch) {
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
@@ -9,6 +9,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Immutable blueprint for an approval process with explicit step transitions. */
|
||||
public record ProcessDefinition(String id, int version, String name, List<ApprovalStep> steps,
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
@@ -15,6 +15,7 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import com.jetlumen.ordo.api.util.Jsons;
|
||||
|
||||
/** Parses a structural JSON process graph into a {@link ProcessDefinition}. */
|
||||
public final class ProcessDefinitionParser {
|
||||
+3
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
@@ -11,6 +11,8 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessContext;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Closed-set boolean tree evaluated against {@link ProcessContext} variables. */
|
||||
public sealed interface RoutingPredicate permits RoutingPredicate.Compare, RoutingPredicate.In,
|
||||
+4
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
@@ -9,6 +9,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.spi.RoutingCondition;
|
||||
import com.jetlumen.ordo.api.util.Jsons;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/**
|
||||
* Outgoing-edge condition: either a built-in {@link RoutingPredicate} or a host
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Relative SLA on an approval step. */
|
||||
public record StepDue(Duration after, DueThen then, String to, String action) {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
public enum StepKind {
|
||||
APPROVAL, ACTION, PARALLEL
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.definition;
|
||||
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/**
|
||||
* An outgoing edge from an approval step. When {@link #toStepId()} is {@code null}, matching this
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.query;
|
||||
|
||||
import com.jetlumen.ordo.api.ProcessStatus;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessStatus;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.query;
|
||||
|
||||
import com.jetlumen.ordo.api.TaskStatus;
|
||||
import com.jetlumen.ordo.api.runtime.TaskStatus;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.ActionExecution;
|
||||
import com.jetlumen.ordo.api.ActionExecutionStatus;
|
||||
import com.jetlumen.ordo.api.runtime.ActionExecution;
|
||||
import com.jetlumen.ordo.api.runtime.ActionExecutionStatus;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.ApprovalTask;
|
||||
import com.jetlumen.ordo.api.runtime.ApprovalTask;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
import com.jetlumen.ordo.api.query.TaskQuery;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.InstanceToken;
|
||||
import com.jetlumen.ordo.api.runtime.InstanceToken;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.definition.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.ProcessEvent;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessEvent;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.repository;
|
||||
|
||||
import com.jetlumen.ordo.api.ProcessInstance;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessInstance;
|
||||
import com.jetlumen.ordo.api.query.InstanceQuery;
|
||||
import com.jetlumen.ordo.api.query.Page;
|
||||
import com.jetlumen.ordo.api.query.PageRequest;
|
||||
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Persisted record of an ACTION step invocation. */
|
||||
public record ActionExecution(String id, String instanceId, String stepId, String actionKey,
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
/** Lifecycle of a persisted ACTION-step execution. */
|
||||
public enum ActionExecutionStatus {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
+3
-1
@@ -1,6 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.definition.StepKind;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Runtime token for one branch of a {@link StepKind#PARALLEL} block. */
|
||||
public record InstanceToken(String id, String instanceId, String parallelStepId, String branchId, String currentStepId,
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Immutable audit record of something that happened to a process instance. */
|
||||
public record ProcessEvent(String id, String instanceId, String taskId, String stepId, ProcessEventType type,
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
/** Kinds of append-only process history events. */
|
||||
public enum ProcessEventType {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/**
|
||||
* Read-only engine metadata plus business {@link ProcessContext} for host SPIs.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
public enum ProcessStatus {
|
||||
RUNNING, APPROVED, REJECTED, WITHDRAWN, CANCELLED
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Immutable audit record created when an approval task is completed. */
|
||||
public record TaskAction(String actor, String comment, Instant operatedAt) {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
public enum TaskStatus {
|
||||
PENDING, APPROVED, REJECTED,
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.runtime;
|
||||
|
||||
/** Status of a parallel-branch token. */
|
||||
public enum TokenStatus {
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import com.jetlumen.ordo.api.runtime.ProcessRuntime;
|
||||
|
||||
/**
|
||||
* Executes a named action step against the running instance. Hosts supply a
|
||||
+4
-1
@@ -1,4 +1,7 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import com.jetlumen.ordo.api.definition.ApprovalStep;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessRuntime;
|
||||
|
||||
/**
|
||||
* Resolves the actual assignee for a single candidate of an approval step when its task is
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import java.util.List;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessRuntime;
|
||||
|
||||
/**
|
||||
* A single ACTION implementation keyed by {@link #key()}, matching {@code action} on the step
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessRuntime;
|
||||
|
||||
/**
|
||||
* A single routing condition keyed by {@link #key()}, matching {@code when.ref}. Spring collects
|
||||
+2
-1
@@ -1,9 +1,10 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import com.jetlumen.ordo.api.util.Texts;
|
||||
|
||||
/** Host-registered keys for designers and REST dropdowns; not used by the engine at runtime. */
|
||||
public interface OrdoCatalog {
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import com.jetlumen.ordo.api.runtime.ProcessEvent;
|
||||
|
||||
/**
|
||||
* Host hook invoked after a process mutation has been committed. Implementations must not throw
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.spi;
|
||||
|
||||
import java.util.Map;
|
||||
import com.jetlumen.ordo.api.runtime.ProcessRuntime;
|
||||
|
||||
/**
|
||||
* Evaluates a named routing condition ({@code when.ref}) against the running instance.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.util;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.jetlumen.ordo.api;
|
||||
package com.jetlumen.ordo.api.util;
|
||||
|
||||
/** Shared blank-string checks used by domain records and the engine. */
|
||||
public final class Texts {
|
||||
@@ -8,6 +8,13 @@ import java.util.List;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import com.jetlumen.ordo.api.definition.ApprovalStep;
|
||||
import com.jetlumen.ordo.api.definition.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.definition.ProcessDefinitionParser;
|
||||
import com.jetlumen.ordo.api.definition.RoutingPredicate;
|
||||
import com.jetlumen.ordo.api.definition.StepDue;
|
||||
import com.jetlumen.ordo.api.definition.StepKind;
|
||||
import com.jetlumen.ordo.api.definition.StepTransition;
|
||||
|
||||
class ProcessDefinitionParserTest {
|
||||
|
||||
|
||||
@@ -7,6 +7,14 @@ import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import com.jetlumen.ordo.api.definition.ApprovalPolicy;
|
||||
import com.jetlumen.ordo.api.definition.ApprovalStep;
|
||||
import com.jetlumen.ordo.api.definition.ParallelBranch;
|
||||
import com.jetlumen.ordo.api.definition.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.definition.RoutingWhen;
|
||||
import com.jetlumen.ordo.api.definition.StepDue;
|
||||
import com.jetlumen.ordo.api.definition.StepKind;
|
||||
import com.jetlumen.ordo.api.definition.StepTransition;
|
||||
|
||||
class ProcessDefinitionTest {
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import com.jetlumen.ordo.api.definition.RoutingWhen;
|
||||
|
||||
class RoutingWhenTest {
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.jetlumen.ordo.api.query;
|
||||
|
||||
import com.jetlumen.ordo.api.TaskStatus;
|
||||
import com.jetlumen.ordo.api.runtime.TaskStatus;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
Reference in New Issue
Block a user