Enabling UI live-reload for apps not in the ONOS source code

Change-Id: Ib88929a8825b7adf136d2b6b90d66db10549c165
diff --git a/web/gui/src/main/webapp/dev_server.js b/web/gui/src/main/webapp/dev_server.js
index 513d37a..2ded0ff 100644
--- a/web/gui/src/main/webapp/dev_server.js
+++ b/web/gui/src/main/webapp/dev_server.js
@@ -1,10 +1,8 @@
 'use strict';
 
-var http = require('http');
-// var httpProxy = require('http-proxy');
-var connect = require('connect');
-var serveStatic = require('serve-static');
 var path = require('path');
+var express = require('express');
+var app = express();
 
 var conf = {
   paths: {
@@ -13,17 +11,31 @@
   port: '8182'
 }
 
-var httpProxyInit = function (baseDir) {
+if (process.env.ONOS_EXTERNAL_APP_DIRS) {
+    var external_apps = process.env.ONOS_EXTERNAL_APP_DIRS.replace(/\s/,'').split(',');
+    external_apps.forEach(function(a, i){
+        let [appName, appPath] = a.split(':');
+        conf.paths[appName] = appPath;
+    });
+}
 
-  var app = connect();
+var httpProxyInit = function (baseDirs) {
 
-  app.use(serveStatic(path.join(__dirname, baseDir)));
+  Object.keys(baseDirs).forEach(dir => {
+    var d = path.isAbsolute(baseDirs[dir]) ? baseDirs[dir] : path.join(__dirname, baseDirs[dir]);
+    app.use(express.static(d));
+  });
 
-  var server = http.createServer(app);
+  app.get('/', function (req, res) {
+    res.send('Hello World!');
+  });
 
-  server.listen(conf.port, function(){
-    console.log('Dev server is up and listening on http://localhost:', conf.port);
+  app.listen(conf.port, function () {
+    console.log(`Dev server is up and listening on http://localhost:${conf.port}!`);
   });
 };
 
-httpProxyInit(conf.paths.root);
\ No newline at end of file
+httpProxyInit(conf.paths);
+
+
+