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
This commit is contained in:
Konstantin Kläger 2018-02-19 16:22:45 +01:00 committed by Marcel Lengl
parent 4c9dd20f39
commit 11442571f2
2 changed files with 24 additions and 19 deletions

View File

@ -1,7 +1,10 @@
package pro.taskana.impl; package pro.taskana.impl;
import java.time.DayOfWeek; 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.ArrayList;
import java.util.List; import java.util.List;
@ -23,10 +26,10 @@ public final class DaysToWorkingDaysConverter {
private static DaysToWorkingDaysConverter instance; private static DaysToWorkingDaysConverter instance;
private static ArrayList<Integer> positiveDaysToWorkingDays; private static ArrayList<Integer> positiveDaysToWorkingDays;
private static ArrayList<Integer> negativeDaysToWorkingDays; private static ArrayList<Integer> negativeDaysToWorkingDays;
private static LocalDate dateCreated; private static Instant dateCreated;
private DaysToWorkingDaysConverter(List<ReportLineItemDefinition> reportLineItemDefinitions, private DaysToWorkingDaysConverter(List<ReportLineItemDefinition> reportLineItemDefinitions,
LocalDate referenceDate) { Instant referenceDate) {
positiveDaysToWorkingDays = generatePositiveDaysToWorkingDays(reportLineItemDefinitions, referenceDate); positiveDaysToWorkingDays = generatePositiveDaysToWorkingDays(reportLineItemDefinitions, referenceDate);
negativeDaysToWorkingDays = generateNegativeDaysToWorkingDays(reportLineItemDefinitions, referenceDate); negativeDaysToWorkingDays = generateNegativeDaysToWorkingDays(reportLineItemDefinitions, referenceDate);
dateCreated = referenceDate; dateCreated = referenceDate;
@ -41,7 +44,7 @@ public final class DaysToWorkingDaysConverter {
* @return an instance of the DaysToWorkingDaysConverter * @return an instance of the DaysToWorkingDaysConverter
*/ */
public static DaysToWorkingDaysConverter initialize(List<ReportLineItemDefinition> reportLineItemDefinitions) { public static DaysToWorkingDaysConverter initialize(List<ReportLineItemDefinition> reportLineItemDefinitions) {
return initialize(reportLineItemDefinitions, LocalDate.now()); return initialize(reportLineItemDefinitions, Instant.now());
} }
/** /**
@ -51,11 +54,11 @@ public final class DaysToWorkingDaysConverter {
* @param reportLineItemDefinitions * @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that determines the size of the table * a list of {@link ReportLineItemDefinition}s that determines the size of the table
* @param referenceDate * @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 * @return an instance of the DaysToWorkingDaysConverter
*/ */
public static DaysToWorkingDaysConverter initialize(List<ReportLineItemDefinition> reportLineItemDefinitions, public static DaysToWorkingDaysConverter initialize(List<ReportLineItemDefinition> reportLineItemDefinitions,
LocalDate referenceDate) { Instant referenceDate) {
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Initialize DaysToWorkingDaysConverter with reportLineItemDefinitions: {}", LOGGER.debug("Initialize DaysToWorkingDaysConverter with reportLineItemDefinitions: {}",
LoggerUtils.listToString(reportLineItemDefinitions)); LoggerUtils.listToString(reportLineItemDefinitions));
@ -65,7 +68,7 @@ public final class DaysToWorkingDaysConverter {
if (instance == null if (instance == null
|| !positiveDaysToWorkingDays.contains(largesLowerLimit) || !positiveDaysToWorkingDays.contains(largesLowerLimit)
|| !negativeDaysToWorkingDays.contains(smallestUpperLimit) || !negativeDaysToWorkingDays.contains(smallestUpperLimit)
|| !dateCreated.isEqual(referenceDate)) { || !dateCreated.truncatedTo(ChronoUnit.DAYS).equals(referenceDate.truncatedTo(ChronoUnit.DAYS))) {
instance = new DaysToWorkingDaysConverter(reportLineItemDefinitions, referenceDate); instance = new DaysToWorkingDaysConverter(reportLineItemDefinitions, referenceDate);
LOGGER.debug("Create new converter for the values from {} until {} for the date: {}.", largesLowerLimit, LOGGER.debug("Create new converter for the values from {} until {} for the date: {}.", largesLowerLimit,
@ -99,7 +102,7 @@ public final class DaysToWorkingDaysConverter {
} }
private ArrayList<Integer> generateNegativeDaysToWorkingDays( private ArrayList<Integer> generateNegativeDaysToWorkingDays(
List<ReportLineItemDefinition> reportLineItemDefinitions, LocalDate referenceDate) { List<ReportLineItemDefinition> reportLineItemDefinitions, Instant referenceDate) {
int minUpperLimit = getSmallestUpperLimit(reportLineItemDefinitions); int minUpperLimit = getSmallestUpperLimit(reportLineItemDefinitions);
ArrayList<Integer> daysToWorkingDays = new ArrayList<>(); ArrayList<Integer> daysToWorkingDays = new ArrayList<>();
daysToWorkingDays.add(0); daysToWorkingDays.add(0);
@ -116,7 +119,7 @@ public final class DaysToWorkingDaysConverter {
} }
private ArrayList<Integer> generatePositiveDaysToWorkingDays( private ArrayList<Integer> generatePositiveDaysToWorkingDays(
List<ReportLineItemDefinition> reportLineItemDefinitions, LocalDate referenceDate) { List<ReportLineItemDefinition> reportLineItemDefinitions, Instant referenceDate) {
int maxLowerLimit = getLargestLowerLimit(reportLineItemDefinitions); int maxLowerLimit = getLargestLowerLimit(reportLineItemDefinitions);
ArrayList<Integer> daysToWorkingDays = new ArrayList<>(); ArrayList<Integer> daysToWorkingDays = new ArrayList<>();
daysToWorkingDays.add(0); daysToWorkingDays.add(0);
@ -153,9 +156,11 @@ public final class DaysToWorkingDaysConverter {
return greatestLowerLimit; return greatestLowerLimit;
} }
private boolean isWorkingDay(int day, LocalDate referenceDate) { private boolean isWorkingDay(int day, Instant referenceDate) {
if (referenceDate.plusDays(day).getDayOfWeek().equals(DayOfWeek.SATURDAY) if (LocalDateTime.ofInstant(referenceDate, ZoneId.systemDefault()).plusDays(day).getDayOfWeek().equals(
|| referenceDate.plusDays(day).getDayOfWeek().equals(DayOfWeek.SUNDAY)) { DayOfWeek.SATURDAY)
|| LocalDateTime.ofInstant(referenceDate, ZoneId.systemDefault()).plusDays(day).getDayOfWeek().equals(
DayOfWeek.SUNDAY)) {
return false; return false;
} }
return true; return true;

View File

@ -3,7 +3,7 @@ package pro.taskana.impl;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotEquals;
import java.time.LocalDate; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -17,11 +17,11 @@ public class DaysToWorkingDaysConverterTest {
@Test @Test
public void testInitializeForDifferentReportLineItemDefinitions() { public void testInitializeForDifferentReportLineItemDefinitions() {
DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter
.initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z"));
DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter
.initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z"));
DaysToWorkingDaysConverter instance3 = DaysToWorkingDaysConverter DaysToWorkingDaysConverter instance3 = DaysToWorkingDaysConverter
.initialize(getLargeListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 03)); .initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-02-03T00:00:00.000Z"));
assertEquals(instance1, instance2); assertEquals(instance1, instance2);
assertNotEquals(instance1, instance3); assertNotEquals(instance1, instance3);
@ -30,9 +30,9 @@ public class DaysToWorkingDaysConverterTest {
@Test @Test
public void testInitializeForDifferentDates() { public void testInitializeForDifferentDates() {
DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter DaysToWorkingDaysConverter instance1 = DaysToWorkingDaysConverter
.initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 04)); .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-04T00:00:00.000Z"));
DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter DaysToWorkingDaysConverter instance2 = DaysToWorkingDaysConverter
.initialize(getShortListOfReportLineItemDefinitions(), LocalDate.of(2018, 02, 05)); .initialize(getShortListOfReportLineItemDefinitions(), Instant.parse("2018-02-05T00:00:00.000Z"));
assertNotEquals(instance1, instance2); assertNotEquals(instance1, instance2);
} }
@ -40,7 +40,7 @@ public class DaysToWorkingDaysConverterTest {
@Test @Test
public void testConvertDaysToWorkingDays() { public void testConvertDaysToWorkingDays() {
DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter 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(16, instance.convertDaysToWorkingDays(16));
assertEquals(11, instance.convertDaysToWorkingDays(15)); assertEquals(11, instance.convertDaysToWorkingDays(15));