From ab90ed0fc2e39fd5a59af28c3b3a259b248255f4 Mon Sep 17 00:00:00 2001 From: ross Date: Sat, 7 Dec 2024 17:21:11 +0800 Subject: [PATCH] revert lombok usage and remove dependencies of micrometer and springdoc --- pom.xml | 73 ++----------------- .../impl/CargoInspectionServiceImpl.java | 3 +- .../config/DDDSampleApplicationContext.java | 1 - .../dddsample/domain/model/cargo/Cargo.java | 22 +++--- .../domain/model/cargo/Delivery.java | 12 +-- .../domain/model/cargo/HandlingActivity.java | 19 +++-- .../dddsample/domain/model/cargo/Leg.java | 6 +- .../model/cargo/RouteSpecification.java | 14 ++-- .../domain/model/cargo/TrackingId.java | 4 +- .../domain/model/handling/HandlingEvent.java | 29 ++++---- .../model/handling/HandlingHistory.java | 2 +- .../domain/model/location/Location.java | 15 ++-- .../domain/model/location/UnLocode.java | 3 +- .../domain/model/voyage/Schedule.java | 3 +- .../dddsample/domain/model/voyage/Voyage.java | 19 ++--- .../domain/model/voyage/VoyageNumber.java | 4 +- .../sampledata/SampleDataGenerator.java | 5 +- .../booking/web/CargoAdminController.java | 6 +- .../HandlingEventRegistrationAttempt.java | 43 ++++++++++- .../tracking/CargoTrackingController.java | 14 +++- 20 files changed, 145 insertions(+), 152 deletions(-) diff --git a/pom.xml b/pom.xml index 2fd625fd5..1cfdcfcc3 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.6 @@ -119,6 +119,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-validation + org.apache.commons commons-lang3 @@ -140,70 +144,10 @@ org.apache.activemq activemq-broker - - - - org.projectlombok - lombok - - - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-tracing-bridge-brave - - - net.ttddyy.observation - datasource-micrometer-spring-boot - 1.0.5 - - org.springframework.boot spring-boot-starter-test test - - - junit - junit - - - org.mockito - mockito-core - - - net.bytebuddy - byte-buddy - - - - - org.junit.jupiter - junit-jupiter - test - - - org.mockito - mockito-core - test - - - org.mockito - mockito-junit-jupiter - test - - - net.bytebuddy - byte-buddy - - - org.assertj - assertj-core - test org.seleniumhq.selenium @@ -213,12 +157,7 @@ org.seleniumhq.selenium htmlunit-driver - - - - org.springdoc - springdoc-openapi-starter-webmvc-ui - 2.5.0 + test diff --git a/src/main/java/se/citerus/dddsample/application/impl/CargoInspectionServiceImpl.java b/src/main/java/se/citerus/dddsample/application/impl/CargoInspectionServiceImpl.java index 7ebe26dd5..4b4803e16 100644 --- a/src/main/java/se/citerus/dddsample/application/impl/CargoInspectionServiceImpl.java +++ b/src/main/java/se/citerus/dddsample/application/impl/CargoInspectionServiceImpl.java @@ -13,6 +13,7 @@ import se.citerus.dddsample.domain.model.handling.HandlingHistory; import java.lang.invoke.MethodHandles; +import java.util.Objects; public class CargoInspectionServiceImpl implements CargoInspectionService { @@ -32,7 +33,7 @@ public CargoInspectionServiceImpl(final ApplicationEvents applicationEvents, @Override @Transactional public void inspectCargo(final TrackingId trackingId) { - Validate.notNull(trackingId, "Tracking ID is required"); + Objects.requireNonNull(trackingId, "Tracking ID is required"); final Cargo cargo = cargoRepository.find(trackingId); if (cargo == null) { diff --git a/src/main/java/se/citerus/dddsample/config/DDDSampleApplicationContext.java b/src/main/java/se/citerus/dddsample/config/DDDSampleApplicationContext.java index c676ea92d..fca8abd78 100644 --- a/src/main/java/se/citerus/dddsample/config/DDDSampleApplicationContext.java +++ b/src/main/java/se/citerus/dddsample/config/DDDSampleApplicationContext.java @@ -1,7 +1,6 @@ package se.citerus.dddsample.config; import com.pathfinder.api.GraphTraversalService; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/Cargo.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/Cargo.java index 8477ea033..6c9161073 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/Cargo.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/Cargo.java @@ -1,15 +1,13 @@ package se.citerus.dddsample.domain.model.cargo; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.Setter; import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.model.handling.HandlingHistory; import se.citerus.dddsample.domain.model.location.Location; import se.citerus.dddsample.domain.shared.DomainEntity; import java.util.List; +import java.util.Objects; /** * A Cargo. This is the central class in the domain model, @@ -49,8 +47,6 @@ */ @Entity(name = "Cargo") @Table(name = "Cargo") -@Setter(AccessLevel.PROTECTED) -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class Cargo implements DomainEntity { @Id @@ -75,8 +71,8 @@ public class Cargo implements DomainEntity { private Delivery delivery; public Cargo(final TrackingId trackingId, final RouteSpecification routeSpecification) { - Validate.notNull(trackingId, "Tracking ID is required"); - Validate.notNull(routeSpecification, "Route specification is required"); + Objects.requireNonNull(trackingId, "Tracking ID is required"); + Objects.requireNonNull(routeSpecification, "Route specification is required"); this.trackingId = trackingId.idString(); // Cargo origin never changes, even if the route specification changes. @@ -90,8 +86,8 @@ public Cargo(final TrackingId trackingId, final RouteSpecification routeSpecific } public Cargo(TrackingId trackingId, RouteSpecification routeSpecification, Itinerary itinerary) { - Validate.notNull(trackingId, "Tracking ID is required"); - Validate.notNull(routeSpecification, "Route specification is required"); + Objects.requireNonNull(trackingId, "Tracking ID is required"); + Objects.requireNonNull(routeSpecification, "Route specification is required"); this.trackingId = trackingId.idString(); this.origin = routeSpecification.origin(); this.routeSpecification = routeSpecification; @@ -156,7 +152,7 @@ public RouteSpecification routeSpecification() { * @param routeSpecification route specification. */ public void specifyNewRoute(final RouteSpecification routeSpecification) { - Validate.notNull(routeSpecification, "Route specification is required"); + Objects.requireNonNull(routeSpecification, "Route specification is required"); this.routeSpecification = routeSpecification; Itinerary itineraryForRouting = this.itinerary != null && !this.itinerary.isEmpty() ? new Itinerary(this.itinerary) : null; @@ -170,7 +166,7 @@ public void specifyNewRoute(final RouteSpecification routeSpecification) { * @param itinerary an itinerary. May not be null. */ public void assignToRoute(final Itinerary itinerary) { - Validate.notNull(itinerary, "Itinerary is required for assignment"); + Objects.requireNonNull(itinerary, "Itinerary is required for assignment"); this.itinerary = itinerary.legs(); // Handling consistency within the Cargo aggregate synchronously @@ -230,6 +226,8 @@ public String toString() { return trackingId; } - + protected Cargo() { + // Needed by Hibernate + } } diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/Delivery.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/Delivery.java index 038267702..e72d41810 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/Delivery.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/Delivery.java @@ -1,8 +1,6 @@ package se.citerus.dddsample.domain.model.cargo; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -25,7 +23,6 @@ * */ @Embeddable -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class Delivery implements ValueObject { @Column @@ -76,7 +73,7 @@ public class Delivery implements ValueObject { * @return An up to date delivery */ Delivery updateOnRouting(RouteSpecification routeSpecification, Itinerary itinerary) { - Validate.notNull(routeSpecification, "Route specification is required"); + Objects.requireNonNull(routeSpecification, "Route specification is required"); return new Delivery(this.lastEvent, itinerary, routeSpecification); } @@ -91,8 +88,8 @@ Delivery updateOnRouting(RouteSpecification routeSpecification, Itinerary itiner * @return An up to date delivery. */ static Delivery derivedFrom(RouteSpecification routeSpecification, Itinerary itinerary, HandlingHistory handlingHistory) { - Validate.notNull(routeSpecification, "Route specification is required"); - Validate.notNull(handlingHistory, "Delivery history is required"); + Objects.requireNonNull(routeSpecification, "Route specification is required"); + Objects.requireNonNull(handlingHistory, "Delivery history is required"); final HandlingEvent lastEvent = handlingHistory.mostRecentlyCompletedEvent(); @@ -357,4 +354,7 @@ public int hashCode() { toHashCode(); } + protected Delivery() { + // Needed by Hibernate + } } diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/HandlingActivity.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/HandlingActivity.java index 2d868f851..44bf18b5d 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/HandlingActivity.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/HandlingActivity.java @@ -1,8 +1,6 @@ package se.citerus.dddsample.domain.model.cargo; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -11,6 +9,8 @@ import se.citerus.dddsample.domain.model.voyage.Voyage; import se.citerus.dddsample.domain.shared.ValueObject; +import java.util.Objects; + /** * A handling activity represents how and where a cargo can be handled, * and can be used to express predictions about what is expected to @@ -18,7 +18,6 @@ * */ @Embeddable -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class HandlingActivity implements ValueObject { // TODO make HandlingActivity a part of HandlingEvent too? There is some overlap. @@ -36,17 +35,17 @@ public class HandlingActivity implements ValueObject { public Voyage voyage; public HandlingActivity(final HandlingEvent.Type type, final Location location) { - Validate.notNull(type, "Handling event type is required"); - Validate.notNull(location, "Location is required"); + Objects.requireNonNull(type, "Handling event type is required"); + Objects.requireNonNull(location, "Location is required"); this.type = type; this.location = location; } public HandlingActivity(final HandlingEvent.Type type, final Location location, final Voyage voyage) { - Validate.notNull(type, "Handling event type is required"); - Validate.notNull(location, "Location is required"); - Validate.notNull(location, "Voyage is required"); + Objects.requireNonNull(type, "Handling event type is required"); + Objects.requireNonNull(location, "Location is required"); + Objects.requireNonNull(location, "Voyage is required"); this.type = type; this.location = location; @@ -94,4 +93,8 @@ public boolean equals(final Object obj) { return sameValueAs(other); } + protected HandlingActivity() { + // Needed by Hibernate + } + } diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/Leg.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/Leg.java index 446f9ce39..885f98b0a 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/Leg.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/Leg.java @@ -1,8 +1,6 @@ package se.citerus.dddsample.domain.model.cargo; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -17,7 +15,6 @@ */ @Entity(name = "Leg") @Table(name = "Leg") -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class Leg implements ValueObject { @Id @@ -104,4 +101,7 @@ public int hashCode() { toHashCode(); } + protected Leg() { + // Needed by Hibernate + } } diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/RouteSpecification.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/RouteSpecification.java index ae24cd856..55399c4af 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/RouteSpecification.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/RouteSpecification.java @@ -4,8 +4,6 @@ import jakarta.persistence.Embeddable; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -14,6 +12,7 @@ import se.citerus.dddsample.domain.shared.ValueObject; import java.time.Instant; +import java.util.Objects; /** * Route specification. Describes where a cargo origin and destination is, @@ -21,7 +20,6 @@ * */ @Embeddable -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class RouteSpecification extends AbstractSpecification implements ValueObject { @ManyToOne() @@ -41,9 +39,9 @@ public class RouteSpecification extends AbstractSpecification impleme * @param arrivalDeadline arrival deadline */ public RouteSpecification(final Location origin, final Location destination, final Instant arrivalDeadline) { - Validate.notNull(origin, "Origin is required"); - Validate.notNull(destination, "Destination is required"); - Validate.notNull(arrivalDeadline, "Arrival deadline is required"); + Objects.requireNonNull(origin, "Origin is required"); + Objects.requireNonNull(destination, "Destination is required"); + Objects.requireNonNull(arrivalDeadline, "Arrival deadline is required"); Validate.isTrue(!origin.sameIdentityAs(destination), "Origin and destination can't be the same: " + origin); this.origin = origin; @@ -108,4 +106,8 @@ public int hashCode() { toHashCode(); } + protected RouteSpecification() { + // Needed by Hibernate + } + } diff --git a/src/main/java/se/citerus/dddsample/domain/model/cargo/TrackingId.java b/src/main/java/se/citerus/dddsample/domain/model/cargo/TrackingId.java index db1bab616..bcc92be7a 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/cargo/TrackingId.java +++ b/src/main/java/se/citerus/dddsample/domain/model/cargo/TrackingId.java @@ -3,6 +3,8 @@ import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.shared.ValueObject; +import java.util.Objects; + /** * Uniquely identifies a particular cargo. Automatically generated by the application. * @@ -17,7 +19,7 @@ public final class TrackingId implements ValueObject { * @param id Id string. */ public TrackingId(final String id) { - Validate.notNull(id); + Objects.requireNonNull(id); Validate.notEmpty(id); this.id = id; } diff --git a/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingEvent.java b/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingEvent.java index 9bb424c3a..2cf8e05f0 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingEvent.java +++ b/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingEvent.java @@ -1,8 +1,6 @@ package se.citerus.dddsample.domain.model.handling; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -33,7 +31,6 @@ */ @Entity(name = "HandlingEvent") @Table(name = "HandlingEvent") -@NoArgsConstructor(access = AccessLevel.PROTECTED) public final class HandlingEvent implements DomainEvent { @Id @@ -119,12 +116,12 @@ public HandlingEvent(final Cargo cargo, final Type type, final Location location, final Voyage voyage) { - Validate.notNull(cargo, "Cargo is required"); - Validate.notNull(completionTime, "Completion time is required"); - Validate.notNull(registrationTime, "Registration time is required"); - Validate.notNull(type, "Handling event type is required"); - Validate.notNull(location, "Location is required"); - Validate.notNull(voyage, "Voyage is required"); + Objects.requireNonNull(cargo, "Cargo is required"); + Objects.requireNonNull(completionTime, "Completion time is required"); + Objects.requireNonNull(registrationTime, "Registration time is required"); + Objects.requireNonNull(type, "Handling event type is required"); + Objects.requireNonNull(location, "Location is required"); + Objects.requireNonNull(voyage, "Voyage is required"); if (type.prohibitsVoyage()) { throw new IllegalArgumentException("Voyage is not allowed with event type " + type); @@ -150,11 +147,11 @@ public HandlingEvent(final Cargo cargo, final Instant registrationTime, final Type type, final Location location) { - Validate.notNull(cargo, "Cargo is required"); - Validate.notNull(completionTime, "Completion time is required"); - Validate.notNull(registrationTime, "Registration time is required"); - Validate.notNull(type, "Handling event type is required"); - Validate.notNull(location, "Location is required"); + Objects.requireNonNull(cargo, "Cargo is required"); + Objects.requireNonNull(completionTime, "Completion time is required"); + Objects.requireNonNull(registrationTime, "Registration time is required"); + Objects.requireNonNull(type, "Handling event type is required"); + Objects.requireNonNull(location, "Location is required"); if (type.requiresVoyage()) { throw new IllegalArgumentException("Voyage is required for event type " + type); @@ -244,5 +241,7 @@ public String toString() { return builder.toString(); } - + protected HandlingEvent() { + // Needed by Hibernate + } } diff --git a/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingHistory.java b/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingHistory.java index 8794c58bc..f81ebd360 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingHistory.java +++ b/src/main/java/se/citerus/dddsample/domain/model/handling/HandlingHistory.java @@ -19,7 +19,7 @@ public class HandlingHistory implements ValueObject { public static final HandlingHistory EMPTY = new HandlingHistory(Collections.emptyList()); public HandlingHistory(Collection handlingEvents) { - Validate.notNull(handlingEvents, "Handling events are required"); + Objects.requireNonNull(handlingEvents, "Handling events are required"); this.handlingEvents = new ArrayList<>(handlingEvents); } diff --git a/src/main/java/se/citerus/dddsample/domain/model/location/Location.java b/src/main/java/se/citerus/dddsample/domain/model/location/Location.java index ff2c4254b..bdd1225f8 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/location/Location.java +++ b/src/main/java/se/citerus/dddsample/domain/model/location/Location.java @@ -1,12 +1,11 @@ package se.citerus.dddsample.domain.model.location; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.Setter; import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.shared.DomainEntity; +import java.util.Objects; + /** * A location is our model is stops on a journey, such as cargo * origin or destination, or carrier movement endpoints. @@ -15,8 +14,6 @@ */ @Entity(name = "Location") @Table(name = "Location") -@Setter(AccessLevel.PROTECTED) -@NoArgsConstructor(access = AccessLevel.PROTECTED) public final class Location implements DomainEntity { @Id @@ -44,8 +41,8 @@ public final class Location implements DomainEntity { * @throws IllegalArgumentException if the UN Locode or name is null */ public Location(final UnLocode unLocode, final String name) { - Validate.notNull(unLocode); - Validate.notNull(name); + Objects.requireNonNull(unLocode); + Objects.requireNonNull(name); this.unlocode = unLocode.idString(); this.name = name; @@ -115,4 +112,8 @@ public String toString() { return name + " [" + unlocode + "]"; } + Location() { + // Needed by Hibernate + } + } diff --git a/src/main/java/se/citerus/dddsample/domain/model/location/UnLocode.java b/src/main/java/se/citerus/dddsample/domain/model/location/UnLocode.java index 4b9cb42d8..be8d53b01 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/location/UnLocode.java +++ b/src/main/java/se/citerus/dddsample/domain/model/location/UnLocode.java @@ -3,6 +3,7 @@ import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.shared.ValueObject; +import java.util.Objects; import java.util.regex.Pattern; /** @@ -25,7 +26,7 @@ public final class UnLocode implements ValueObject { * @param countryAndLocation Location string. */ public UnLocode(final String countryAndLocation) { - Validate.notNull(countryAndLocation, "Country and location may not be null"); + Objects.requireNonNull(countryAndLocation, "Country and location may not be null"); Validate.isTrue(VALID_PATTERN.matcher(countryAndLocation).matches(), countryAndLocation + " is not a valid UN/LOCODE (does not match pattern)"); diff --git a/src/main/java/se/citerus/dddsample/domain/model/voyage/Schedule.java b/src/main/java/se/citerus/dddsample/domain/model/voyage/Schedule.java index 743ddacab..5b4e1433a 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/voyage/Schedule.java +++ b/src/main/java/se/citerus/dddsample/domain/model/voyage/Schedule.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.List; +import java.util.Objects; /** * A voyage schedule. @@ -18,7 +19,7 @@ public class Schedule implements ValueObject { public static final Schedule EMPTY = new Schedule(); public Schedule(final List carrierMovements) { - Validate.notNull(carrierMovements); + Objects.requireNonNull(carrierMovements); Validate.noNullElements(carrierMovements); Validate.notEmpty(carrierMovements); diff --git a/src/main/java/se/citerus/dddsample/domain/model/voyage/Voyage.java b/src/main/java/se/citerus/dddsample/domain/model/voyage/Voyage.java index b11e0e282..0b5f6e497 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/voyage/Voyage.java +++ b/src/main/java/se/citerus/dddsample/domain/model/voyage/Voyage.java @@ -1,9 +1,6 @@ package se.citerus.dddsample.domain.model.voyage; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.Setter; import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.model.location.Location; import se.citerus.dddsample.domain.shared.DomainEntity; @@ -11,14 +8,13 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * A Voyage. */ @Entity(name = "Voyage") @Table(name = "Voyage") -@Setter(AccessLevel.PROTECTED) -@NoArgsConstructor(access = AccessLevel.PROTECTED) public class Voyage implements DomainEntity { @Id @@ -32,13 +28,17 @@ public class Voyage implements DomainEntity { @JoinColumn(name = "voyage_id") private List carrierMovements; + protected Voyage() { + // Needed by Hibernate + } + // Null object pattern @Transient public static final Voyage NONE = new Voyage(new VoyageNumber(""), Schedule.EMPTY); public Voyage(final VoyageNumber voyageNumber, final Schedule schedule) { - Validate.notNull(voyageNumber, "Voyage number is required"); - Validate.notNull(schedule, "Schedule is required"); + Objects.requireNonNull(voyageNumber, "Voyage number is required"); + Objects.requireNonNull(schedule, "Schedule is required"); this.voyageNumber = voyageNumber.idString(); this.carrierMovements = schedule.carrierMovements(); @@ -85,6 +85,7 @@ public String toString() { } + /** * Builder pattern is used for incremental construction * of a Voyage aggregate. This serves as an aggregate factory. @@ -96,8 +97,8 @@ public static final class Builder { private Location departureLocation; public Builder(final VoyageNumber voyageNumber, final Location departureLocation) { - Validate.notNull(voyageNumber, "Voyage number is required"); - Validate.notNull(departureLocation, "Departure location is required"); + Objects.requireNonNull(voyageNumber, "Voyage number is required"); + Objects.requireNonNull(departureLocation, "Departure location is required"); this.voyageNumber = voyageNumber; this.departureLocation = departureLocation; diff --git a/src/main/java/se/citerus/dddsample/domain/model/voyage/VoyageNumber.java b/src/main/java/se/citerus/dddsample/domain/model/voyage/VoyageNumber.java index fce1f71da..752b56e72 100644 --- a/src/main/java/se/citerus/dddsample/domain/model/voyage/VoyageNumber.java +++ b/src/main/java/se/citerus/dddsample/domain/model/voyage/VoyageNumber.java @@ -3,6 +3,8 @@ import org.apache.commons.lang3.Validate; import se.citerus.dddsample.domain.shared.ValueObject; +import java.util.Objects; + /** * Identifies a voyage. * @@ -12,7 +14,7 @@ public class VoyageNumber implements ValueObject { private String number; public VoyageNumber(String number) { - Validate.notNull(number); + Objects.requireNonNull(number); this.number = number; } diff --git a/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java b/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java index 375d79e9b..23e3f6471 100644 --- a/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java +++ b/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java @@ -1,8 +1,7 @@ package se.citerus.dddsample.infrastructure.sampledata; import jakarta.annotation.PostConstruct; -import lombok.NonNull; -import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.NonNull; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallbackWithoutResult; @@ -27,8 +26,8 @@ /** * Provides sample data. */ -@Slf4j public class SampleDataGenerator { + private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SampleDataGenerator.class); private static final Timestamp base = getBaseTimeStamp(); diff --git a/src/main/java/se/citerus/dddsample/interfaces/booking/web/CargoAdminController.java b/src/main/java/se/citerus/dddsample/interfaces/booking/web/CargoAdminController.java index cacda5a0e..868d1723a 100644 --- a/src/main/java/se/citerus/dddsample/interfaces/booking/web/CargoAdminController.java +++ b/src/main/java/se/citerus/dddsample/interfaces/booking/web/CargoAdminController.java @@ -2,7 +2,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.ServletRequestDataBinder; @@ -38,11 +37,14 @@ */ @Controller @RequestMapping("/admin") -@RequiredArgsConstructor public final class CargoAdminController { private final BookingServiceFacade bookingServiceFacade; + public CargoAdminController(BookingServiceFacade bookingServiceFacade) { + this.bookingServiceFacade = bookingServiceFacade; + } + @InitBinder private void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Instant.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm"), false)); diff --git a/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java b/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java index 56e47a589..a7eaf8ec7 100644 --- a/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java +++ b/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java @@ -1,9 +1,8 @@ package se.citerus.dddsample.interfaces.handling; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import org.springframework.lang.NonNull; import se.citerus.dddsample.domain.model.cargo.TrackingId; import se.citerus.dddsample.domain.model.handling.HandlingEvent; import se.citerus.dddsample.domain.model.location.UnLocode; @@ -18,8 +17,6 @@ *

* It is used as a message queue element. */ -@Getter -@RequiredArgsConstructor public final class HandlingEventRegistrationAttempt implements Serializable { private final Instant registrationTime; @@ -29,6 +26,44 @@ public final class HandlingEventRegistrationAttempt implements Serializable { private final HandlingEvent.Type type; private final UnLocode unLocode; + public HandlingEventRegistrationAttempt(@NonNull Instant registrationTime, + @NonNull Instant completionTime, + @NonNull TrackingId trackingId, + @NonNull VoyageNumber voyageNumber, + @NonNull HandlingEvent.Type type, + @NonNull UnLocode unLocode) { + this.registrationTime = registrationTime; + this.completionTime = completionTime; + this.trackingId = trackingId; + this.voyageNumber = voyageNumber; + this.type = type; + this.unLocode = unLocode; + } + + public Instant getCompletionTime() { + return completionTime; + } + + public TrackingId getTrackingId() { + return trackingId; + } + + public VoyageNumber getVoyageNumber() { + return voyageNumber; + } + + public HandlingEvent.Type getType() { + return type; + } + + public UnLocode getUnLocode() { + return unLocode; + } + + public Instant getRegistrationTime() { + return registrationTime; + } + @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); diff --git a/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java b/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java index 3879e9115..b7eb1b604 100644 --- a/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java +++ b/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java @@ -1,9 +1,8 @@ package se.citerus.dddsample.interfaces.tracking; import jakarta.servlet.http.HttpServletRequest; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; @@ -35,7 +34,6 @@ */ @Controller @RequestMapping("/track") -@RequiredArgsConstructor public final class CargoTrackingController { private final CargoRepository cargoRepository; @@ -43,6 +41,16 @@ public final class CargoTrackingController { private final MessageSource messageSource; private final TrackCommandValidator trackCommandValidator; + public CargoTrackingController(@NonNull CargoRepository cargoRepository, + @NonNull HandlingEventRepository handlingEventRepository, + @NonNull MessageSource messageSource, + @NonNull TrackCommandValidator trackCommandValidator) { + this.cargoRepository = cargoRepository; + this.handlingEventRepository = handlingEventRepository; + this.messageSource = messageSource; + this.trackCommandValidator = trackCommandValidator; + } + @RequestMapping(method = RequestMethod.GET) public String index(final Map model) { // using the empty command to support the thymeleaf form `

`