Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / framework / core / modules / plugin_discoverer.js
diff --git a/skyquake/framework/core/modules/plugin_discoverer.js b/skyquake/framework/core/modules/plugin_discoverer.js
new file mode 100644 (file)
index 0000000..6653e41
--- /dev/null
@@ -0,0 +1,80 @@
+
+/*
+ * 
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+/**
+ * plugin_discoverer module. Static plugin discovery at bootstrap
+ * and dynamic plugin discovery during runtime.
+ * @module framework/core/modules/plugin_discoverer
+ * @author Kiran Kashalkar <kiran.kashalkar@riftio.com>
+ */
+var path = require('path');
+var fs = require('fs');
+var util = require('util');
+var skyquakeEmitter = require('./skyquakeEmitter');
+
+
+var plugins_path = '';
+
+/**
+ * Module initialization function
+ */
+function init() {
+
+}
+
+/**
+ * Module configuration function
+ * @param {Object} config - configuration object
+ */
+function config(config) {
+       plugins_path = config.plugins_path;
+}
+
+/**
+ * Module run function.
+ */
+function run() {
+
+       fs.readdir(plugins_path, function(err, filenames) {
+               if (!err) {
+                       filenames.forEach(function(filename) {
+                               fs.stat(plugins_path + '/' + filename, function(err, stats) {
+                                       if (!err) {
+                                               if (stats.isDirectory()) {
+                                                       skyquakeEmitter.emit('plugin_discoverer.plugin_discovered', filename, path.join(plugins_path, path.sep, filename));
+                                               }
+                                       }
+                               });
+                       });
+               }
+       });
+
+       // Watch for modifications and new plugins
+       fs.watch(plugins_path, {persistent: true, recursive: true}, function(event, filename) {
+               var splitPath = filename.split(path.sep)
+               skyquakeEmitter.emit('plugin_discoverer.plugin_updated', splitPath[0], filename);
+       });
+}
+
+
+module.exports = {
+       init: init,
+       config: config,
+       run: run
+};
\ No newline at end of file