diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupImportService.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupImportService.java index 9380079..65211de 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupImportService.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupImportService.java @@ -1,5 +1,6 @@ package de.ph87.homeautomation.knx.group; +import de.ph87.homeautomation.property.PropertyReader; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; @@ -23,6 +24,8 @@ public class KnxGroupImportService { private final KnxGroupRepository knxGroupRepository; + private final PropertyReader propertyReader; + public void importGroups() { try { execute("/usr/bin/git", "fetch", "--all"); @@ -34,6 +37,18 @@ public class KnxGroupImportService { knxGroupRepository.findAll().forEach(knxGroup -> knxGroup.setEts(false)); try { Jsoup.parse(new File(ETS_HOME, "G"), "UTF-8").select("GA").forEach(this::importGroup); + knxGroupRepository.findAllByEtsFalse().forEach(group -> { + log.warn("Removing obsolete group: {}", group); + propertyReader.findAllByReadChannel_Id(group.getId()).forEach(property -> { + property.setReadChannel(null); + log.warn(" - removed group as Property readChannel: {}", property); + }); + propertyReader.findAllByWriteChannel_Id(group.getId()).forEach(property -> { + property.setWriteChannel(null); + log.warn(" - removed group as Property writeChannel: {}", property); + }); + knxGroupRepository.delete(group); + }); } catch (IOException e) { log.error("Failed to import KnxGroups: {}", e.toString()); } @@ -73,7 +88,13 @@ public class KnxGroupImportService { private void setDpt(final KnxGroup knxGroup, final String dptString) { final Matcher mainSub = Pattern.compile("^DPST-(?
\\d+)-(?\\d+)$").matcher(dptString); if (mainSub.matches()) { - knxGroup.setDptMain(Integer.parseInt(mainSub.group("main"))); + final int main = Integer.parseInt(mainSub.group("main")); + if (knxGroup.getDptMain() != main) { + knxGroup.setLastTelegram(null); + knxGroup.setValue(null); + knxGroup.setTimestamp(null); + } + knxGroup.setDptMain(main); knxGroup.setDptSub(Integer.parseInt(mainSub.group("sub"))); return; } diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupRepository.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupRepository.java index 72c689d..b6e8bb1 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupRepository.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupRepository.java @@ -1,18 +1,16 @@ package de.ph87.homeautomation.knx.group; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.ListCrudRepository; import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; -public interface KnxGroupRepository extends CrudRepository, JpaSpecificationExecutor { +public interface KnxGroupRepository extends ListCrudRepository, JpaSpecificationExecutor { Optional findByAddressRaw(int rawAddress); - List findAll(); - Optional findFirstBySend_NextTimestampNotNullOrderBySend_NextTimestampAsc(); Optional findFirstByRead_NextTimestampLessThanEqualOrderByRead_NextTimestampAsc(ZonedDateTime timestamp); @@ -21,4 +19,6 @@ public interface KnxGroupRepository extends CrudRepository, JpaS List findAllByNameContainsIgnoreCaseOrAddressStrContainsIgnoreCase(String name, String addressStr); + List findAllByEtsFalse(); + } diff --git a/src/main/java/de/ph87/homeautomation/property/PropertyReader.java b/src/main/java/de/ph87/homeautomation/property/PropertyReader.java index f03a15b..6ad32e3 100644 --- a/src/main/java/de/ph87/homeautomation/property/PropertyReader.java +++ b/src/main/java/de/ph87/homeautomation/property/PropertyReader.java @@ -23,6 +23,10 @@ public class PropertyReader { return propertyRepository.findAllByReadChannel_Id(readChannelId); } + public List findAllByWriteChannel_Id(final long writeChannelId) { + return propertyRepository.findAllByWriteChannel_Id(writeChannelId); + } + public List search(final String term) { return RepositorySearchHelper.search(term, propertyRepository, "title", propertyMapper::toDto); } diff --git a/src/main/java/de/ph87/homeautomation/property/PropertyRepository.java b/src/main/java/de/ph87/homeautomation/property/PropertyRepository.java index 38caa23..6bd5987 100644 --- a/src/main/java/de/ph87/homeautomation/property/PropertyRepository.java +++ b/src/main/java/de/ph87/homeautomation/property/PropertyRepository.java @@ -12,7 +12,7 @@ public interface PropertyRepository extends JpaRepository, JpaSp List findAllByReadChannel_Id(long readChannelId); - List findAllByTitleLikeIgnoreCase(final String like); + List findAllByWriteChannel_Id(final long writeChannelId); boolean existsByTitle(String title);