From 11442571f20c85ccc9e9a695e7ac877ba9a33e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Kl=C3=A4ger?= Date: Mon, 19 Feb 2018 16:22:45 +0100 Subject: [PATCH] TSK-321: Change LocalDate to Instant in DaysToWorkingDaysConverter - The instant is converted back to LocalDateTime to check whether a day is saturday or sunday - Update also the unit test for this converter --- .../impl/DaysToWorkingDaysConverter.java | 29 +++++++++++-------- .../impl/DaysToWorkingDaysConverterTest.java | 14 ++++----- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java b/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java index 08a0d500f..375ffe5d8 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java @@ -1,7 +1,10 @@ package pro.taskana.impl; import java.time.DayOfWeek; -import java.time.LocalDate; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @@ -23,10 +26,10 @@ public final class DaysToWorkingDaysConverter { private static DaysToWorkingDaysConverter instance; private static ArrayList positiveDaysToWorkingDays; private static ArrayList negativeDaysToWorkingDays; - private static LocalDate dateCreated; + private static Instant dateCreated; private DaysToWorkingDaysConverter(List reportLineItemDefinitions, - LocalDate referenceDate) { + Instant referenceDate) { positiveDaysToWorkingDays = generatePositiveDaysToWorkingDays(reportLineItemDefinitions, referenceDate); negativeDaysToWorkingDays = generateNegativeDaysToWorkingDays(reportLineItemDefinitions, referenceDate); dateCreated = referenceDate; @@ -41,7 +44,7 @@ public final class DaysToWorkingDaysConverter { * @return an instance of the DaysToWorkingDaysConverter */ public static DaysToWorkingDaysConverter initialize(List reportLineItemDefinitions) { - return initialize(reportLineItemDefinitions, LocalDate.now()); + return initialize(reportLineItemDefinitions, Instant.now()); } /** @@ -51,11 +54,11 @@ public final class DaysToWorkingDaysConverter { * @param reportLineItemDefinitions * a list of {@link ReportLineItemDefinition}s that determines the size of the table * @param referenceDate - * a {@link LocalDate} that represents the current day of the table + * a {@link Instant} that represents the current day of the table * @return an instance of the DaysToWorkingDaysConverter */ public static DaysToWorkingDaysConverter initialize(List reportLineItemDefinitions, - LocalDate referenceDate) { + Instant referenceDate) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Initialize DaysToWorkingDaysConverter with reportLineItemDefinitions: {}", LoggerUtils.listToString(reportLineItemDefinitions)); @@ -65,7 +68,7 @@ public final class DaysToWorkingDaysConverter { if (instance == null || !positiveDaysToWorkingDays.contains(largesLowerLimit) || !negativeDaysToWorkingDays.contains(smallestUpperLimit) - || !dateCreated.isEqual(referenceDate)) { + || !dateCreated.truncatedTo(ChronoUnit.DAYS).equals(referenceDate.truncatedTo(ChronoUnit.DAYS))) { instance = new DaysToWorkingDaysConverter(reportLineItemDefinitions, referenceDate); LOGGER.debug("Create new converter for the values from {} until {} for the date: {}.", largesLowerLimit, @@ -99,7 +102,7 @@ public final class DaysToWorkingDaysConverter { } private ArrayList generateNegativeDaysToWorkingDays( - List reportLineItemDefinitions, LocalDate referenceDate) { + List reportLineItemDefinitions, Instant referenceDate) { int minUpperLimit = getSmallestUpperLimit(reportLineItemDefinitions); ArrayList daysToWorkingDays = new ArrayList<>(); daysToWorkingDays.add(0); @@ -116,7 +119,7 @@ public final class DaysToWorkingDaysConverter { } private ArrayList generatePositiveDaysToWorkingDays( - List reportLineItemDefinitions, LocalDate referenceDate) { + List reportLineItemDefinitions, Instant referenceDate) { int maxLowerLimit = getLargestLowerLimit(reportLineItemDefinitions); ArrayList daysToWorkingDays = new ArrayList<>(); daysToWorkingDays.add(0); @@ -153,9 +156,11 @@ public final class DaysToWorkingDaysConverter { return greatestLowerLimit; } - private boolean isWorkingDay(int day, LocalDate referenceDate) { - if (referenceDate.plusDays(day).getDayOfWeek().equals(DayOfWeek.SATURDAY) - || referenceDate.plusDays(day).getDayOfWeek().equals(DayOfWeek.SUNDAY)) { + private boolean isWorkingDay(int day, Instant referenceDate) { + if (LocalDateTime.ofInstant(referenceDate, ZoneId.systemDefault()).plusDays(day).getDayOfWeek().equals( + DayOfWeek.SATURDAY) + || LocalDateTime.ofInstant(referenceDate, ZoneId.systemDefault()).plusDays(day).getDayOfWeek().equals( + DayOfWeek.SUNDAY)) { return false; } return true; diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java index 612fe9c2c..5896dcf4b 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java @@ -3,7 +3,7 @@ package pro.taskana.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; -import java.time.LocalDate; +import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -17,11 +17,11 @@ public class DaysToWorkingDaysConverterTest { @Test public void testInitializeForDifferentReportLineItemDefinitions() { DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter - .initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); + .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z")); DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter - .initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); + .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z")); DaysToWorkingDaysConverter instance3 = DaysToWorkingDaysConverter - .initialize(getLargeListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); + .initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z")); assertEquals(instance1, instance2); assertNotEquals(instance1, instance3); @@ -30,9 +30,9 @@ public class DaysToWorkingDaysConverterTest { @Test public void testInitializeForDifferentDates() { DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter - .initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 04)); + .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-04T00:00:00.000Z")); DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter - .initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 05)); + .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-05T00:00:00.000Z")); assertNotEquals(instance1, instance2); } @@ -40,7 +40,7 @@ public class DaysToWorkingDaysConverterTest { @Test public void testConvertDaysToWorkingDays() { DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter - .initialize(getLargeListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 06)); + .initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-02-06T00:00:00.000Z")); assertEquals(16, instance.convertDaysToWorkingDays(16)); assertEquals(11, instance.convertDaysToWorkingDays(15));