diff --git a/hal-core/src/se/hal/EventControllerManager.java b/hal-core/src/se/hal/EventControllerManager.java index cfc99cdc..8a2fb8a0 100644 --- a/hal-core/src/se/hal/EventControllerManager.java +++ b/hal-core/src/se/hal/EventControllerManager.java @@ -25,8 +25,6 @@ public class EventControllerManager extends HalAbstractControllerManager> availableEvents = new ArrayList<>(); /** List of all registered events **/ private List registeredEvents = Collections.synchronizedList(new ArrayList<>()); /** List of auto detected events **/ @@ -66,7 +64,7 @@ public class EventControllerManager extends HalAbstractControllerManager eventClass) { - if (!availableEvents.contains(eventClass)) - availableEvents.add(eventClass); - } - - /** - * @return a List of all available Events that can be registered to this manager - */ - @Override - public List> getAvailableDeviceConfigs(){ - return availableEvents; - } - /** * @return a List of Sensor instances that have been registered to this manager */ diff --git a/hal-core/src/se/hal/SensorControllerManager.java b/hal-core/src/se/hal/SensorControllerManager.java index 9f442c05..bfddb423 100644 --- a/hal-core/src/se/hal/SensorControllerManager.java +++ b/hal-core/src/se/hal/SensorControllerManager.java @@ -24,8 +24,6 @@ public class SensorControllerManager extends HalAbstractControllerManager> availableSensors = new ArrayList<>(); /** List of all registered sensors **/ private List registeredSensors = Collections.synchronizedList(new ArrayList<>()); /** List of auto detected sensors **/ @@ -66,7 +64,7 @@ public class SensorControllerManager extends HalAbstractControllerManager sensorConfigClass) { - if (!availableSensors.contains(sensorConfigClass)) - availableSensors.add(sensorConfigClass); - } - - /** - * @return a List of all available Sensors that can be registered to this manager - */ - @Override - public List> getAvailableDeviceConfigs(){ - return availableSensors; - } - /** * @return a List of Sensor instances that have been registered to this manager */ diff --git a/hal-core/src/se/hal/intf/HalAbstractControllerManager.java b/hal-core/src/se/hal/intf/HalAbstractControllerManager.java index a88153c1..c81853f2 100644 --- a/hal-core/src/se/hal/intf/HalAbstractControllerManager.java +++ b/hal-core/src/se/hal/intf/HalAbstractControllerManager.java @@ -4,10 +4,8 @@ import zutil.ClassUtil; import zutil.log.LogUtil; import zutil.plugin.PluginManager; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; +import java.lang.reflect.InvocationTargetException; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -22,7 +20,8 @@ public abstract class HalAbstractControllerManager controllerMap = new HashMap<>(); - + /** All available sensor plugins **/ + protected List> availableDeviceConfigs = new ArrayList<>(); /** * Will instantiate a generic ControllerManager. @@ -30,19 +29,27 @@ public abstract class HalAbstractControllerManager= 1 && genericClasses[0] != null) { - for (Iterator> it = pluginManager.getClassIterator(genericClasses[0]); it.hasNext(); ) { + if (genericClasses.length >= 3 && genericClasses[2] != null) { + for (Iterator> it = pluginManager.getClassIterator(genericClasses[2]); it.hasNext(); ) { addAvailableDeviceConfig(it.next()); } } else { - logger.severe("Unable to retrieve Controller class from generics."); + logger.severe("Unable to retrieve Controller class from generics for class: " + this.getClass()); } - for (Iterator> it = pluginManager.getClassIterator(HalAutoScannableController.class); it.hasNext(); ){ - Class controller = it.next(); - getControllerInstance(controller); // Instantiate controller + for (Class deviceConfig : getAvailableDeviceConfigs()){ + try { + @SuppressWarnings("unchecked") + Class controllerClass = (Class) deviceConfig.getDeclaredConstructor().newInstance().getDeviceControllerClass(); + + if (controllerClass.isAssignableFrom(HalAutoScannableController.class)) { + getControllerInstance(controllerClass); // Instantiate controller + } + } catch (Exception e) { + logger.log(Level.WARNING, "Unable to instantiate Device Config for controller check: " + deviceConfig.getClass()); + } } } @@ -63,16 +70,6 @@ public abstract class HalAbstractControllerManager deviceConfigClass); - - /** - * @return a List of all available devices that can be registered with this manager - */ - public abstract List> getAvailableDeviceConfigs(); - /** * @return a List of device instances that have been registered on this manager */ @@ -89,7 +86,26 @@ public abstract class HalAbstractControllerManager deviceConfigClass) { + if (!availableDeviceConfigs.contains(deviceConfigClass)) + availableDeviceConfigs.add(deviceConfigClass); + } + + /** + * @return a List of all available device configurations that can be registered with this manager + */ + public List> getAvailableDeviceConfigs() { + return availableDeviceConfigs; + } + + // ---------------------------------------------------- + // Common Controller Logic // ---------------------------------------------------- /** @@ -115,7 +131,7 @@ public abstract class HalAbstractControllerManager registeredCameras = Collections.synchronizedList(new ArrayList<>()); @Override public void register(Camera device) { @@ -27,25 +31,16 @@ public class CameraControllerManager extends HalAbstractControllerManager> getAvailableDeviceConfigs() { - return null; - } - @Override public List getRegisteredDevices() { - return null; + return registeredCameras; } @Override public List getDetectedDevices() { - return null; + return Collections.EMPTY_LIST; } - @Override - public void addAvailableDeviceConfig(Class deviceConfigClass) { - - } @Override public void clearDetectedDevices() {