From f67a0497cb1ab69fb182d6abc01412b58506d715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Sun, 3 Oct 2021 21:50:50 +0200 Subject: [PATCH] ScheduleController::findAll --- .../homeautomation/knx/group/KnxGroup.java | 4 +- .../{ComInfo.java => KnxGroupLinkInfo.java} | 2 +- .../knx/group/KnxGroupLinkService.java | 4 +- .../homeautomation/schedule/Schedule.java | 3 +- .../schedule/ScheduleController.java | 23 +++++++ .../homeautomation/schedule/ScheduleDto.java | 27 ++++++++ .../schedule/entry/ScheduleEntry.java | 2 +- .../schedule/entry/ScheduleEntryDto.java | 63 +++++++++++++++++++ 8 files changed, 121 insertions(+), 7 deletions(-) rename src/main/java/de/ph87/homeautomation/knx/group/{ComInfo.java => KnxGroupLinkInfo.java} (92%) create mode 100644 src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java create mode 100644 src/main/java/de/ph87/homeautomation/schedule/ScheduleDto.java create mode 100644 src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntryDto.java diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java index e6a6d26..2a4340b 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java @@ -44,10 +44,10 @@ public class KnxGroup { private int readInterval; @Embedded - private ComInfo read = new ComInfo(); + private KnxGroupLinkInfo read = new KnxGroupLinkInfo(); @Embedded - private ComInfo send = new ComInfo(); + private KnxGroupLinkInfo send = new KnxGroupLinkInfo(); public void setAddress(final int rawAddress) { setAddress(new GroupAddress(rawAddress)); diff --git a/src/main/java/de/ph87/homeautomation/knx/group/ComInfo.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkInfo.java similarity index 92% rename from src/main/java/de/ph87/homeautomation/knx/group/ComInfo.java rename to src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkInfo.java index b4d09de..11d591d 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/ComInfo.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkInfo.java @@ -11,7 +11,7 @@ import java.time.ZonedDateTime; @Setter @ToString @Embeddable -public class ComInfo { +public class KnxGroupLinkInfo { private boolean able = true; diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkService.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkService.java index 0c57337..93d6161 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkService.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupLinkService.java @@ -93,8 +93,8 @@ public class KnxGroupLinkService { } public ZonedDateTime getNextTimestamp() { - final Optional sendOptional = knxGroupRepository.findFirstBySend_NextTimestampNotNullOrderBySend_NextTimestampAsc().map(KnxGroup::getSend).map(ComInfo::getNextTimestamp); - final Optional readOptional = knxGroupRepository.findFirstByRead_NextTimestampNotNullOrderByRead_NextTimestampAsc().map(KnxGroup::getRead).map(ComInfo::getNextTimestamp); + final Optional sendOptional = knxGroupRepository.findFirstBySend_NextTimestampNotNullOrderBySend_NextTimestampAsc().map(KnxGroup::getSend).map(KnxGroupLinkInfo::getNextTimestamp); + final Optional readOptional = knxGroupRepository.findFirstByRead_NextTimestampNotNullOrderByRead_NextTimestampAsc().map(KnxGroup::getRead).map(KnxGroupLinkInfo::getNextTimestamp); if (sendOptional.isEmpty()) { return readOptional.orElse(null); } diff --git a/src/main/java/de/ph87/homeautomation/schedule/Schedule.java b/src/main/java/de/ph87/homeautomation/schedule/Schedule.java index d86c799..20b7e4c 100644 --- a/src/main/java/de/ph87/homeautomation/schedule/Schedule.java +++ b/src/main/java/de/ph87/homeautomation/schedule/Schedule.java @@ -26,8 +26,9 @@ public class Schedule { @Column(nullable = false, unique = true) private String name; + // TODO move ownership of relation to ScheduleEntry ??? @ToString.Exclude - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) private Set entries = new HashSet<>(); } diff --git a/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java b/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java new file mode 100644 index 0000000..68bb47d --- /dev/null +++ b/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java @@ -0,0 +1,23 @@ +package de.ph87.homeautomation.schedule; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("schedule") +@RequiredArgsConstructor +public class ScheduleController { + + private final ScheduleRepository scheduleRepository; + + @GetMapping("findAll") + public List findAll() { + return scheduleRepository.findAll().stream().map(ScheduleDto::new).collect(Collectors.toList()); + } + +} diff --git a/src/main/java/de/ph87/homeautomation/schedule/ScheduleDto.java b/src/main/java/de/ph87/homeautomation/schedule/ScheduleDto.java new file mode 100644 index 0000000..1ba0e4d --- /dev/null +++ b/src/main/java/de/ph87/homeautomation/schedule/ScheduleDto.java @@ -0,0 +1,27 @@ +package de.ph87.homeautomation.schedule; + +import de.ph87.homeautomation.schedule.entry.ScheduleEntryDto; +import lombok.Data; + +import java.util.Set; +import java.util.stream.Collectors; + +@Data +public class ScheduleDto { + + private long id; + + private boolean enabled; + + private String name; + + private Set entries; + + public ScheduleDto(final Schedule schedule) { + id = schedule.getId(); + enabled = schedule.isEnabled(); + name = schedule.getName(); + entries = schedule.getEntries().stream().map(ScheduleEntryDto::new).collect(Collectors.toSet()); + } + +} diff --git a/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntry.java b/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntry.java index f6792de..ed88d16 100644 --- a/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntry.java +++ b/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntry.java @@ -49,7 +49,7 @@ public class ScheduleEntry { private ZonedDateTime nextDateTime; - @ElementCollection + @ElementCollection(fetch = FetchType.EAGER) private Map properties = new HashMap<>(); public void setWorkday(final boolean enabled) { diff --git a/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntryDto.java b/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntryDto.java new file mode 100644 index 0000000..cf5ae3e --- /dev/null +++ b/src/main/java/de/ph87/homeautomation/schedule/entry/ScheduleEntryDto.java @@ -0,0 +1,63 @@ +package de.ph87.homeautomation.schedule.entry; + +import lombok.Data; + +import java.time.ZonedDateTime; +import java.util.HashMap; +import java.util.Map; + +@Data +public class ScheduleEntryDto { + + private long id; + + private boolean enabled; + + private boolean monday; + + private boolean tuesday; + + private boolean wednesday; + + private boolean thursday; + + private boolean friday; + + private boolean saturday; + + private boolean sunday; + + private ScheduleEntryType type; + + private double zenith; + + private int hour; + + private int minute; + + private int second; + + private ZonedDateTime nextDateTime; + + private Map properties; + + public ScheduleEntryDto(final ScheduleEntry scheduleEntry) { + id = scheduleEntry.getId(); + enabled = scheduleEntry.isEnabled(); + monday = scheduleEntry.isMonday(); + tuesday = scheduleEntry.isTuesday(); + wednesday = scheduleEntry.isWednesday(); + thursday = scheduleEntry.isThursday(); + friday = scheduleEntry.isFriday(); + saturday = scheduleEntry.isSaturday(); + sunday = scheduleEntry.isSunday(); + type = scheduleEntry.getType(); + zenith = scheduleEntry.getZenith(); + hour = scheduleEntry.getHour(); + minute = scheduleEntry.getMinute(); + second = scheduleEntry.getSecond(); + nextDateTime = scheduleEntry.getNextDateTime(); + properties = new HashMap<>(scheduleEntry.getProperties()); + } + +}