diff --git a/hal-core/src/se/hal/EventControllerManager.java b/hal-core/src/se/hal/EventControllerManager.java index 83bce121..7f856b78 100644 --- a/hal-core/src/se/hal/EventControllerManager.java +++ b/hal-core/src/se/hal/EventControllerManager.java @@ -19,10 +19,9 @@ import java.util.logging.Logger; /** * This class manages all SensorController and EventController objects */ -public class EventControllerManager extends HalAbstractControllerManager implements - HalDeviceReportListener, - PreConfigurationActionListener, - PostConfigurationActionListener { +public class EventControllerManager extends HalAbstractControllerManager + implements HalDeviceReportListener { + private static final Logger logger = LogUtil.getLogger(); private static EventControllerManager instance; @@ -32,8 +31,6 @@ public class EventControllerManager extends HalAbstractControllerManager registeredEvents = Collections.synchronizedList(new ArrayList<>()); /** List of auto detected events **/ private List detectedEvents = Collections.synchronizedList(new ArrayList<>()); - /** List of all registered events **/ - private List limboEvents = Collections.synchronizedList(new LinkedList<>()); public void initialize(PluginManager pluginManager) { @@ -205,28 +202,6 @@ public class EventControllerManager extends HalAbstractControllerManager getEnabledPlugins() { return pluginManager.toArray(); } @@ -158,20 +153,24 @@ public class HalServer { return pluginManager.toArrayAll(); } + public static List getControllerManagers() { + return controllerManagers; + } + /** + * @param daemon registers the given daemon and starts execution of the Runnable. + */ public static void registerDaemon(HalDaemon daemon){ logger.info("Registering daemon: " + daemon.getClass()); daemons.add(daemon); daemon.initiate(daemonExecutor); } + /** + * @param page registers the given page with the intranet Hal web server. + */ public static void registerPage(HalWebPage page){ pages.add(page); http.setPage(page.getId(), page); } - - - public static List getControllerManagers() { - return controllerManagers; - } } diff --git a/hal-core/src/se/hal/SensorControllerManager.java b/hal-core/src/se/hal/SensorControllerManager.java index a7efad39..1cbc89f2 100644 --- a/hal-core/src/se/hal/SensorControllerManager.java +++ b/hal-core/src/se/hal/SensorControllerManager.java @@ -19,22 +19,18 @@ import java.util.logging.Logger; /** * This class manages all SensorController and EventController objects */ -public class SensorControllerManager extends HalAbstractControllerManager implements - HalDeviceReportListener, - PreConfigurationActionListener, - PostConfigurationActionListener { +public class SensorControllerManager extends HalAbstractControllerManager + implements HalDeviceReportListener { + private static final Logger logger = LogUtil.getLogger(); private static SensorControllerManager instance; - /** All available sensor plugins **/ private List> availableSensors = new ArrayList<>(); /** List of all registered sensors **/ private List registeredSensors = Collections.synchronizedList(new ArrayList<>()); /** List of auto detected sensors **/ private List detectedSensors = Collections.synchronizedList(new ArrayList<>()); - /** List of sensors that are currently being reconfigured **/ - private List limboSensors = Collections.synchronizedList(new LinkedList<>()); @Override @@ -95,7 +91,7 @@ public class SensorControllerManager extends HalAbstractControllerManager is the device controller class + * @param is the device class * @param is the device configuration class */ public abstract class HalAbstractControllerManager { diff --git a/hal-core/src/se/hal/intf/HalAbstractDevice.java b/hal-core/src/se/hal/intf/HalAbstractDevice.java index 6cb012ac..1510b155 100644 --- a/hal-core/src/se/hal/intf/HalAbstractDevice.java +++ b/hal-core/src/se/hal/intf/HalAbstractDevice.java @@ -2,6 +2,7 @@ package se.hal.intf; import se.hal.HalContext; import se.hal.struct.User; +import se.hal.util.HalDeviceChangeListener; import zutil.db.DBConnection; import zutil.db.bean.DBBean; import zutil.log.LogUtil; @@ -55,9 +56,11 @@ public abstract class HalAbstractDevice getDeviceConfigurator() { C obj = getDeviceConfig(); if (obj != null) { + HalDeviceChangeListener listener = new HalDeviceChangeListener<>(); + Configurator configurator = new Configurator<>(obj); - //configurator.setPreConfigurationListener(ControllerManager.getInstance()); // TODO: - //configurator.setPostConfigurationListener(ControllerManager.getInstance()); // TODO: + configurator.setPreConfigurationListener(listener); + configurator.setPostConfigurationListener(listener); return configurator; } return null; @@ -71,16 +74,15 @@ public abstract class HalAbstractDevice implements Configurator.PreConfigurationActionListener, Configurator.PostConfigurationActionListener { + /** List of sensors that are currently being reconfigured **/ + private Map> limboDevices = new HashMap<>(); + + + @Override + public void preConfigurationAction(Configurator configurator, HalDeviceConfig deviceConfig) { + List managers = HalServer.getControllerManagers(); + + for (HalAbstractControllerManager manager : managers) { + HalAbstractDevice device = HalDeviceUtil.findDevice(deviceConfig, manager.getRegisteredDevices()); + if (device != null) { + manager.deregister(device); + + if (!limboDevices.containsKey(device)) + limboDevices.put(device, new ArrayList<>(2)); + limboDevices.get(device).add(manager); + } + } + } + + @Override + public void postConfigurationAction(Configurator configurator, HalDeviceConfig deviceConfig) { + HalAbstractDevice device = HalDeviceUtil.findDevice(deviceConfig, new ArrayList<>(limboDevices.keySet())); + List managers = limboDevices.get(device); + + if (managers != null) { + for (HalAbstractControllerManager manager : managers) { + manager.register(device); + } + + limboDevices.remove(device); + } + } +} \ No newline at end of file