X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fpayment%2Ftransfer%2Fdomain%2FTransfer.java;h=86e5c03b035ff6b573ec37f250fc2bacfa9335e9;hb=ccb171c9ec1ebcf71e2a906e138e741cbc4691e2;hp=5556a1be7c7ba982e9223869413a0a6c2c918730;hpb=6191849fee717b080118717c86df79fad12bafc8;p=demos%2Fkafka%2Fdemos-kafka-payment-system-transfer diff --git a/src/main/java/de/juplo/kafka/payment/transfer/domain/Transfer.java b/src/main/java/de/juplo/kafka/payment/transfer/domain/Transfer.java index 5556a1b..86e5c03 100644 --- a/src/main/java/de/juplo/kafka/payment/transfer/domain/Transfer.java +++ b/src/main/java/de/juplo/kafka/payment/transfer/domain/Transfer.java @@ -5,19 +5,31 @@ import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.LinkedList; +import java.util.List; + +import static de.juplo.kafka.payment.transfer.domain.Transfer.State.*; + @Data @Builder -@EqualsAndHashCode(exclude = "state") +@EqualsAndHashCode(exclude = { "state", "messages" }) public class Transfer { public enum State { - SENT, - FAILED, - PENDING, - APPROVED, - REJECTED + CREATED(false), + INVALID(false), + CHECKED(false), + APPROVED(true), + REJECTED(true); + + public final boolean foreign; + + State(boolean foreign) + { + this.foreign = foreign; + } } private final long id; @@ -26,4 +38,40 @@ public class Transfer private final int amount; private State state; + + private final List messages = new LinkedList<>(); + + + public Transfer setState(State state) + { + if (state == null) + throw new IllegalArgumentException("State must not be null!"); + + switch (state) + { + case CREATED: + if (this.state != null) + throw new IllegalArgumentException("Illegal state-change " + this.state + " -> CREATED"); + break; + + case CHECKED: + case INVALID: + if (this.state != CREATED) + throw new IllegalArgumentException("Illegal state-change " + this.state + " -> " + state); + break; + + default: + throw new IllegalArgumentException("State-change not yet considered:" + this.state + " -> " + state); + + } + + this.state = state; + return this; + } + + public Transfer addMessage(String message) + { + messages.add(message); + return this; + } }