TSK-379: Return all matching days in DaysToWorkingDaysConverter

- Now method convertWorkingDaysToDays returns all days that match to the
inserted working day to include weekends and holidays
This commit is contained in:
Konstantin Kläger 2018-03-14 07:04:38 +01:00 committed by Holger Hagen
parent a7c7dec43c
commit 7dc951351d
3 changed files with 130 additions and 38 deletions

View File

@ -120,33 +120,56 @@ public final class DaysToWorkingDaysConverter {
/**
* Converts an integer, that represents the age in working days, to the age in days by using the table that was
* created by initialization. If the age in working days is beyond the limits of the table, the integer will be
* returned unchanged.
* created by initialization. Because one age in working days could match to more than one age in days, the return
* value is a list of all days that match to the input parameter. If the age in working days is beyond the limits of
* the table, the integer will be returned unchanged.
*
* @param ageInWorkingDays
* represents the age in working days
* @return the age in days
* @return a list of age in days
*/
public int convertWorkingDaysToDays(int ageInWorkingDays) {
public ArrayList<Integer> convertWorkingDaysToDays(int ageInWorkingDays) {
ArrayList<Integer> list = new ArrayList<>();
int minWorkingDay = negativeDaysToWorkingDays.get(negativeDaysToWorkingDays.size() - 1);
int maxWorkingDay = positiveDaysToWorkingDays.get(positiveDaysToWorkingDays.size() - 1);
int ageInDays = 0;
if (ageInWorkingDays >= minWorkingDay && ageInWorkingDays < 0) {
while (negativeDaysToWorkingDays.get(ageInDays) > ageInWorkingDays) {
ageInDays++;
for (int ageInDays = 0; ageInDays < negativeDaysToWorkingDays.size(); ageInDays++) {
if (negativeDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(-ageInDays);
}
}
return -ageInDays;
return list;
}
if (ageInWorkingDays > 0 && ageInWorkingDays <= maxWorkingDay) {
while (positiveDaysToWorkingDays.get(ageInDays) < ageInWorkingDays) {
ageInDays++;
for (int ageInDays = 0; ageInDays < positiveDaysToWorkingDays.size(); ageInDays++) {
if (positiveDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(ageInDays);
}
}
return ageInDays;
return list;
}
return ageInWorkingDays;
if (ageInWorkingDays == 0) {
list.add(0);
for (int ageInDays = 1; ageInDays < positiveDaysToWorkingDays.size(); ageInDays++) {
if (positiveDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(ageInDays);
}
}
for (int ageInDays = 1; ageInDays < negativeDaysToWorkingDays.size(); ageInDays++) {
if (negativeDaysToWorkingDays.get(ageInDays) == ageInWorkingDays) {
list.add(-ageInDays);
}
}
return list;
}
// If ageInWorkingDays is beyond the limits of the table, the value is returned unchanged.
list.add(ageInWorkingDays);
return list;
}
public long convertWorkingDaysToDays(Instant startTime, long numberOfDays) {

View File

@ -1,5 +1,6 @@
package pro.taskana.impl;
import java.util.Collections;
import java.util.List;
import org.slf4j.Logger;
@ -322,8 +323,10 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter.initialize(reportLineItemDefinitions);
for (SelectedItem selectedItem : selectedItems) {
selectedItem.setLowerAgeLimit(instance.convertWorkingDaysToDays(selectedItem.getLowerAgeLimit()));
selectedItem.setUpperAgeLimit(instance.convertWorkingDaysToDays(selectedItem.getUpperAgeLimit()));
selectedItem
.setLowerAgeLimit(Collections.min(instance.convertWorkingDaysToDays(selectedItem.getLowerAgeLimit())));
selectedItem
.setUpperAgeLimit(Collections.max(instance.convertWorkingDaysToDays(selectedItem.getUpperAgeLimit())));
}
return selectedItems;
}

View File

@ -136,32 +136,98 @@ public class DaysToWorkingDaysConverterTest {
DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter
.initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-02-27T00:00:00.000Z"));
assertEquals(-13, instance.convertWorkingDaysToDays(-13));
assertEquals(-12, instance.convertWorkingDaysToDays(-12));
assertEquals(Arrays.asList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(Arrays.asList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(-12, instance.convertWorkingDaysToDays(-8));
assertEquals(-11, instance.convertWorkingDaysToDays(-7));
assertEquals(-8, instance.convertWorkingDaysToDays(-6));
assertEquals(-7, instance.convertWorkingDaysToDays(-5));
assertEquals(-6, instance.convertWorkingDaysToDays(-4));
assertEquals(-5, instance.convertWorkingDaysToDays(-3));
assertEquals(-4, instance.convertWorkingDaysToDays(-2));
assertEquals(-1, instance.convertWorkingDaysToDays(-1));
assertEquals(0, instance.convertWorkingDaysToDays(0));
assertEquals(1, instance.convertWorkingDaysToDays(1));
assertEquals(2, instance.convertWorkingDaysToDays(2));
assertEquals(3, instance.convertWorkingDaysToDays(3));
assertEquals(6, instance.convertWorkingDaysToDays(4));
assertEquals(7, instance.convertWorkingDaysToDays(5));
assertEquals(8, instance.convertWorkingDaysToDays(6));
assertEquals(9, instance.convertWorkingDaysToDays(7));
assertEquals(10, instance.convertWorkingDaysToDays(8));
assertEquals(13, instance.convertWorkingDaysToDays(9));
assertEquals(14, instance.convertWorkingDaysToDays(10));
assertEquals(15, instance.convertWorkingDaysToDays(11));
assertEquals(Arrays.asList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(Arrays.asList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(Arrays.asList(-8, -9, -10), instance.convertWorkingDaysToDays(-6));
assertEquals(Arrays.asList(-7), instance.convertWorkingDaysToDays(-5));
assertEquals(Arrays.asList(-6), instance.convertWorkingDaysToDays(-4));
assertEquals(Arrays.asList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(Arrays.asList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(Arrays.asList(-1, -2, -3), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0), instance.convertWorkingDaysToDays(0));
assertEquals(Arrays.asList(1), instance.convertWorkingDaysToDays(1));
assertEquals(Arrays.asList(2), instance.convertWorkingDaysToDays(2));
assertEquals(Arrays.asList(3, 4, 5), instance.convertWorkingDaysToDays(3));
assertEquals(Arrays.asList(6), instance.convertWorkingDaysToDays(4));
assertEquals(Arrays.asList(7), instance.convertWorkingDaysToDays(5));
assertEquals(Arrays.asList(8), instance.convertWorkingDaysToDays(6));
assertEquals(Arrays.asList(9), instance.convertWorkingDaysToDays(7));
assertEquals(Arrays.asList(10, 11, 12), instance.convertWorkingDaysToDays(8));
assertEquals(Arrays.asList(13), instance.convertWorkingDaysToDays(9));
assertEquals(Arrays.asList(14), instance.convertWorkingDaysToDays(10));
assertEquals(Arrays.asList(15), instance.convertWorkingDaysToDays(11));
assertEquals(12, instance.convertWorkingDaysToDays(12));
assertEquals(13, instance.convertWorkingDaysToDays(13));
assertEquals(Arrays.asList(12), instance.convertWorkingDaysToDays(12));
assertEquals(Arrays.asList(13), instance.convertWorkingDaysToDays(13));
}
@Test
public void testConvertWorkingDaysToDaysAtWeekend() throws InvalidArgumentException {
DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter
.initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-03-10T00:00:00.000Z"));
assertEquals(Arrays.asList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(Arrays.asList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(Arrays.asList(-10), instance.convertWorkingDaysToDays(-8));
assertEquals(Arrays.asList(-9), instance.convertWorkingDaysToDays(-7));
assertEquals(Arrays.asList(-8), instance.convertWorkingDaysToDays(-6));
assertEquals(Arrays.asList(-5, -6, -7), instance.convertWorkingDaysToDays(-5));
assertEquals(Arrays.asList(-4), instance.convertWorkingDaysToDays(-4));
assertEquals(Arrays.asList(-3), instance.convertWorkingDaysToDays(-3));
assertEquals(Arrays.asList(-2), instance.convertWorkingDaysToDays(-2));
assertEquals(Arrays.asList(-1), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1), instance.convertWorkingDaysToDays(0));
assertEquals(Arrays.asList(2), instance.convertWorkingDaysToDays(1));
assertEquals(Arrays.asList(3), instance.convertWorkingDaysToDays(2));
assertEquals(Arrays.asList(4), instance.convertWorkingDaysToDays(3));
assertEquals(Arrays.asList(5), instance.convertWorkingDaysToDays(4));
assertEquals(Arrays.asList(6, 7, 8), instance.convertWorkingDaysToDays(5));
assertEquals(Arrays.asList(9), instance.convertWorkingDaysToDays(6));
assertEquals(Arrays.asList(10), instance.convertWorkingDaysToDays(7));
assertEquals(Arrays.asList(11), instance.convertWorkingDaysToDays(8));
assertEquals(Arrays.asList(12), instance.convertWorkingDaysToDays(9));
assertEquals(Arrays.asList(13, 14, 15), instance.convertWorkingDaysToDays(10));
assertEquals(Arrays.asList(16), instance.convertWorkingDaysToDays(11));
assertEquals(Arrays.asList(12), instance.convertWorkingDaysToDays(12));
assertEquals(Arrays.asList(13), instance.convertWorkingDaysToDays(13));
}
@Test
public void testConvertWorkingDaysToDaysOnEasterSunday() throws InvalidArgumentException {
DaysToWorkingDaysConverter instance = DaysToWorkingDaysConverter
.initialize(getLargeListOfReportLineItemDefinitions(), Instant.parse("2018-04-01T00:00:00.000Z"));
assertEquals(Arrays.asList(-13), instance.convertWorkingDaysToDays(-13));
assertEquals(Arrays.asList(-12), instance.convertWorkingDaysToDays(-12));
assertEquals(Arrays.asList(-12), instance.convertWorkingDaysToDays(-8));
assertEquals(Arrays.asList(-11), instance.convertWorkingDaysToDays(-7));
assertEquals(Arrays.asList(-10), instance.convertWorkingDaysToDays(-6));
assertEquals(Arrays.asList(-9), instance.convertWorkingDaysToDays(-5));
assertEquals(Arrays.asList(-6, -7, -8), instance.convertWorkingDaysToDays(-4));
assertEquals(Arrays.asList(-5), instance.convertWorkingDaysToDays(-3));
assertEquals(Arrays.asList(-4), instance.convertWorkingDaysToDays(-2));
assertEquals(Arrays.asList(-3), instance.convertWorkingDaysToDays(-1));
assertEquals(Arrays.asList(0, 1, -1, -2), instance.convertWorkingDaysToDays(0));
assertEquals(Arrays.asList(2), instance.convertWorkingDaysToDays(1));
assertEquals(Arrays.asList(3), instance.convertWorkingDaysToDays(2));
assertEquals(Arrays.asList(4), instance.convertWorkingDaysToDays(3));
assertEquals(Arrays.asList(5, 6, 7), instance.convertWorkingDaysToDays(4));
assertEquals(Arrays.asList(8), instance.convertWorkingDaysToDays(5));
assertEquals(Arrays.asList(9), instance.convertWorkingDaysToDays(6));
assertEquals(Arrays.asList(10), instance.convertWorkingDaysToDays(7));
assertEquals(Arrays.asList(11), instance.convertWorkingDaysToDays(8));
assertEquals(Arrays.asList(12, 13, 14), instance.convertWorkingDaysToDays(9));
assertEquals(Arrays.asList(15), instance.convertWorkingDaysToDays(10));
assertEquals(Arrays.asList(16), instance.convertWorkingDaysToDays(11));
assertEquals(Arrays.asList(12), instance.convertWorkingDaysToDays(12));
assertEquals(Arrays.asList(13), instance.convertWorkingDaysToDays(13));
}
@Test