package com.metservice.kanban.charts;
import static com.metservice.kanban.utils.WorkingDayUtils.isWorkingDay;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDate;
import com.metservice.kanban.model.WorkItem;
/**
* Helper class for creating Charts.
*
* @author Janella Espinas, Chris Cooper
*/
public final class ChartUtils {
public static List<LocalDate> getWorkingDaysForWorkItems(List<WorkItem> workItems, LocalDate startDate,
LocalDate endDate) {
if (startDate == null) {
startDate = ChartUtils.getFirstDate(workItems);
if (startDate == null) {
startDate = endDate;
}
}
return getWorkingDays(startDate, endDate);
}
public static LocalDate getFirstDate(Iterable<WorkItem> workItems) {
LocalDate startDate = null;
for (WorkItem workItem : workItems) {
for (String phase : workItem.getType().getPhases()) {
if (workItem.hasDate(phase)) {
LocalDate date = workItem.getDate(phase);
if (startDate == null || date.isBefore(startDate)) {
startDate = date;
}
}
}
}
return startDate;
}
static List<LocalDate> getWorkingDays(LocalDate startDate, LocalDate endDate) {
List<LocalDate> dates = new ArrayList<LocalDate>();
LocalDate date = nextWorkingDayAfter(startDate.minusDays(1));
while (date.isBefore(endDate) || date.isEqual(endDate)) {
dates.add(date);
date = nextWorkingDayAfter(date);
}
return dates;
}
public static LocalDate nextWorkingDayAfter(LocalDate date) {
date = date.plusDays(1);
while (!isWorkingDay(date)) {
date = date.plusDays(1);
}
return date;
}
private ChartUtils() {
}
}