From 92e90c5eef292974dd30461b08d1c8119aa2b0ff Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 15 Jan 2016 08:45:08 +0100 Subject: [PATCH] Refactored Sensor and Event to extend a common super class (fixed allot of code duplication) Former-commit-id: 290ddc85eff604b8ca80bc596b2aac1de54ee45a --- src/se/hal/ControllerManager.java | 40 +++---- .../deamon/SensorDataAggregatorDaemon.java | 2 +- .../hal/deamon/SensorDataCleanupDaemon.java | 2 +- src/se/hal/struct/AbstractDevice.java | 106 ++++++++++++++++++ src/se/hal/struct/Event.java | 78 +------------ src/se/hal/struct/Sensor.java | 79 +------------ 6 files changed, 134 insertions(+), 173 deletions(-) create mode 100755 src/se/hal/struct/AbstractDevice.java diff --git a/src/se/hal/ControllerManager.java b/src/se/hal/ControllerManager.java index fd773b91..e57fa9bc 100755 --- a/src/se/hal/ControllerManager.java +++ b/src/se/hal/ControllerManager.java @@ -49,35 +49,35 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor /////////////////////////////// SENSORS /////////////////////////////////// public void register(Sensor sensor) throws IllegalAccessException, InstantiationException { - if(sensor.getSensorData() == null) { + if(sensor.getDeviceData() == null) { logger.warning("Sensor data is null: "+ sensor); return; } - if(!availableSensors.contains(sensor.getSensorData().getClass())) { - logger.warning("Sensor data plugin not available: "+ sensor.getSensorData().getClass()); + if(!availableSensors.contains(sensor.getDeviceData().getClass())) { + logger.warning("Sensor data plugin not available: "+ sensor.getDeviceData().getClass()); return; } - logger.info("Registering new sensor(id: "+ sensor.getId() +"): "+ sensor.getSensorData().getClass()); + logger.info("Registering new sensor(id: "+ sensor.getId() +"): "+ sensor.getDeviceData().getClass()); Class c = sensor.getController(); HalSensorController controller = getControllerInstance(c); if(controller != null) - controller.register(sensor.getSensorData()); + controller.register(sensor.getDeviceData()); registeredSensors.add(sensor); } public void deregister(Sensor sensor){ - if(sensor.getSensorData() == null) { + if(sensor.getDeviceData() == null) { logger.warning("Sensor data is null: "+ sensor); return; } - logger.info("Deregistering sensor(id: "+ sensor.getId() +"): "+ sensor.getSensorData().getClass()); + logger.info("Deregistering sensor(id: "+ sensor.getId() +"): "+ sensor.getDeviceData().getClass()); Class c = sensor.getController(); HalSensorController controller = (HalSensorController) controllerMap.get(c);; if (controller != null) { - controller.deregister(sensor.getSensorData()); + controller.deregister(sensor.getDeviceData()); registeredSensors.remove(sensor); removeControllerIfEmpty(controller); } @@ -97,9 +97,9 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor DBConnection db = HalContext.getDB(); Sensor sensor = null; for (Sensor s : registeredSensors) { - if (sensorData.equals(s.getSensorData())) { + if (sensorData.equals(s.getDeviceData())) { sensor = s; - sensor.setSensorData(sensorData); // Set the latest data + sensor.setDeviceData(sensorData); // Set the latest data break; } } @@ -127,35 +127,35 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor //////////////////////////////// EVENTS /////////////////////////////////// public void register(Event event) throws IllegalAccessException, InstantiationException { - if(event.getEventData() == null) { + if(event.getDeviceData() == null) { logger.warning("Sensor data is null: "+ event); return; } - if(!availableEvents.contains(event.getEventData().getClass())) { - logger.warning("Sensor data plugin not available: "+ event.getEventData().getClass()); + if(!availableEvents.contains(event.getDeviceData().getClass())) { + logger.warning("Sensor data plugin not available: "+ event.getDeviceData().getClass()); return; } - logger.info("Registering new event(id: "+ event.getId() +"): "+ event.getEventData().getClass()); + logger.info("Registering new event(id: "+ event.getId() +"): "+ event.getDeviceData().getClass()); Class c = event.getController(); HalEventController controller = getControllerInstance(c); if(controller != null) - controller.register(event.getEventData()); + controller.register(event.getDeviceData()); registeredEvents.add(event); } public void deregister(Event event){ - if(event.getEventData() == null) { + if(event.getDeviceData() == null) { logger.warning("Sensor data is null: "+ event); return; } - logger.info("Deregistering event(id: "+ event.getId() +"): "+ event.getEventData().getClass()); + logger.info("Deregistering event(id: "+ event.getId() +"): "+ event.getDeviceData().getClass()); Class c = event.getController(); HalEventController controller = (HalEventController) controllerMap.get(c); if (controller != null) { - controller.deregister(event.getEventData()); + controller.deregister(event.getDeviceData()); registeredEvents.remove(event); removeControllerIfEmpty(controller); } @@ -175,9 +175,9 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor DBConnection db = HalContext.getDB(); Event event = null; for (Event e : registeredEvents) { - if (eventData.equals(e.getEventData())) { + if (eventData.equals(e.getDeviceData())) { event = e; - event.setEventData(eventData); // Set the latest data + event.setDeviceData(eventData); // Set the latest data break; } } diff --git a/src/se/hal/deamon/SensorDataAggregatorDaemon.java b/src/se/hal/deamon/SensorDataAggregatorDaemon.java index 2e780255..329d195d 100755 --- a/src/se/hal/deamon/SensorDataAggregatorDaemon.java +++ b/src/se/hal/deamon/SensorDataAggregatorDaemon.java @@ -44,7 +44,7 @@ public class SensorDataAggregatorDaemon implements HalDaemon { public void aggregateSensor(Sensor sensor) { //if(sensor.getSensorData() instanceof PowerConsumptionSensor){ - logger.fine("The sensor is of type: " + sensor.getSensorData().getClass().getName()); + logger.fine("The sensor is of type: " + sensor.getDeviceData().getClass().getName()); logger.fine("aggregating raw data to five minute periods"); aggregateRawData(sensor, TimeUtility.FIVE_MINUTES_IN_MS, 5); logger.fine("aggregating five minute periods into hour periods"); diff --git a/src/se/hal/deamon/SensorDataCleanupDaemon.java b/src/se/hal/deamon/SensorDataCleanupDaemon.java index 13caaa06..dd99b902 100755 --- a/src/se/hal/deamon/SensorDataCleanupDaemon.java +++ b/src/se/hal/deamon/SensorDataCleanupDaemon.java @@ -43,7 +43,7 @@ public class SensorDataCleanupDaemon implements HalDaemon { public void cleanupSensor(Sensor sensor) { //if(sensor instanceof PowerConsumptionSensor){ - logger.fine("The sensor is of type: " + sensor.getSensorData().getClass().getName()); + logger.fine("The sensor is of type: " + sensor.getDeviceData().getClass().getName()); if(sensor.getUser().isExternal()){ cleanupExternalSensorData(sensor.getId(), TimeUtility.FIVE_MINUTES_IN_MS, TimeUtility.DAY_IN_MS); cleanupExternalSensorData(sensor.getId(), TimeUtility.DAY_IN_MS, TimeUtility.WEEK_IN_MS); diff --git a/src/se/hal/struct/AbstractDevice.java b/src/se/hal/struct/AbstractDevice.java new file mode 100755 index 00000000..d6b0f73a --- /dev/null +++ b/src/se/hal/struct/AbstractDevice.java @@ -0,0 +1,106 @@ +package se.hal.struct; + +import se.hal.intf.HalSensor; +import se.hal.intf.HalSensorController; +import zutil.db.DBConnection; +import zutil.db.bean.DBBean; +import zutil.log.LogUtil; +import zutil.parser.json.JSONParser; +import zutil.parser.json.JSONWriter; +import zutil.ui.Configurator; + +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Created by ezivkoc on 2016-01-15. + */ +public abstract class AbstractDevice extends DBBean { + private static final Logger logger = LogUtil.getLogger(); + + // Sensor specific data + private String name; + private String type; + private String config; + + // Sensor specific data + private transient T deviceData; + + // User configuration + @DBColumn("user_id") + private User user; + + + + public T getDeviceData() { + if (config != null && deviceData == null) { + try { + Class c = Class.forName(type); + deviceData = (T) c.newInstance(); + + Configurator configurator = new Configurator<>(deviceData); + configurator.setValues(JSONParser.read(config)); + } catch (Exception e) { + logger.log(Level.SEVERE, "Unable to read device data", e); + } + } + return deviceData; + } + + public void setDeviceData(T data) { + this.deviceData = data; + updateConfig(); + } + + + public void setConfig(String config) { + if (this.config == null || !this.config.equals(config)) { + this.config = config; + this.deviceData = null; // invalidate current sensor data object + } + } + + protected void updateConfig() { + Configurator configurator = new Configurator<>(deviceData); + this.config = JSONWriter.toString(configurator.getValuesAsNode()); + } + + public String getConfig() { + return config; + } + + + public void save(DBConnection db) throws SQLException { + if (deviceData != null) + updateConfig(); + else + this.config = null; + super.save(db); + } + + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + public void setType(String type) { + if (!this.type.equals(type)) { + this.type = type; + this.deviceData = null; // invalidate current sensor data object + } + } + + public User getUser() { + return user; + } + public void setUser(User user) { + this.user = user; + } +} diff --git a/src/se/hal/struct/Event.java b/src/se/hal/struct/Event.java index 05dce24e..08cc4ff2 100755 --- a/src/se/hal/struct/Event.java +++ b/src/se/hal/struct/Event.java @@ -26,20 +26,9 @@ import java.util.logging.Logger; * Created by Ziver on 2015-12-15. */ @DBBean.DBTable("event") -public class Event extends DBBean{ +public class Event extends AbstractDevice{ private static final Logger logger = LogUtil.getLogger(); - // Event specific data - private String name; - private String type; - private String config; - // Event specific data - private transient HalEvent eventData; - - // User configuration - @DBColumn("user_id") - private User user; - public static Event getEvent(DBConnection db, long id) throws SQLException{ return DBBean.load(db, Event.class, id); @@ -51,71 +40,8 @@ public class Event extends DBBean{ } - public void setEventData(HalEvent eventData){ - this.eventData = eventData; - updateConfig(); - } - public HalEvent getEventData(){ - if(eventData == null) { - try { - Class c = Class.forName(type); - eventData = (HalEvent) c.newInstance(); - - Configurator configurator = new Configurator<>(eventData); - configurator.setValues(JSONParser.read(config)); - } catch (Exception e){ - logger.log(Level.SEVERE, "Unable to read event data", e); - } - } - return eventData; - } - public void save(DBConnection db) throws SQLException { - if(eventData != null) - updateConfig(); - else - this.config = null; - super.save(db); - } - private void updateConfig(){ - Configurator configurator = new Configurator<>(eventData); - this.config = JSONWriter.toString(configurator.getValuesAsNode()); - } - - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getType() { - return type; - } - public void setType(String type) { - if( !this.type.equals(type)) { - this.type = type; - this.eventData = null; // invalidate current sensor data object - } - } - public String getConfig() { - return config; - } - public void setConfig(String config) { - if(this.config == null || !this.config.equals(config)) { - this.config = config; - this.eventData = null; // invalidate current sensor data object - } - } - - public User getUser() { - return user; - } - public void setUser(User user) { - this.user = user; - } - public Class getController(){ - return getEventData().getEventController(); + return getDeviceData().getEventController(); } } diff --git a/src/se/hal/struct/Sensor.java b/src/se/hal/struct/Sensor.java index f7ada714..884283dd 100755 --- a/src/se/hal/struct/Sensor.java +++ b/src/se/hal/struct/Sensor.java @@ -24,20 +24,10 @@ import java.util.logging.Level; import java.util.logging.Logger; -@DBBean.DBTable("sensor") -public class Sensor extends DBBean{ +@DBBean.DBTable(value="sensor", superBean=true) +public class Sensor extends AbstractDevice{ private static final Logger logger = LogUtil.getLogger(); - // Sensor specific data - private String name; - private String type; - private String config; - // Sensor specific data - private transient HalSensor sensorData; - - // User configuration - @DBColumn("user_id") - private User user; private long external_id = -1; /** local sensor= if sensor should be public. external sensor= if sensor should be requested from host **/ private boolean sync = false; @@ -83,68 +73,7 @@ public class Sensor extends DBBean{ } - public void setSensorData(HalSensor sensorData){ - this.sensorData = sensorData; - updateConfig(); - } - public HalSensor getSensorData(){ - if(config !=null && sensorData == null) { - try { - Class c = Class.forName(type); - sensorData = (HalSensor) c.newInstance(); - Configurator configurator = new Configurator<>(sensorData); - configurator.setValues(JSONParser.read(config)); - } catch (Exception e){ - logger.log(Level.SEVERE, "Unable to read sensor data", e); - } - } - return sensorData; - } - public void save(DBConnection db) throws SQLException { - if(sensorData != null) - updateConfig(); - else - this.config = null; - super.save(db); - } - private void updateConfig(){ - Configurator configurator = new Configurator<>(sensorData); - this.config = JSONWriter.toString(configurator.getValuesAsNode()); - } - - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getType() { - return type; - } - public void setType(String type) { - if( !this.type.equals(type)) { - this.type = type; - this.sensorData = null; // invalidate current sensor data object - } - } - public String getConfig() { - return config; - } - public void setConfig(String config) { - if(this.config == null || !this.config.equals(config)) { - this.config = config; - this.sensorData = null; // invalidate current sensor data object - } - } - - public User getUser() { - return user; - } - public void setUser(User user) { - this.user = user; - } public long getExternalId() { return external_id; } @@ -160,11 +89,11 @@ public class Sensor extends DBBean{ public HalSensor.AggregationMethod getAggregationMethod(){ - return getSensorData().getAggregationMethod(); + return getDeviceData().getAggregationMethod(); } public Class getController(){ - return getSensorData().getSensorController(); + return getDeviceData().getSensorController(); } }