Refactored Sensor and Event to extend a common super class (fixed allot of code duplication)
Former-commit-id: 290ddc85eff604b8ca80bc596b2aac1de54ee45a
This commit is contained in:
parent
61c88ed4ca
commit
92e90c5eef
6 changed files with 134 additions and 173 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
106
src/se/hal/struct/AbstractDevice.java
Executable file
106
src/se/hal/struct/AbstractDevice.java
Executable 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue