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.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<Event> {
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 Timer updateTimer = new Timer(DEVICE_REFRESH_TIME_IN_SECONDS * 1000);
public ConfigEventValueProvider(Class<Enum> 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<String> getPossibleValues() {
refreshEventMap();
return new ArrayList<>(events.keySet());
}

View file

@ -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<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<>();
public ConfigSensorValueProvider(Class<Enum> 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<String> getPossibleValues() {
return new ArrayList<String>(sensors.keySet());
refreshEventMap();
return new ArrayList<>(sensors.keySet());
}
@Override