ControllerManager has now a limbo state for Events and Sensors where they are put during their reconfiguration. Fixing issue 3
Former-commit-id: 39762fb39cd2bb68e903392ffdefd4b8f356e54f
This commit is contained in:
parent
7cf45ff232
commit
a45482b92e
2 changed files with 85 additions and 31 deletions
|
|
@ -7,38 +7,44 @@ import zutil.db.DBConnection;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
import zutil.plugin.PluginData;
|
import zutil.plugin.PluginData;
|
||||||
import zutil.plugin.PluginManager;
|
import zutil.plugin.PluginManager;
|
||||||
|
import zutil.ui.Configurator;
|
||||||
|
import zutil.ui.Configurator.*;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class manages all SensorController and EventController objects
|
* This class manages all SensorController and EventController objects
|
||||||
*/
|
*/
|
||||||
public class ControllerManager implements HalSensorReportListener, HalEventReportListener {
|
public class ControllerManager implements HalSensorReportListener,
|
||||||
|
HalEventReportListener,
|
||||||
|
PreConfigurationActionListener,
|
||||||
|
PostConfigurationActionListener {
|
||||||
private static final Logger logger = LogUtil.getLogger();
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
private static ControllerManager instance;
|
private static ControllerManager instance;
|
||||||
|
|
||||||
|
|
||||||
/** All available sensor plugins **/
|
/** All available sensor plugins **/
|
||||||
private ArrayList<Class<?>> availableSensors = new ArrayList<>();
|
private List<Class<?>> availableSensors = new ArrayList<>();
|
||||||
/** List of all registered sensors **/
|
/** List of all registered sensors **/
|
||||||
private ArrayList<Sensor> registeredSensors = new ArrayList<>();
|
private List<Sensor> registeredSensors = new ArrayList<>();
|
||||||
/** List of auto detected sensors **/
|
/** List of auto detected sensors **/
|
||||||
private ArrayList<HalSensorData> detectedSensors = new ArrayList<>();
|
private List<HalSensorData> detectedSensors = new ArrayList<>();
|
||||||
|
/** List of sensors that are currently being reconfigured **/
|
||||||
|
private List<Sensor> limboSensors = new LinkedList<>();
|
||||||
|
|
||||||
|
|
||||||
/** All available event plugins **/
|
/** All available event plugins **/
|
||||||
private ArrayList<Class<?>> availableEvents = new ArrayList<>();
|
private List<Class<?>> availableEvents = new ArrayList<>();
|
||||||
/** List of all registered events **/
|
/** List of all registered events **/
|
||||||
private ArrayList<Event> registeredEvents = new ArrayList<>();
|
private List<Event> registeredEvents = new ArrayList<>();
|
||||||
/** List of auto detected events **/
|
/** List of auto detected events **/
|
||||||
private ArrayList<HalEventData> detectedEvents = new ArrayList<>();
|
private List<HalEventData> detectedEvents = new ArrayList<>();
|
||||||
|
/** List of all registered events **/
|
||||||
|
private List<Event> limboEvents = new LinkedList<>();
|
||||||
|
|
||||||
|
|
||||||
/** A map of all instantiated controllers **/
|
/** A map of all instantiated controllers **/
|
||||||
|
|
@ -48,7 +54,7 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor
|
||||||
|
|
||||||
/////////////////////////////// SENSORS ///////////////////////////////////
|
/////////////////////////////// SENSORS ///////////////////////////////////
|
||||||
|
|
||||||
public void register(Sensor sensor) throws IllegalAccessException, InstantiationException {
|
public void register(Sensor sensor) {
|
||||||
if(sensor.getDeviceData() == null) {
|
if(sensor.getDeviceData() == null) {
|
||||||
logger.warning("Sensor data is null: "+ sensor);
|
logger.warning("Sensor data is null: "+ sensor);
|
||||||
return;
|
return;
|
||||||
|
|
@ -95,16 +101,11 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor
|
||||||
public void reportReceived(HalSensorData sensorData) {
|
public void reportReceived(HalSensorData sensorData) {
|
||||||
try{
|
try{
|
||||||
DBConnection db = HalContext.getDB();
|
DBConnection db = HalContext.getDB();
|
||||||
Sensor sensor = null;
|
Sensor sensor = findSensor(sensorData, registeredSensors);
|
||||||
for (Sensor s : registeredSensors) {
|
|
||||||
if (sensorData.equals(s.getDeviceData())) {
|
|
||||||
sensor = s;
|
|
||||||
sensor.setDeviceData(sensorData); // Set the latest data
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sensor != null) {
|
if (sensor != null) {
|
||||||
|
sensor.setDeviceData(sensorData); // Set the latest data
|
||||||
|
|
||||||
PreparedStatement stmt =
|
PreparedStatement stmt =
|
||||||
db.getPreparedStatement("INSERT INTO sensor_data_raw (timestamp, sensor_id, data) VALUES(?, ?, ?)");
|
db.getPreparedStatement("INSERT INTO sensor_data_raw (timestamp, sensor_id, data) VALUES(?, ?, ?)");
|
||||||
stmt.setLong(1, sensorData.getTimestamp());
|
stmt.setLong(1, sensorData.getTimestamp());
|
||||||
|
|
@ -124,9 +125,18 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Sensor findSensor(HalSensorData sensorData, List<Sensor> list){
|
||||||
|
for (Sensor s : list) {
|
||||||
|
if (sensorData.equals(s.getDeviceData())) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////// EVENTS ///////////////////////////////////
|
//////////////////////////////// EVENTS ///////////////////////////////////
|
||||||
|
|
||||||
public void register(Event event) throws IllegalAccessException, InstantiationException {
|
public void register(Event event) {
|
||||||
if(event.getDeviceData() == null) {
|
if(event.getDeviceData() == null) {
|
||||||
logger.warning("Sensor data is null: "+ event);
|
logger.warning("Sensor data is null: "+ event);
|
||||||
return;
|
return;
|
||||||
|
|
@ -173,16 +183,11 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor
|
||||||
public void reportReceived(HalEventData eventData) {
|
public void reportReceived(HalEventData eventData) {
|
||||||
try {
|
try {
|
||||||
DBConnection db = HalContext.getDB();
|
DBConnection db = HalContext.getDB();
|
||||||
Event event = null;
|
Event event = findRegisteredEvent(eventData, registeredEvents);
|
||||||
for (Event e : registeredEvents) {
|
|
||||||
if (eventData.equals(e.getDeviceData())) {
|
|
||||||
event = e;
|
|
||||||
event.setDeviceData(eventData); // Set the latest data
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event != null) {
|
if (event != null) {
|
||||||
|
event.setDeviceData(eventData); // Set the latest data
|
||||||
|
|
||||||
PreparedStatement stmt =
|
PreparedStatement stmt =
|
||||||
db.getPreparedStatement("INSERT INTO event_data_raw (timestamp, event_id, data) VALUES(?, ?, ?)");
|
db.getPreparedStatement("INSERT INTO event_data_raw (timestamp, event_id, data) VALUES(?, ?, ?)");
|
||||||
stmt.setLong(1, eventData.getTimestamp());
|
stmt.setLong(1, eventData.getTimestamp());
|
||||||
|
|
@ -202,7 +207,51 @@ public class ControllerManager implements HalSensorReportListener, HalEventRepor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Event findRegisteredEvent(HalEventData eventData, List<Event> list){
|
||||||
|
for (Event e : list) {
|
||||||
|
if (eventData.equals(e.getDeviceData())) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////// GENERAL ///////////////////////////////////
|
/////////////////////////////// GENERAL ///////////////////////////////////
|
||||||
|
@Override
|
||||||
|
public void postConfigurationAction(Configurator configurator, Object obj) {
|
||||||
|
if(obj instanceof HalSensorData) {
|
||||||
|
Sensor sensor = findSensor((HalSensorData) obj, registeredSensors);
|
||||||
|
if(sensor != null){
|
||||||
|
deregister(sensor);
|
||||||
|
limboSensors.add(sensor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(obj instanceof HalEventController) {
|
||||||
|
Event event = findRegisteredEvent((HalEventData) obj, registeredEvents);
|
||||||
|
if(event != null){
|
||||||
|
deregister(event);
|
||||||
|
limboEvents.add(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preConfigurationAction(Configurator configurator, Object obj) {
|
||||||
|
if(obj instanceof HalSensorController) {
|
||||||
|
Sensor sensor = findSensor((HalSensorData) obj, limboSensors);
|
||||||
|
if(sensor != null){
|
||||||
|
register(sensor);
|
||||||
|
limboSensors.remove(sensor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(obj instanceof HalEventController) {
|
||||||
|
Event event = findRegisteredEvent((HalEventData) obj, limboEvents);
|
||||||
|
if(event != null){
|
||||||
|
register(event);
|
||||||
|
limboEvents.remove(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private <T> T getControllerInstance(Class<T> c){
|
private <T> T getControllerInstance(Class<T> c){
|
||||||
Object controller = null;
|
Object controller = null;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package se.hal.struct;
|
package se.hal.struct;
|
||||||
|
|
||||||
|
import se.hal.ControllerManager;
|
||||||
import zutil.db.DBConnection;
|
import zutil.db.DBConnection;
|
||||||
import zutil.db.bean.DBBean;
|
import zutil.db.bean.DBBean;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
@ -32,8 +33,12 @@ public abstract class AbstractDevice<T> extends DBBean {
|
||||||
|
|
||||||
public Configurator<T> getDeviceConfig() {
|
public Configurator<T> getDeviceConfig() {
|
||||||
T obj = getDeviceData();
|
T obj = getDeviceData();
|
||||||
if (obj != null)
|
if (obj != null) {
|
||||||
return new Configurator<>(obj);
|
Configurator<T> configurator = new Configurator<>(obj);
|
||||||
|
configurator.setPreConfigurationListener(ControllerManager.getInstance());
|
||||||
|
configurator.setPostConfigurationListener(ControllerManager.getInstance());
|
||||||
|
return configurator;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public T getDeviceData() {
|
public T getDeviceData() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue