Fixed issue where new devices was not showing up in the gui as selections

This commit is contained in:
Ziver Koc 2021-08-28 16:46:55 +02:00
parent 0cf4909df4
commit ed04b687ed
2 changed files with 41 additions and 8 deletions

View file

@ -2,6 +2,7 @@ package se.hal.util;
import se.hal.HalContext; import se.hal.HalContext;
import se.hal.struct.Event; import se.hal.struct.Event;
import zutil.Timer;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.ui.conf.Configurator; import zutil.ui.conf.Configurator;
@ -20,12 +21,20 @@ import java.util.logging.Logger;
public class ConfigEventValueProvider implements Configurator.ConfigValueProvider<Event> { public class ConfigEventValueProvider implements Configurator.ConfigValueProvider<Event> {
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
private Event currentValue; protected static int DEVICE_REFRESH_TIME_IN_SECONDS = 30;
private Map<String, Event> events = new HashMap<>(); private Map<String, Event> events = new HashMap<>();
private Timer updateTimer = new Timer(DEVICE_REFRESH_TIME_IN_SECONDS * 1000);
public ConfigEventValueProvider(Class<Enum> fieldType, Object fieldValue) { public ConfigEventValueProvider() {
this.currentValue = (Event) fieldValue; refreshEventMap();
}
private void refreshEventMap() {
if (!updateTimer.hasTimedOut())
return;
try { try {
DBConnection db = HalContext.getDB(); DBConnection db = HalContext.getDB();
@ -33,11 +42,14 @@ public class ConfigEventValueProvider implements Configurator.ConfigValueProvide
for (Event event : Event.getLocalEvents(db)) { for (Event event : Event.getLocalEvents(db)) {
events.put(getValue(event), event); events.put(getValue(event), event);
} }
updateTimer.start();
} catch (SQLException e) { } catch (SQLException e) {
logger.log(Level.SEVERE, "Unable to retrieve local events.", e); logger.log(Level.SEVERE, "Unable to retrieve local events.", e);
} }
} }
@Override @Override
public String getValue(Event event) { public String getValue(Event event) {
return (event != null ? return (event != null ?
@ -47,6 +59,7 @@ public class ConfigEventValueProvider implements Configurator.ConfigValueProvide
@Override @Override
public List<String> getPossibleValues() { public List<String> getPossibleValues() {
refreshEventMap();
return new ArrayList<>(events.keySet()); return new ArrayList<>(events.keySet());
} }

View file

@ -1,8 +1,11 @@
package se.hal.util; package se.hal.util;
import se.hal.HalContext; import se.hal.HalContext;
import se.hal.struct.Event;
import se.hal.struct.Sensor; import se.hal.struct.Sensor;
import zutil.Timer;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil;
import zutil.ui.conf.Configurator; import zutil.ui.conf.Configurator;
import java.sql.SQLException; import java.sql.SQLException;
@ -10,29 +13,45 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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 * A value provider that will give all Enum values
*/ */
public class ConfigSensorValueProvider implements Configurator.ConfigValueProvider<Sensor> { public class ConfigSensorValueProvider implements Configurator.ConfigValueProvider<Sensor> {
private Sensor currentValue; private static final Logger logger = LogUtil.getLogger();
private Timer updateTimer = new Timer(DEVICE_REFRESH_TIME_IN_SECONDS * 1000);
private Map<String, Sensor> sensors = new HashMap<>(); private Map<String, Sensor> sensors = new HashMap<>();
public ConfigSensorValueProvider(Class<Enum> fieldType, Object fieldValue) { public ConfigSensorValueProvider() {
this.currentValue = (Sensor) fieldValue; refreshEventMap();
}
private synchronized void refreshEventMap() {
if (!updateTimer.hasTimedOut())
return;
try { try {
DBConnection db = HalContext.getDB(); DBConnection db = HalContext.getDB();
sensors.clear();
for (Sensor sensor : Sensor.getLocalSensors(db)) { for (Sensor sensor : Sensor.getLocalSensors(db)) {
sensors.put(getValue(sensor), sensor); sensors.put(getValue(sensor), sensor);
} }
updateTimer.start();
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException("Unable to collect Event objects.", e); logger.log(Level.SEVERE, "Unable to retrieve Sensor devices.", e);
} }
} }
@Override @Override
public String getValue(Sensor sensor) { public String getValue(Sensor sensor) {
return sensor.getName() + " (id: " + sensor.getId() + ")"; return sensor.getName() + " (id: " + sensor.getId() + ")";
@ -40,7 +59,8 @@ public class ConfigSensorValueProvider implements Configurator.ConfigValueProvid
@Override @Override
public List<String> getPossibleValues() { public List<String> getPossibleValues() {
return new ArrayList<String>(sensors.keySet()); refreshEventMap();
return new ArrayList<>(sensors.keySet());
} }
@Override @Override