getHandlingHistoryOfCargo(String trackingId);
}
diff --git a/src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java b/src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java
index 84555473d..4af9c6718 100644
--- a/src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java
+++ b/src/main/java/se/citerus/dddsample/infrastructure/routing/ExternalRoutingService.java
@@ -20,7 +20,6 @@
import java.util.List;
import java.util.Properties;
import java.util.stream.Collectors;
-import java.util.stream.Collectors;
/**
* Our end of the routing service. This is basically a data model
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 9d005af48..375d79e9b 100644
--- a/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java
+++ b/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleDataGenerator.java
@@ -1,6 +1,8 @@
package se.citerus.dddsample.infrastructure.sampledata;
-import org.springframework.lang.NonNull;
+import jakarta.annotation.PostConstruct;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
@@ -12,15 +14,12 @@
import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeParseException;
import java.util.List;
-import static java.util.Objects.requireNonNull;
import static se.citerus.dddsample.application.util.DateUtils.toDate;
import static se.citerus.dddsample.infrastructure.sampledata.SampleLocations.*;
import static se.citerus.dddsample.infrastructure.sampledata.SampleVoyages.*;
@@ -28,7 +27,8 @@
/**
* Provides sample data.
*/
-public class SampleDataGenerator {
+@Slf4j
+public class SampleDataGenerator {
private static final Timestamp base = getBaseTimeStamp();
@@ -43,15 +43,16 @@ public SampleDataGenerator(@NonNull CargoRepository cargoRepository,
@NonNull LocationRepository locationRepository,
@NonNull HandlingEventRepository handlingEventRepository,
@NonNull PlatformTransactionManager transactionManager) {
- // TODO can the requireNonNull calls be replaced by annotations?
- this.cargoRepository = requireNonNull(cargoRepository);
- this.voyageRepository = requireNonNull(voyageRepository);
- this.locationRepository = requireNonNull(locationRepository);
- this.handlingEventRepository = requireNonNull(handlingEventRepository);
- this.transactionManager = requireNonNull(transactionManager);
+ this.cargoRepository =cargoRepository;
+ this.voyageRepository = voyageRepository;
+ this.locationRepository = locationRepository;
+ this.handlingEventRepository = handlingEventRepository;
+ this.transactionManager = transactionManager;
}
- public void generate() {
+
+ @PostConstruct
+ protected void generate() {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
HandlingEventFactory handlingEventFactory = new HandlingEventFactory(
@@ -62,7 +63,7 @@ public void generate() {
}
public void loadHibernateData(TransactionTemplate tt, final HandlingEventFactory handlingEventFactory) {
- System.out.println("*** Loading Hibernate data ***");
+ log.info("*** Loading Hibernate data ***");
tt.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
diff --git a/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleVoyages.java b/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleVoyages.java
index f2b0b3ee5..296d497de 100644
--- a/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleVoyages.java
+++ b/src/main/java/se/citerus/dddsample/infrastructure/sampledata/SampleVoyages.java
@@ -8,7 +8,10 @@
import java.lang.reflect.Field;
import java.time.Instant;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import static se.citerus.dddsample.application.util.DateUtils.toDate;
import static se.citerus.dddsample.infrastructure.sampledata.SampleLocations.*;
diff --git a/src/main/java/se/citerus/dddsample/interfaces/InterfacesApplicationContext.java b/src/main/java/se/citerus/dddsample/interfaces/InterfacesApplicationContext.java
index 4cda84149..1f0661bf7 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/InterfacesApplicationContext.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/InterfacesApplicationContext.java
@@ -1,5 +1,6 @@
package se.citerus.dddsample.interfaces;
+import jakarta.persistence.EntityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +29,6 @@
import se.citerus.dddsample.interfaces.tracking.TrackCommandValidator;
import se.citerus.dddsample.interfaces.tracking.ws.CargoTrackingRestService;
-import javax.persistence.EntityManager;
import java.io.File;
import java.lang.invoke.MethodHandles;
import java.util.Locale;
@@ -61,8 +61,14 @@ public FixedLocaleResolver localeResolver() {
}
@Bean
- public CargoTrackingController cargoTrackingController(MessageSource messageSource, CargoRepository cargoRepository, HandlingEventRepository handlingEventRepository) {
- return new CargoTrackingController(cargoRepository, handlingEventRepository, messageSource);
+ public CargoTrackingController cargoTrackingController(MessageSource messageSource,
+ CargoRepository cargoRepository,
+ HandlingEventRepository handlingEventRepository,
+ TrackCommandValidator TrackCommandValidator) {
+ return new CargoTrackingController(cargoRepository,
+ handlingEventRepository,
+ messageSource,
+ TrackCommandValidator);
}
@Bean
@@ -106,10 +112,10 @@ public ThreadPoolTaskScheduler myScheduler(@Nullable UploadDirectoryScanner scan
return null;
}
ThreadPoolTaskScheduler threadPoolTaskScheduler
- = new ThreadPoolTaskScheduler();
+ = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix(
- "ThreadPoolTaskScheduler");
+ "ThreadPoolTaskScheduler");
threadPoolTaskScheduler.initialize();
threadPoolTaskScheduler.scheduleAtFixedRate(scanner, 5000);
return threadPoolTaskScheduler;
diff --git a/src/main/java/se/citerus/dddsample/interfaces/booking/facade/BookingServiceFacade.java b/src/main/java/se/citerus/dddsample/interfaces/booking/facade/BookingServiceFacade.java
index 86b140c42..3783ce1e0 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/booking/facade/BookingServiceFacade.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/booking/facade/BookingServiceFacade.java
@@ -1,13 +1,13 @@
package se.citerus.dddsample.interfaces.booking.facade;
-import java.rmi.RemoteException;
-import java.time.Instant;
-import java.util.List;
-
import se.citerus.dddsample.interfaces.booking.facade.dto.CargoRoutingDTO;
import se.citerus.dddsample.interfaces.booking.facade.dto.LocationDTO;
import se.citerus.dddsample.interfaces.booking.facade.dto.RouteCandidateDTO;
+import java.rmi.RemoteException;
+import java.time.Instant;
+import java.util.List;
+
/**
* This facade shields the domain layer - model, services, repositories -
* from concerns about such things as the user interface.
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 11e7b6454..c3387d468 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
@@ -1,5 +1,8 @@
package se.citerus.dddsample.interfaces.booking.web;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
@@ -12,8 +15,6 @@
import se.citerus.dddsample.interfaces.booking.facade.dto.LocationDTO;
import se.citerus.dddsample.interfaces.booking.facade.dto.RouteCandidateDTO;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
@@ -39,7 +40,8 @@
@RequestMapping("/admin")
public final class CargoAdminController {
- private final BookingServiceFacade bookingServiceFacade;
+ @Autowired
+ private BookingServiceFacade bookingServiceFacade;
public CargoAdminController(BookingServiceFacade bookingServiceFacade) {
this.bookingServiceFacade = bookingServiceFacade;
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 ffaa4b7c3..56e47a589 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingEventRegistrationAttempt.java
@@ -1,5 +1,7 @@
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 se.citerus.dddsample.domain.model.cargo.TrackingId;
@@ -13,60 +15,23 @@
/**
* This is a simple transfer object for passing incoming handling event
* registration attempts to proper the registration procedure.
- *
- * It is used as a message queue element.
- *
+ *
+ * It is used as a message queue element.
*/
+@Getter
+@RequiredArgsConstructor
public final class HandlingEventRegistrationAttempt implements Serializable {
- private final Instant registrationTime;
- private final Instant completionTime;
- private final TrackingId trackingId;
- private final VoyageNumber voyageNumber;
- private final HandlingEvent.Type type;
- private final UnLocode unLocode;
+ private final Instant registrationTime;
+ private final Instant completionTime;
+ private final TrackingId trackingId;
+ private final VoyageNumber voyageNumber;
+ private final HandlingEvent.Type type;
+ private final UnLocode unLocode;
- public HandlingEventRegistrationAttempt(final Instant registrationDate,
- final Instant completionDate,
- final TrackingId trackingId,
- final VoyageNumber voyageNumber,
- final HandlingEvent.Type type,
- final UnLocode unLocode) {
- this.registrationTime = registrationDate;
- this.completionTime = completionDate;
- this.trackingId = trackingId;
- this.voyageNumber = voyageNumber;
- this.type = type;
- this.unLocode = unLocode;
- }
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
+ }
- 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/handling/HandlingReportParser.java b/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingReportParser.java
index 4d822d0fe..fca5187e4 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingReportParser.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/handling/HandlingReportParser.java
@@ -7,11 +7,13 @@
import se.citerus.dddsample.domain.model.voyage.VoyageNumber;
import se.citerus.dddsample.interfaces.handling.ws.HandlingReport;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeParseException;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
diff --git a/src/main/java/se/citerus/dddsample/interfaces/handling/file/UploadDirectoryScanner.java b/src/main/java/se/citerus/dddsample/interfaces/handling/file/UploadDirectoryScanner.java
index b1f15d9c2..adc80e0d1 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/handling/file/UploadDirectoryScanner.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/handling/file/UploadDirectoryScanner.java
@@ -17,7 +17,10 @@
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.time.Instant;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.TimerTask;
import static se.citerus.dddsample.interfaces.handling.HandlingReportParser.*;
diff --git a/src/main/java/se/citerus/dddsample/interfaces/handling/ws/HandlingReportServiceImpl.java b/src/main/java/se/citerus/dddsample/interfaces/handling/ws/HandlingReportServiceImpl.java
index 025b3ea37..21a27ef1f 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/handling/ws/HandlingReportServiceImpl.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/handling/ws/HandlingReportServiceImpl.java
@@ -1,5 +1,6 @@
package se.citerus.dddsample.interfaces.handling.ws;
+import jakarta.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
@@ -9,7 +10,6 @@
import se.citerus.dddsample.application.ApplicationEvents;
import se.citerus.dddsample.interfaces.handling.HandlingEventRegistrationAttempt;
-import javax.validation.Valid;
import java.lang.invoke.MethodHandles;
import java.util.List;
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 4b051909d..3879e9115 100644
--- a/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java
+++ b/src/main/java/se/citerus/dddsample/interfaces/tracking/CargoTrackingController.java
@@ -1,5 +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.stereotype.Controller;
import org.springframework.validation.BindingResult;
@@ -12,7 +15,6 @@
import se.citerus.dddsample.domain.model.handling.HandlingEvent;
import se.citerus.dddsample.domain.model.handling.HandlingEventRepository;
-import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -28,35 +30,32 @@
* helps us shield the domain model classes.
*
*
- * @eee se.citerus.dddsample.application.web.CargoTrackingViewAdapter
+ * @see CargoTrackingViewAdapter
* @see se.citerus.dddsample.interfaces.booking.web.CargoAdminController
*/
@Controller
@RequestMapping("/track")
+@RequiredArgsConstructor
public final class CargoTrackingController {
- private CargoRepository cargoRepository;
- private HandlingEventRepository handlingEventRepository;
- private MessageSource messageSource;
-
- public CargoTrackingController(CargoRepository cargoRepository, HandlingEventRepository handlingEventRepository, MessageSource messageSource) {
- this.cargoRepository = cargoRepository;
- this.handlingEventRepository = handlingEventRepository;
- this.messageSource = messageSource;
- }
+ private final CargoRepository cargoRepository;
+ private final HandlingEventRepository handlingEventRepository;
+ private final MessageSource messageSource;
+ private final TrackCommandValidator trackCommandValidator;
@RequestMapping(method = RequestMethod.GET)
- public String get(final Map model) {
- model.put("trackCommand", new TrackCommand()); // TODO why is this method adding a TrackCommand without id?
+ public String index(final Map model) {
+ // using the empty command to support the thymeleaf form `