Refactored Sensor and Event to extend a common super class (fixed allot of code duplication)

Former-commit-id: 290ddc85eff604b8ca80bc596b2aac1de54ee45a
This commit is contained in:
Ziver Koc 2016-01-15 08:45:08 +01:00
parent 61c88ed4ca
commit 92e90c5eef
6 changed files with 134 additions and 173 deletions

View file

@ -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<? extends HalSensorController> 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<? extends HalSensorController> 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<? extends HalEventController> 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<? extends HalEventController> 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;
}
}

View file

@ -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");

View file

@ -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);

View file

@ -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<T> 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<T> 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<T> 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;
}
}

View file

@ -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<HalEvent>{
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<HalEvent> 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<HalEvent> 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<? extends HalEventController> getController(){
return getEventData().getEventController();
return getDeviceData().getEventController();
}
}

View file

@ -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<HalSensor>{
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<HalSensor> 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<HalSensor> 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<? extends HalSensorController> getController(){
return getSensorData().getSensorController();
return getDeviceData().getSensorController();
}
}