From 3b71021422c2b0a414d0e1abf5c20d99c0b4bba1 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Sun, 19 Jun 2016 17:53:42 +0200 Subject: [PATCH] Implemented page and daemon plugins and some refactorings --- src/se/hal/ControllerManager.java | 42 ++++++++++---------- src/se/hal/HalServer.java | 36 ++++++++++------- src/se/hal/plugin/powerchallenge/plugin.json | 11 +++++ 3 files changed, 53 insertions(+), 36 deletions(-) create mode 100755 src/se/hal/plugin/powerchallenge/plugin.json diff --git a/src/se/hal/ControllerManager.java b/src/se/hal/ControllerManager.java index d751cb59..9ffd9d49 100755 --- a/src/se/hal/ControllerManager.java +++ b/src/se/hal/ControllerManager.java @@ -29,7 +29,7 @@ public class ControllerManager implements HalSensorReportListener, /** All isAvailable sensor plugins **/ - private List> availableSensors = new ArrayList<>(); + private List> availableSensors = new ArrayList<>(); /** List of all registered sensors **/ private List registeredSensors = new ArrayList<>(); /** List of auto detected sensors **/ @@ -39,7 +39,7 @@ public class ControllerManager implements HalSensorReportListener, /** All isAvailable event plugins **/ - private List> availableEvents = new ArrayList<>(); + private List> availableEvents = new ArrayList<>(); /** List of all registered events **/ private List registeredEvents = new ArrayList<>(); /** List of auto detected events **/ @@ -91,7 +91,7 @@ public class ControllerManager implements HalSensorReportListener, } } - public List> getAvailableSensors(){ + public List> getAvailableSensors(){ return availableSensors; } @@ -177,7 +177,7 @@ public class ControllerManager implements HalSensorReportListener, } } - public List> getAvailableEvents(){ + public List> getAvailableEvents(){ return availableEvents; } @@ -336,27 +336,25 @@ public class ControllerManager implements HalSensorReportListener, - public static void initialize(){ + public static void initialize(PluginManager pluginManager){ ControllerManager manager = new ControllerManager(); - PluginManager pluginManager = new PluginManager("./"); - Iterator it = pluginManager.iterator(); - while (it.hasNext()){ - PluginData plugin = it.next(); - Iterator> pluginIt = plugin.getClassIterator(HalSensorData.class); - while (pluginIt.hasNext()){ - manager.availableSensors.add(pluginIt.next()); - } - pluginIt = plugin.getClassIterator(HalEventData.class); - while (pluginIt.hasNext()){ - manager.availableEvents.add(pluginIt.next()); - } - - pluginIt = plugin.getClassIterator(HalAutoScannableController.class); - while (pluginIt.hasNext()){ - manager.getControllerInstance(pluginIt.next()); // Instantiate controller - } + for (Iterator> it=pluginManager.getClassIterator(HalSensorData.class); + it.hasNext(); ){ + manager.availableSensors.add(it.next()); } + + for (Iterator> it=pluginManager.getClassIterator(HalEventData.class); + it.hasNext(); ){ + manager.availableEvents.add(it.next()); + } + + for (Iterator> it= + pluginManager.getClassIterator(HalAutoScannableController.class); + it.hasNext(); ){ + manager.getControllerInstance(it.next()); // Instantiate controller + } + instance = manager; } diff --git a/src/se/hal/HalServer.java b/src/se/hal/HalServer.java index 8d330087..6b835142 100755 --- a/src/se/hal/HalServer.java +++ b/src/se/hal/HalServer.java @@ -16,7 +16,9 @@ import zutil.log.LogUtil; import zutil.net.http.HttpServer; import zutil.net.http.page.HttpFilePage; import zutil.net.http.page.HttpRedirectPage; +import zutil.plugin.PluginManager; +import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -25,8 +27,8 @@ import java.util.concurrent.ScheduledExecutorService; */ public class HalServer { - private static HalDaemon[] daemons; - private static HalHttpPage[] pages; + private static List daemons; + private static List pages; public static void main(String[] args) throws Exception { @@ -34,8 +36,9 @@ public class HalServer { LogUtil.readConfiguration("logging.properties"); // init Managers + PluginManager pluginManager = new PluginManager("./"); HalContext.initialize(); - ControllerManager.initialize(); + ControllerManager.initialize(pluginManager); HalAlertManager.initialize(); @@ -52,13 +55,15 @@ public class HalServer { // init daemons - daemons = new HalDaemon[]{ + daemons = new ArrayList<>(); + daemons.addAll(Arrays.asList(new HalDaemon[]{ new SensorDataAggregatorDaemon(), new SensorDataCleanupDaemon(), - - new PCDataSynchronizationDaemon(), - new PCDataSynchronizationClient(), - }; + })); + for (Iterator it=pluginManager.getObjectIterator(HalDaemon.class); + it.hasNext(); ){ + daemons.add(it.next()); + } // We set only one thread for easier troubleshooting ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); for(HalDaemon daemon : daemons){ @@ -69,20 +74,23 @@ public class HalServer { // init http server HalHttpPage.getRootNav().createSubNav("Sensors"); HalHttpPage.getRootNav().createSubNav("Events").setWeight(100); - pages = new HalHttpPage[]{ + pages = new ArrayList<>(); + pages.addAll(Arrays.asList(new HalHttpPage[]{ new SensorOverviewHttpPage(), new SensorConfigHttpPage(), - new PCOverviewHttpPage(), - new PCHeatMapHttpPage(), - new EventOverviewHttpPage(), new EventConfigHttpPage(), new UserConfigHttpPage(), - }; + })); + for (Iterator it=pluginManager.getObjectIterator(HalHttpPage.class); + it.hasNext(); ){ + pages.add(it.next()); + } + HttpServer http = new HttpServer(HalContext.getIntegerProperty("http_port")); http.setDefaultPage(new HttpFilePage(FileUtil.find("resource/web/"))); - http.setPage("/", new HttpRedirectPage("/"+pages[0].getId())); + http.setPage("/", new HttpRedirectPage("/"+pages.get(0).getId())); http.setPage(HalAlertManager.getInstance().getUrl(), HalAlertManager.getInstance()); for(HalHttpPage page : pages){ http.setPage(page.getId(), page); diff --git a/src/se/hal/plugin/powerchallenge/plugin.json b/src/se/hal/plugin/powerchallenge/plugin.json new file mode 100755 index 00000000..ea3cae8b --- /dev/null +++ b/src/se/hal/plugin/powerchallenge/plugin.json @@ -0,0 +1,11 @@ +{ + "version": 1.0, + "name": "Power;Challenge", + "interfaces": [ + {"se.hal.intf.HalHttpPage": "se.hal.page.PCOverviewHttpPage"}, + {"se.hal.intf.HalHttpPage": "se.hal.page.PCHeatMapHttpPage"}, + + {"se.hal.intf.HalDaemon": "se.hal.deamon.PCDataSynchronizationClient"}, + {"se.hal.intf.HalDaemon": "se.hal.deamon.PCDataSynchronizationDaemon"} + ] +} \ No newline at end of file