diff --git a/src/main/java/telraam/database/daos/BatonDAO.java b/src/main/java/telraam/database/daos/BatonDAO.java index f0859d1..2aefda9 100644 --- a/src/main/java/telraam/database/daos/BatonDAO.java +++ b/src/main/java/telraam/database/daos/BatonDAO.java @@ -28,6 +28,10 @@ public interface BatonDAO extends DAO { @RegisterBeanMapper(Baton.class) Optional getById(@Bind("id") int id); + @SqlQuery("SELECT * FROM baton WHERE mac = :mac") + @RegisterBeanMapper(Baton.class) + Optional getByMac(@Bind("mac") String mac); + @Override @SqlUpdate("DELETE FROM baton WHERE id = :id") @RegisterBeanMapper(Baton.class) diff --git a/src/main/java/telraam/monitoring/BatonStatusHolder.java b/src/main/java/telraam/monitoring/BatonStatusHolder.java index db59421..b791e0e 100644 --- a/src/main/java/telraam/monitoring/BatonStatusHolder.java +++ b/src/main/java/telraam/monitoring/BatonStatusHolder.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Optional; public class BatonStatusHolder { // Map from batonMac to batonStatus @@ -23,13 +24,18 @@ public class BatonStatusHolder { public BatonStatusHolder(BatonDAO BDAO, DetectionDAO DDAO) { batonDAO = BDAO; detectionDAO = DDAO; - this.initStatus(); } - private void initStatus() { - var batons = batonDAO.getAll(); - for (Baton baton : batons) { - BatonStatus batonStatus = new BatonStatus( + private BatonStatus getStatusForBaton(String batonMac) { + BatonStatus batonStatus = batonStatusMap.get(batonMac); + if (batonStatus == null) { + Optional optionalBaton = batonDAO.getByMac(batonMac); + if (optionalBaton.isEmpty()) { + return null; + } + Baton baton = optionalBaton.get(); + + batonStatus = new BatonStatus( baton.getMac().toLowerCase(), baton.getId(), baton.getName(), @@ -41,6 +47,7 @@ private void initStatus() { ); batonStatusMap.put(baton.getMac().toLowerCase(), batonStatus); } + return batonStatus; } @@ -83,13 +90,13 @@ public BatonStatus GetBatonStatus(Integer batonId) { baton.ifPresent(value -> batonIdToMac.put(batonId, value.getMac().toLowerCase())); } String batonMac = batonIdToMac.get(batonId); - return batonStatusMap.get(batonMac); + return getStatusForBaton(batonMac); } public BatonStatus createBatonStatus(Integer batonId) { String batonMac = batonIdToMac.get(batonId); if (batonMac != null) { - return batonStatusMap.get(batonMac); + return getStatusForBaton(batonMac); } var baton = batonDAO.getById(batonId); if (baton.isEmpty()) {