From ed04b687edda0c1ad4a3addeae3aaa82de05a8ce Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Sat, 28 Aug 2021 16:46:55 +0200 Subject: [PATCH] Fixed issue where new devices was not showing up in the gui as selections --- .../se/hal/util/ConfigEventValueProvider.java | 19 ++++++++++-- .../hal/util/ConfigSensorValueProvider.java | 30 +++++++++++++++---- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/hal-core/src/se/hal/util/ConfigEventValueProvider.java b/hal-core/src/se/hal/util/ConfigEventValueProvider.java index 402d85f2..5af86891 100644 --- a/hal-core/src/se/hal/util/ConfigEventValueProvider.java +++ b/hal-core/src/se/hal/util/ConfigEventValueProvider.java @@ -2,6 +2,7 @@ package se.hal.util; import se.hal.HalContext; import se.hal.struct.Event; +import zutil.Timer; import zutil.db.DBConnection; import zutil.log.LogUtil; import zutil.ui.conf.Configurator; @@ -20,12 +21,20 @@ import java.util.logging.Logger; public class ConfigEventValueProvider implements Configurator.ConfigValueProvider { private static final Logger logger = LogUtil.getLogger(); - private Event currentValue; + protected static int DEVICE_REFRESH_TIME_IN_SECONDS = 30; + private Map events = new HashMap<>(); + private Timer updateTimer = new Timer(DEVICE_REFRESH_TIME_IN_SECONDS * 1000); - public ConfigEventValueProvider(Class fieldType, Object fieldValue) { - this.currentValue = (Event) fieldValue; + public ConfigEventValueProvider() { + refreshEventMap(); + } + + + private void refreshEventMap() { + if (!updateTimer.hasTimedOut()) + return; try { DBConnection db = HalContext.getDB(); @@ -33,11 +42,14 @@ public class ConfigEventValueProvider implements Configurator.ConfigValueProvide for (Event event : Event.getLocalEvents(db)) { events.put(getValue(event), event); } + + updateTimer.start(); } catch (SQLException e) { logger.log(Level.SEVERE, "Unable to retrieve local events.", e); } } + @Override public String getValue(Event event) { return (event != null ? @@ -47,6 +59,7 @@ public class ConfigEventValueProvider implements Configurator.ConfigValueProvide @Override public List getPossibleValues() { + refreshEventMap(); return new ArrayList<>(events.keySet()); } diff --git a/hal-core/src/se/hal/util/ConfigSensorValueProvider.java b/hal-core/src/se/hal/util/ConfigSensorValueProvider.java index 6711aca2..0ab898c9 100644 --- a/hal-core/src/se/hal/util/ConfigSensorValueProvider.java +++ b/hal-core/src/se/hal/util/ConfigSensorValueProvider.java @@ -1,8 +1,11 @@ package se.hal.util; import se.hal.HalContext; +import se.hal.struct.Event; import se.hal.struct.Sensor; +import zutil.Timer; import zutil.db.DBConnection; +import zutil.log.LogUtil; import zutil.ui.conf.Configurator; import java.sql.SQLException; @@ -10,29 +13,45 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static se.hal.util.ConfigEventValueProvider.DEVICE_REFRESH_TIME_IN_SECONDS; /** * A value provider that will give all Enum values */ public class ConfigSensorValueProvider implements Configurator.ConfigValueProvider { - private Sensor currentValue; + private static final Logger logger = LogUtil.getLogger(); + + private Timer updateTimer = new Timer(DEVICE_REFRESH_TIME_IN_SECONDS * 1000); private Map sensors = new HashMap<>(); - public ConfigSensorValueProvider(Class fieldType, Object fieldValue) { - this.currentValue = (Sensor) fieldValue; + public ConfigSensorValueProvider() { + refreshEventMap(); + } + + + private synchronized void refreshEventMap() { + if (!updateTimer.hasTimedOut()) + return; try { DBConnection db = HalContext.getDB(); + sensors.clear(); for (Sensor sensor : Sensor.getLocalSensors(db)) { sensors.put(getValue(sensor), sensor); } + + updateTimer.start(); } catch (SQLException e) { - throw new RuntimeException("Unable to collect Event objects.", e); + logger.log(Level.SEVERE, "Unable to retrieve Sensor devices.", e); } } + @Override public String getValue(Sensor sensor) { return sensor.getName() + " (id: " + sensor.getId() + ")"; @@ -40,7 +59,8 @@ public class ConfigSensorValueProvider implements Configurator.ConfigValueProvid @Override public List getPossibleValues() { - return new ArrayList(sensors.keySet()); + refreshEventMap(); + return new ArrayList<>(sensors.keySet()); } @Override