Added events to ControllerManager
Former-commit-id: 0982aed3728ac12c562b63fad5d74b7a548e50c0
This commit is contained in:
parent
6522b817dc
commit
1f781f0c8d
3 changed files with 106 additions and 27 deletions
|
|
@ -1,8 +1,10 @@
|
||||||
package se.koc.hal;
|
package se.koc.hal;
|
||||||
|
|
||||||
import net.didion.jwnl.data.Exc;
|
import se.koc.hal.intf.HalEvent;
|
||||||
|
import se.koc.hal.intf.HalEventController;
|
||||||
import se.koc.hal.intf.HalSensor;
|
import se.koc.hal.intf.HalSensor;
|
||||||
import se.koc.hal.intf.HalSensorController;
|
import se.koc.hal.intf.HalSensorController;
|
||||||
|
import se.koc.hal.struct.Event;
|
||||||
import se.koc.hal.struct.Sensor;
|
import se.koc.hal.struct.Sensor;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
import zutil.plugin.PluginData;
|
import zutil.plugin.PluginData;
|
||||||
|
|
@ -25,16 +27,89 @@ public class ControllerManager {
|
||||||
|
|
||||||
/** All available sensor plugins **/
|
/** All available sensor plugins **/
|
||||||
private ArrayList<Class<?>> availableSensors = new ArrayList<>();
|
private ArrayList<Class<?>> availableSensors = new ArrayList<>();
|
||||||
|
/** List of all registered sensors **/
|
||||||
|
private ArrayList<Sensor> registeredSensors = new ArrayList<>();
|
||||||
/** List of auto detected sensors **/
|
/** List of auto detected sensors **/
|
||||||
private ArrayList<HalSensor> detectedSensors = new ArrayList<>();
|
private ArrayList<HalSensor> detectedSensors = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
/** All available event plugins **/
|
||||||
|
private ArrayList<Class<?>> availableEvents = new ArrayList<>();
|
||||||
|
/** List of all registered events **/
|
||||||
|
private ArrayList<Event> registeredEvents = new ArrayList<>();
|
||||||
|
/** List of auto detected events **/
|
||||||
|
private ArrayList<HalEvent> detectedEvents = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
/** A map of all instantiated controllers **/
|
/** A map of all instantiated controllers **/
|
||||||
private HashMap<Class,HalSensorController> controllerMap = new HashMap<>();
|
private HashMap<Class,Object> controllerMap = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// SENSORS ///////////////////////////////////
|
||||||
|
|
||||||
public void register(Sensor sensor) throws IllegalAccessException, InstantiationException {
|
public void register(Sensor sensor) throws IllegalAccessException, InstantiationException {
|
||||||
Class<? extends HalSensorController> c = sensor.getController();
|
Class<? extends HalSensorController> c = sensor.getController();
|
||||||
HalSensorController controller = null;
|
HalSensorController controller = getControllerInstance(c);
|
||||||
|
|
||||||
|
if(controller != null)
|
||||||
|
controller.register(sensor.getSensorData());
|
||||||
|
registeredSensors.add(sensor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deregister(Sensor sensor){
|
||||||
|
Class<? extends HalSensorController> c = sensor.getController();
|
||||||
|
HalSensorController controller = (HalSensorController) controllerMap.get(c);;
|
||||||
|
if (controller != null) {
|
||||||
|
controller.deregister(sensor.getSensorData());
|
||||||
|
registeredSensors.remove(sensor);
|
||||||
|
removeControllerIfEmpty(controller);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Class<?>> getAvailableSensors(){
|
||||||
|
return availableSensors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HalSensor> getDetectedSensors(){
|
||||||
|
return detectedSensors;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////// EVENTS ///////////////////////////////////
|
||||||
|
|
||||||
|
public void register(Event event) throws IllegalAccessException, InstantiationException {
|
||||||
|
Class<? extends HalEventController> c = event.getController();
|
||||||
|
HalEventController controller = getControllerInstance(c);
|
||||||
|
|
||||||
|
if(controller != null)
|
||||||
|
controller.register(event.getEventData());
|
||||||
|
registeredEvents.add(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deregister(Event event){
|
||||||
|
Class<? extends HalEventController> c = event.getController();
|
||||||
|
HalEventController controller = (HalEventController) controllerMap.get(c);
|
||||||
|
if (controller != null) {
|
||||||
|
controller.deregister(event.getEventData());
|
||||||
|
registeredEvents.remove(event);
|
||||||
|
removeControllerIfEmpty(controller);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Class<?>> getAvailableEvents(){
|
||||||
|
return availableEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HalEvent> getDetectedEvents(){
|
||||||
|
return detectedEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// GENERAL ///////////////////////////////////
|
||||||
|
|
||||||
|
private <T> T getControllerInstance(Class<T> c){
|
||||||
|
Object controller = null;
|
||||||
if (controllerMap.containsKey(c))
|
if (controllerMap.containsKey(c))
|
||||||
controller = controllerMap.get(c);
|
controller = controllerMap.get(c);
|
||||||
else {
|
else {
|
||||||
|
|
@ -47,35 +122,29 @@ public class ControllerManager {
|
||||||
logger.log(Level.SEVERE, "Unable to instantiate controller: "+c.getName(), e);
|
logger.log(Level.SEVERE, "Unable to instantiate controller: "+c.getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return (T)controller;
|
||||||
if(controller != null)
|
|
||||||
controller.register(sensor.getSensorData());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deregister(Sensor sensor){
|
private void removeControllerIfEmpty(Object controller){
|
||||||
Class<? extends HalSensorController> c = sensor.getController();
|
int size = Integer.MAX_VALUE;
|
||||||
HalSensorController controller;
|
if(controller instanceof HalSensorController)
|
||||||
if (controllerMap.containsKey(c)) {
|
size = ((HalSensorController) controller).size();
|
||||||
controller = controllerMap.get(c);
|
else if(controller instanceof HalEventController)
|
||||||
controller.deregister(sensor.getSensorData());
|
size = ((HalEventController) controller).size();
|
||||||
if(controller.size() == 0){
|
|
||||||
// Remove controller as it has no more registered sensors
|
if(size < 0){
|
||||||
logger.fine("Closing controller as it has no more registered sensors: "+c.getName());
|
// Remove controller as it has no more registered sensors
|
||||||
controller.close();
|
logger.fine("Closing controller as it has no more registered sensors: "+controller.getClass().getName());
|
||||||
controllerMap.remove(c);
|
controllerMap.remove(controller.getClass());
|
||||||
}
|
|
||||||
|
if(controller instanceof HalSensorController)
|
||||||
|
((HalSensorController) controller).close();
|
||||||
|
else if(controller instanceof HalEventController)
|
||||||
|
((HalEventController) controller).close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<Class<?>> getAvailableSensors(){
|
|
||||||
return availableSensors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<HalSensor> getDetectedSensors(){
|
|
||||||
return detectedSensors;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void initialize(){
|
public static void initialize(){
|
||||||
|
|
@ -84,10 +153,15 @@ public class ControllerManager {
|
||||||
Iterator<PluginData> it = pluginManager.iterator();
|
Iterator<PluginData> it = pluginManager.iterator();
|
||||||
while (it.hasNext()){
|
while (it.hasNext()){
|
||||||
PluginData plugin = it.next();
|
PluginData plugin = it.next();
|
||||||
Iterator<Class<?>> pluginIt = plugin.getClassIterator(Sensor.class);
|
Iterator<Class<?>> pluginIt = plugin.getClassIterator(HalSensor.class);
|
||||||
while (pluginIt.hasNext()){
|
while (pluginIt.hasNext()){
|
||||||
manager.availableSensors.add(pluginIt.next());
|
manager.availableSensors.add(pluginIt.next());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pluginIt = plugin.getClassIterator(HalEvent.class);
|
||||||
|
while (pluginIt.hasNext()){
|
||||||
|
manager.availableEvents.add(pluginIt.next());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
instance = manager;
|
instance = manager;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import se.koc.hal.intf.HalHttpPage;
|
||||||
import se.koc.hal.page.PCConfigureHttpPage;
|
import se.koc.hal.page.PCConfigureHttpPage;
|
||||||
import se.koc.hal.page.PCHeatMapHttpPage;
|
import se.koc.hal.page.PCHeatMapHttpPage;
|
||||||
import se.koc.hal.page.PCOverviewHttpPage;
|
import se.koc.hal.page.PCOverviewHttpPage;
|
||||||
|
import se.koc.hal.struct.Event;
|
||||||
import se.koc.hal.struct.Sensor;
|
import se.koc.hal.struct.Sensor;
|
||||||
import zutil.db.DBConnection;
|
import zutil.db.DBConnection;
|
||||||
import zutil.io.file.FileUtil;
|
import zutil.io.file.FileUtil;
|
||||||
|
|
@ -49,6 +50,9 @@ public class PowerChallenge {
|
||||||
for(Sensor sensor : Sensor.getLocalSensors(db)){
|
for(Sensor sensor : Sensor.getLocalSensors(db)){
|
||||||
ControllerManager.getInstance().register(sensor);
|
ControllerManager.getInstance().register(sensor);
|
||||||
}
|
}
|
||||||
|
for(Event event : Event.getEvents(db)){
|
||||||
|
ControllerManager.getInstance().register(event);
|
||||||
|
}
|
||||||
|
|
||||||
// init daemons
|
// init daemons
|
||||||
daemons = new HalDaemon[]{
|
daemons = new HalDaemon[]{
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ public class Event extends DBBean{
|
||||||
return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(Event.class, db) );
|
return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(Event.class, db) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public HalEvent getEventData(){
|
public HalEvent getEventData(){
|
||||||
if(eventData == null) {
|
if(eventData == null) {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue