Skip to content

Instantly share code, notes, and snippets.

@KDamir
Created May 2, 2017 10:46
Show Gist options
  • Save KDamir/a82ecac52fe8d0b990eb230d8a88e7f6 to your computer and use it in GitHub Desktop.
Save KDamir/a82ecac52fe8d0b990eb230d8a88e7f6 to your computer and use it in GitHub Desktop.
startOfDay
private <W extends AbstractWorkingDay> List<WorkplaceAtTimeInterval> toTimeIntervals(List<W> workingDays, LocalDate date) {
LocalDateTime branchStartDatetime = date.atTime(getTimetableDisplayStartTime());
LocalDateTime branchEndDatetime = date.atTime(getTimetableDisplayEndTime());
LocalDateTime from = getIsWorkdayEndsNextDay() ? branchStartDatetime.toLocalDate().atStartOfDay() : branchStartDatetime;
LocalDateTime to = getIsWorkdayEndsNextDay() ? from.plusDays(1) : branchEndDatetime;
List<WorkplaceAtTimeInterval> result = new ArrayList<>();
while (from.isBefore(to)) {
final LocalDateTime counterValue = LocalDateTime.from(from);
List<W> workingDaysAtTime = workingDays.stream().filter(wd -> wd.isDatetimeWithin(counterValue)).collect(Collectors.toList());
if (workingDaysAtTime.size() > 1) {
throw new InvalidWorkingDayException(String.format("An error occured while trying to build week timetable;" +
"\nAmbiguous schedule for workplace %s at dateTime %s", workingDaysAtTime.get(0).getWorkplaceId(), from));
}
if (workingDaysAtTime.isEmpty()) {
LocalDateTime nextWorkingDayStart = workingDays.stream()
.map(AbstractWorkingDay::getStartLocalDatetime)
.filter(localTime -> localTime.isAfter(counterValue))
.findFirst()
.orElse(to);
result.addAll(createEmptyAndBreakTimeIntervals(from, nextWorkingDayStart));
from = nextWorkingDayStart;
} else {
result.addAll(TimetableSlicer.sliceWorkingDayToWorkspaceInterval(from, to, workingDaysAtTime.get(0)));
from = workingDaysAtTime.get(0).getEndLocalDatetime();
}
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment