ONOS-628 - Download and extract node binaries for the GUI build step
- Added gulp build task the:
	- Bundles Vendor JS files
	- Bundles ONOS JS Files
	- Bundles ONOS CSS Files
	- Added SourceMaps to JS bundles - Helps with debugging during development
- Added Bundles to index.js and removed old references
- Git Ignored any generated files
- Ensured the build step is able to build without a local copy of node installed
- Added BUCK genrules (provided by Viswa)
- Added BUCK Dependency to GUI
- Buck Rule to run when src changes
- Node/NPM downloaded using BUCK remote_file

Change-Id: Ia6ca3b952ff801850ade7469c23aac76c8520400
diff --git a/tools/gui/gulp-tasks/bundles/bundle-css/index.js b/tools/gui/gulp-tasks/bundles/bundle-css/index.js
new file mode 100644
index 0000000..0c5c8d6
--- /dev/null
+++ b/tools/gui/gulp-tasks/bundles/bundle-css/index.js
@@ -0,0 +1,20 @@
+import gulp from 'gulp';
+import concat from 'gulp-concat';
+import BundleResources from '../helpers/bundleResources';
+
+const GUI_BASE = '../../web/gui/src/main/webapp/';
+const bundleFiles = [
+    'app/onos.css',
+    'app/onos-theme.css',
+    'app/common.css',
+    'app/fw/**/*.css',
+    'app/view/**/*.css',
+];
+
+const task = gulp.task('bundle-css', function () {
+    return gulp.src(BundleResources(GUI_BASE, bundleFiles))
+        .pipe(concat('onos.css'))
+        .pipe(gulp.dest(GUI_BASE + '/dist/'));
+});
+
+export default task;
\ No newline at end of file
diff --git a/tools/gui/gulp-tasks/bundles/bundle-js/index.js b/tools/gui/gulp-tasks/bundles/bundle-js/index.js
new file mode 100644
index 0000000..4af3432
--- /dev/null
+++ b/tools/gui/gulp-tasks/bundles/bundle-js/index.js
@@ -0,0 +1,51 @@
+import gulp from 'gulp';
+import concat from 'gulp-concat';
+import strip from 'gulp-strip-comments';
+import uglyfy from 'gulp-uglify';
+import sourceMaps from 'gulp-sourcemaps';
+import BundleResources from '../helpers/bundleResources';
+
+
+const GUI_BASE = '../../web/gui/src/main/webapp/';
+const bundleFiles = [
+     // NOTE: Bundle the important files first
+    'app/directives.js',
+    'app/fw/util/util.js',
+    'app/fw/mast/mast.js',
+    'app/fw/nav/nav.js',
+    'app/fw/svg/svg.js',
+    'app/fw/remote/remote.js',
+    'app/fw/widget/widget.js',
+    'app/fw/layer/layer.js',
+
+    // NOTE: bundle everything else
+    'app/fw/**/*.js',
+    'app/view/**/*.js'
+];
+
+const vendor = [
+    'tp/angular.js',
+    'tp/angular-route.js',
+    'tp/angular-cookies.js',
+    'tp/d3.js',
+    'tp/topojson.v1.min.js',
+    'tp/Chart.min.js',
+    'tp/lodash.min.js',
+];
+
+function bundle(files, exportName) {
+    return gulp.src(BundleResources(GUI_BASE, files))
+        .pipe(sourceMaps.init())
+        .pipe(strip())
+        .pipe(uglyfy())
+        .pipe(concat(exportName))
+        .pipe(sourceMaps.write('source-map'))
+        .pipe(gulp.dest(GUI_BASE + '/dist/'));
+}
+
+const tasks = function () {
+    gulp.task('bundle-vendor', () => bundle(vendor, 'vendor.js'));
+    gulp.task('bundle-js', () => bundle(bundleFiles, 'onos.js'));
+};
+
+export default tasks();
\ No newline at end of file
diff --git a/tools/gui/gulp-tasks/bundles/helpers/bundleResources.js b/tools/gui/gulp-tasks/bundles/helpers/bundleResources.js
new file mode 100644
index 0000000..0ee0898
--- /dev/null
+++ b/tools/gui/gulp-tasks/bundles/helpers/bundleResources.js
@@ -0,0 +1,5 @@
+export default function(prefix, fileArray) {
+    return fileArray.map((file) => {
+        return prefix + file;
+    });
+}
\ No newline at end of file
diff --git a/tools/gui/gulp-tasks/index.js b/tools/gui/gulp-tasks/index.js
new file mode 100644
index 0000000..3bef084
--- /dev/null
+++ b/tools/gui/gulp-tasks/index.js
@@ -0,0 +1,2 @@
+export { default as BundleJS } from './bundles/bundle-js';
+export { default as BundleCSS } from './bundles/bundle-css';
\ No newline at end of file
diff --git a/tools/gui/gulpfile.babel.js b/tools/gui/gulpfile.babel.js
new file mode 100644
index 0000000..0d39b04
--- /dev/null
+++ b/tools/gui/gulpfile.babel.js
@@ -0,0 +1,8 @@
+import gulp from 'gulp';
+import * as Tasks from './gulp-tasks/';
+
+gulp.task('build', ['bundle-css', 'bundle-vendor', 'bundle-js']);
+
+gulp.task('default', function() {
+    // Do stuff
+});
\ No newline at end of file
diff --git a/tools/gui/package.json b/tools/gui/package.json
new file mode 100644
index 0000000..bd76963
--- /dev/null
+++ b/tools/gui/package.json
@@ -0,0 +1,28 @@
+{
+  "name": "onos-gui-build",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "build": "gulp build"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {},
+  "devDependencies": {
+    "babel": "^6.23.0",
+    "babel-core": "^6.25.0",
+    "babel-preset-es2015": "^6.24.1",
+    "gulp": "^3.9.1",
+    "gulp-concat": "^2.6.1",
+    "gulp-sourcemaps": "^2.6.0",
+    "gulp-strip-comments": "^2.4.5",
+    "gulp-uglify": "^3.0.0"
+  },
+  "babel": {
+    "presets": [
+      "es2015"
+    ]
+  }
+}