diff --git a/src/se/hal/deamon/PCDataSynchronizationClient.java b/src/se/hal/deamon/PCDataSynchronizationClient.java index 93a81455..47b2b309 100755 --- a/src/se/hal/deamon/PCDataSynchronizationClient.java +++ b/src/se/hal/deamon/PCDataSynchronizationClient.java @@ -7,6 +7,7 @@ import se.hal.struct.Sensor; import se.hal.struct.User; import zutil.db.DBConnection; import zutil.log.LogUtil; +import zutil.parser.json.JSONParser; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -66,7 +67,7 @@ public class PCDataSynchronizationClient implements HalDaemon { sensor.setExternalId(sensorDTO.sensorId); sensor.setName(sensorDTO.name); sensor.setType(sensorDTO.type); - sensor.setConfig(sensorDTO.config); + sensor.getDeviceConfig().setValues(JSONParser.read(sensorDTO.config)).applyConfiguration(); sensor.setUser(user); sensor.save(db); } diff --git a/src/se/hal/deamon/PCDataSynchronizationDaemon.java b/src/se/hal/deamon/PCDataSynchronizationDaemon.java index 9c6e16bb..94ad74c5 100755 --- a/src/se/hal/deamon/PCDataSynchronizationDaemon.java +++ b/src/se/hal/deamon/PCDataSynchronizationDaemon.java @@ -10,6 +10,7 @@ import zutil.db.SQLResultHandler; import zutil.log.LogUtil; import zutil.net.threaded.ThreadedTCPNetworkServer; import zutil.net.threaded.ThreadedTCPNetworkServerThread; +import zutil.parser.json.JSONWriter; import java.io.IOException; import java.io.ObjectInputStream; @@ -85,7 +86,7 @@ public class PCDataSynchronizationDaemon extends ThreadedTCPNetworkServer implem dto.sensorId = sensor.getId(); dto.name = sensor.getName(); dto.type = sensor.getType(); - dto.config = sensor.getConfig(); + dto.config = JSONWriter.toString(sensor.getDeviceConfig().getValuesAsNode()); rsp.sensors.add(dto); } } diff --git a/src/se/hal/page/EventConfigHttpPage.java b/src/se/hal/page/EventConfigHttpPage.java index 6c0cb5b9..302f0e34 100755 --- a/src/se/hal/page/EventConfigHttpPage.java +++ b/src/se/hal/page/EventConfigHttpPage.java @@ -2,6 +2,7 @@ package se.hal.page; import se.hal.ControllerManager; import se.hal.HalContext; +import se.hal.intf.HalEventData; import se.hal.intf.HalHttpPage; import se.hal.struct.Event; import se.hal.struct.User; @@ -52,22 +53,25 @@ public class EventConfigHttpPage extends HalHttpPage { if(request.containsKey("action")){ int id = (request.containsKey("id") ? Integer.parseInt(request.get("id")) : -1); Event event; + Configurator configurator; switch(request.get("action")) { // Local events case "create_local_event": event = new Event(); event.setName(request.get("name")); event.setType(request.get("type")); - //event.setConfig(request.get("config")); event.setUser(localUser); + configurator = event.getDeviceConfig(); + configurator.setValues(request); + configurator.applyConfiguration(); event.save(db); case "modify_local_event": event = Event.getEvent(db, id); if(event != null){ event.setName(request.get("name")); event.setType(request.get("type")); - //event.setConfig(request.get("config")); event.setUser(localUser); + event.getDeviceConfig().setValues(request).applyConfiguration(); event.save(db); } break; diff --git a/src/se/hal/page/SensorConfigHttpPage.java b/src/se/hal/page/SensorConfigHttpPage.java index 11937e99..de564c84 100755 --- a/src/se/hal/page/SensorConfigHttpPage.java +++ b/src/se/hal/page/SensorConfigHttpPage.java @@ -3,6 +3,7 @@ package se.hal.page; import se.hal.ControllerManager; import se.hal.HalContext; import se.hal.intf.HalHttpPage; +import se.hal.intf.HalSensorData; import se.hal.struct.Sensor; import se.hal.struct.User; import zutil.db.DBConnection; @@ -53,6 +54,7 @@ public class SensorConfigHttpPage extends HalHttpPage { int id = (request.containsKey("id") ? Integer.parseInt(request.get("id")) : -1); Sensor sensor; User user; + Configurator configurator; switch(request.get("action")) { // Local Sensors case "create_local_sensor": @@ -60,8 +62,10 @@ public class SensorConfigHttpPage extends HalHttpPage { sensor.setName(request.get("name")); sensor.setType(request.get("type")); sensor.setSynced(Boolean.parseBoolean(request.get("sync"))); - //sensor.setConfig(request.get("config")); sensor.setUser(localUser); + configurator = sensor.getDeviceConfig(); + configurator.setValues(request); + configurator.applyConfiguration(); sensor.save(db); case "modify_local_sensor": sensor = Sensor.getSensor(db, id); @@ -69,7 +73,7 @@ public class SensorConfigHttpPage extends HalHttpPage { sensor.setName(request.get("name")); sensor.setType(request.get("type")); sensor.setSynced(Boolean.parseBoolean(request.get("sync"))); - //sensor.setConfig(request.get("config")); + sensor.getDeviceConfig().setValues(request).applyConfiguration(); sensor.save(db); } break; diff --git a/src/se/hal/struct/AbstractDevice.java b/src/se/hal/struct/AbstractDevice.java index 7da94cc8..0eb4b41f 100755 --- a/src/se/hal/struct/AbstractDevice.java +++ b/src/se/hal/struct/AbstractDevice.java @@ -20,7 +20,7 @@ public abstract class AbstractDevice extends DBBean { // Sensor specific data private String name; private String type; - private String config; + private String config; // only used to store the deviceData configuration in DB // Sensor specific data private transient T deviceData; @@ -30,16 +30,23 @@ public abstract class AbstractDevice extends DBBean { private User user; - + public Configurator getDeviceConfig() { + T obj = getDeviceData(); + if (obj != null) + return new Configurator<>(obj); + return null; + } public T getDeviceData() { - if (config != null && deviceData == null) { + if (deviceData == null) { try { Class c = Class.forName(type); deviceData = (T) c.newInstance(); - Configurator configurator = new Configurator<>(deviceData); - configurator.setValues(JSONParser.read(config)); - configurator.applyConfiguration(); + if (config != null && !config.isEmpty()) { + Configurator configurator = getDeviceConfig(); + configurator.setValues(JSONParser.read(config)); + configurator.applyConfiguration(); + } } catch (Exception e) { logger.log(Level.SEVERE, "Unable to read device data", e); } @@ -48,27 +55,17 @@ public abstract class AbstractDevice extends DBBean { } public void setDeviceData(T data) { this.deviceData = data; - updateConfig(); - } - - public String getConfig() { - return config; - } - public void setConfig(String config) { - if (this.config == null || !this.config.equals(config)) { - this.config = config; - this.deviceData = null; // invalidate current sensor data object - } + updateConfigString(); } public void save(DBConnection db) throws SQLException { if (deviceData != null) - updateConfig(); + updateConfigString(); else this.config = null; super.save(db); } - protected void updateConfig() { - Configurator configurator = new Configurator<>(deviceData); + protected void updateConfigString() { + Configurator configurator = getDeviceConfig(); this.config = JSONWriter.toString(configurator.getValuesAsNode()); } diff --git a/web-resource/sensor_config.tmpl b/web-resource/sensor_config.tmpl index e6c57035..2954170c 100755 --- a/web-resource/sensor_config.tmpl +++ b/web-resource/sensor_config.tmpl @@ -24,7 +24,7 @@ {{.getName()}} {{.getType()}} {{.isSynced()}} - {{.getConfig()}} + {{.getDeviceConfig()}}
@@ -148,24 +148,24 @@ {{.getName()}} {{.getType()}} - {{.getConfig()}} + {{.getDeviceConfig()}}
- {{^.sync}} + {{^.isSynced()}} - {{/.sync}} - {{#.sync}} + {{/.isSynced()}} + {{#.isSynced()}} - {{/.sync}} + {{/.isSynced()}}