@Nonnull public static List<JobEvent> toJobEvents (final @Nullable List<JobEventXml> jobEventsXml) { return (jobEventsXml == null) ? Collections.emptyList() : jobEventsXml.stream().map(jobEventXml -> jobEventXml.toBuilder().create()).collect(toList()); } }
final JobEvent j1 = JobEvent.builder().withId(new Id("1")) .withName("Consultancy") .withDescription("Consultancy description") .withStartDateTime(parseDateTime("2014-01-05T12:34:56.0")) .withEndDateTime(parseDateTime("2014-01-05T13:45:34.0")) .withHourlyRate(new Money(48, "EUR")) .withEarnings(new Money(430, "EUR")) .create();
return JobEvent.builder().withId(jobEventConfig.getId("uniqueIdentifier")) .withType(type.getMappedType()) .withStartDateTime(jobEventConfig.getDateTime("jobEventStartDate")) .withEndDateTime(jobEventConfig.getDateTime("jobEventEndDate")) .withName(jobEventConfig.getString("jobEventName")) .withDescription(jobEventConfig.getString("jobEventNotes")) .withHourlyRate(jobEventConfig.getMoney("jobEventRate")) .withEarnings(jobEventConfig.getMoney("jobEventEarnings")) .withEvents(importJobEvents(jobEventConfig.getStream("children"))) .create();
@Nonnull private static List<JobEvent> createJobEvents (final @Nonnull LocalDate startDate, final @Nonnull LocalDate endDate, final @Nonnull Money rate) { final List<JobEvent> result = new ArrayList<>(); final long days = startDate.until(endDate, ChronoUnit.DAYS); for (int i = 1; i <= days; i++) { final LocalDateTime s = startDate.plusDays(i - 1).atTime(8, 0).plusMinutes(i * 3); final LocalDateTime e = s.plusMinutes(60 + i * 4); final double hours = s.until(e, ChronoUnit.MINUTES) / 60.0; final BigDecimal earnings = rate.getAmount().multiply(new BigDecimal(hours)); result.add(JobEvent.builder().withId(new Id("" + nextId++)) .withName("Event #" + i) .withDescription("Description of Event #" + i) .withType(JobEvent.Type.TIMED) .withEarnings(new Money(earnings, "EUR")) .withStartDateTime(s) .withEndDateTime(e) .withHourlyRate(rate) .create()); } return result; }
@Nonnull public JobEvent.Builder toBuilder() { return JobEvent.builder().withId(id) .withType(type) .withStartDateTime(startDateTime) .withEndDateTime(endDateTime) .withName(name) .withDescription(description) .withEarnings(earnings) .withHourlyRate(hourlyRate) .withEvents(toJobEvents(jobEventsXml)); }