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;
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<Integer> positiveDaysToWorkingDays;
private static ArrayList<Integer> negativeDaysToWorkingDays;
private static LocalDate dateCreated;
private static Instant dateCreated;
private DaysToWorkingDaysConverter(List<ReportLineItemDefinition> 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<ReportLineItemDefinition> 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<ReportLineItemDefinition> 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<Integer> generateNegativeDaysToWorkingDays(
List<ReportLineItemDefinition> reportLineItemDefinitions, LocalDate referenceDate) {
List<ReportLineItemDefinition> reportLineItemDefinitions, Instant referenceDate) {
int minUpperLimit = getSmallestUpperLimit(reportLineItemDefinitions);
ArrayList<Integer> daysToWorkingDays = new ArrayList<>();
daysToWorkingDays.add(0);
@ -116,7 +119,7 @@ public final class DaysToWorkingDaysConverter {
}
private ArrayList<Integer> generatePositiveDaysToWorkingDays(
List<ReportLineItemDefinition> reportLineItemDefinitions, LocalDate referenceDate) {
List<ReportLineItemDefinition> reportLineItemDefinitions, Instant referenceDate) {
int maxLowerLimit = getLargestLowerLimit(reportLineItemDefinitions);
ArrayList<Integer> 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;

View File

@ -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));