INT app gui2

This patch contains the files needed by the INT app to work with gui2.
More in detail I reuse/modifie the html and the css, already provided in
the inbandtelemetry folder. I add the file needed to utilize the gui2,
e.g,intapp-gui2-lib.module.ts.

Link to my dropbox for screenshots:
https://www.dropbox.com/sh/ie2l0flcm8igesk/AAAsP2RdMbNbnt6A88lmBczaa?dl=0

Change-Id: I710c09f3a04a139a4482bb7aae3b3b76b39e67e6
diff --git a/apps/inbandtelemetry/int-gui2-lib/BUILD b/apps/inbandtelemetry/int-gui2-lib/BUILD
new file mode 100644
index 0000000..b41d497
--- /dev/null
+++ b/apps/inbandtelemetry/int-gui2-lib/BUILD
@@ -0,0 +1,294 @@
+"""
+ Copyright 2020-present Open Networking Foundation
+
+ 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.
+"""
+
+"""
+    Rules to build the In-band Telemetry (INT) GUI app for GUI 2
+
+
+"""
+
+load("//tools/build/bazel:jdk_genrule.bzl", genrule = "jdk_genrule")
+
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [
+    "@javax_ws_rs_api//jar",
+    "@servlet_api//jar",
+    "@jetty_websocket//jar",
+    "@jetty_util//jar",
+    "@jersey_media_multipart//jar",
+    "@jersey_server//jar",
+    "//utils/rest:onlab-rest",
+    "//core/store/serializers:onos-core-serializers",
+]
+
+TEST_DEPS = TEST + [
+    "//core/api:onos-api-tests",
+    "//drivers/default:onos-drivers-default",
+]
+
+"""
+    Files that get put at the top level of the tar ball
+"""
+
+filegroup(
+    name = "_root_level_files",
+    srcs =
+        [
+            ":angular.json",
+            ":package.json",
+            ":package-lock.json",
+            ":tsconfig.json",
+            ":tslint.json",
+        ],
+)
+
+filegroup(
+    name = "_e2e_test_files",
+    srcs = [
+        ":e2e/protractor.conf.js",
+        ":e2e/src/app.e2e-spec.ts",
+        ":e2e/src/app.po.ts",
+        ":e2e/tsconfig.e2e.json",
+    ],
+)
+
+"""
+    Run ng build to create INT GUI 2 library in production mode
+    The output file int-gui2-lib-ver.tgz is in the form that can be uploaded directly to https://www.npmjs.com/
+    See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib.log for details of the Angular CLI output
+"""
+
+genrule(
+    name = "int-gui2-lib-build",
+    srcs = [
+        "@nodejs//:bin/npm",
+        "@nodejs//:bin/node",
+        "@nodejs//:bin/nodejs/bin/node",
+        "@nodejs//:bin/nodejs/bin/npm",
+        "//web/gui2-fw-lib:onos-gui2-fw-npm-install",
+        "//web/gui2-fw-lib:onos-gui2-fw-ng-build",
+        "//web/gui2-fw-lib:gui2_fw_lib_ext_css",
+        ":_root_level_files",
+        ":_int_gui2_lib_src",
+        ":_int-gui2_app_files",
+    ],
+    outs = [
+        "int-gui2-lib.log",
+        "int-gui2-lib-ver.tgz",
+    ],
+    cmd = "ROOT=`pwd` &&" +
+          " export HOME=. &&" +
+          " export XDG_CONFIG_HOME=$(@D)/config &&" +
+          " NODE=$(location @nodejs//:bin/node) &&" +
+          " INSTALL_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-npm-install)) &&" +  # An array of filenames - sorted by time created
+          " FWLIB_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-ng-build)) &&" +  # An array of filenames - sorted by time created
+          " mkdir -p apps/inbandtelemetry/int-gui2-lib &&" +
+          " cd apps/inbandtelemetry/int-gui2-lib &&" +
+          " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
+          " tar xf $$ROOT/$${FWLIB_FILES[0]} &&" +
+          " mv package/ node_modules/gui2-fw-lib/ &&" +
+          " mkdir -p projects/int-gui2-lib/fw &&" +
+          " (cd projects/int-gui2-lib/fw &&" +
+          "  jar xf $$ROOT/$(location //web/gui2-fw-lib:gui2_fw_lib_ext_css)) &&" +
+          " chmod +x node_modules/@angular/cli/bin/ng &&" +
+          " export PATH=$$ROOT/$$(dirname $${NODE}):$$ROOT/apps/inbandtelemetry/int-gui2-lib/node_modules/@angular/cli/bin:$$PATH &&" +
+          " ng build --prod int-gui2-lib >> $$ROOT/$(location int-gui2-lib.log) 2>&1 ||" +
+          " if [ $$? -eq 0 ]; then echo 'Successfully ran build';" +
+          " else " +
+          "   echo 'Error running \'ng build int-gui2-lib\' on \'//apps/inbandtelemetry/int-gui2-lib:int-gui2-lib-build\'. \\\n" +
+          "     See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib.log for more details' >&2;" +
+          #"   tail -n 100 ../../$(location onos-gui2-ng-test.log) >&2;" +
+          "   exit 1;" +
+          " fi;" +
+          " cd dist/int-gui2-lib && " +
+          " npm pack >> $$ROOT/$(location int-gui2-lib.log) 2>&1 &&" +
+          " mv int-gui2-lib-*.tgz $$ROOT/$(location int-gui2-lib-ver.tgz) &&" +
+          " touch $$ROOT/$(location int-gui2-lib.log)",  # to get the log always as the 2nd file,
+    message = "Angular INT GUI2 build",
+    visibility = ["//visibility:public"],
+)
+
+"""
+    Run 'ng test' to run Angular test and 'ng lint' for checkstyle
+    See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-lint.log or
+    bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-test.log for details of the Angular CLI output
+"""
+
+genrule(
+    name = "_int-gui2-lib-test-genrule",
+    srcs = [
+        "@nodejs//:bin/npm",
+        "@nodejs//:bin/node",
+        "@nodejs//:bin/nodejs/bin/node",
+        "@nodejs//:bin/nodejs/bin/npm",
+        "//web/gui2-fw-lib:onos-gui2-fw-npm-install",
+        "//web/gui2-fw-lib:onos-gui2-fw-ng-build",
+        "//web/gui2-fw-lib:gui2_fw_lib_ext_css",
+        ":_root_level_files",
+        ":_int_gui2_lib_src",
+        ":_int_gui2_lib_src_tests",
+    ],
+    outs = [
+        "int-gui2-lib-ver.log",
+        "int-gui2-lib-lint.log",
+        "int-gui2-lib-test.log",
+    ],
+    cmd = " ROOT=`pwd` &&" +
+          " export HOME=. &&" +
+          " export XDG_CONFIG_HOME=$(@D)/config &&" +
+          " NODE=$(location @nodejs//:bin/node) &&" +
+          " INSTALL_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-npm-install)) &&" +  # An array of filenames - sorted by time created
+          " FWLIB_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-ng-build)) &&" +  # An array of filenames - sorted by time created
+          " mkdir -p apps/inbandtelemetry/int-gui2-lib &&" +
+          " cd apps/inbandtelemetry/int-gui2-lib &&" +
+          " jar xf ../../../$(location :_int_gui2_lib_src_tests) &&" +
+          " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
+          " tar xf $$ROOT/$${FWLIB_FILES[0]} &&" +
+          " mv package/ node_modules/gui2-fw-lib/ &&" +
+          " mkdir -p projects/int-gui2-lib/fw &&" +
+          " (cd projects/int-gui2-lib/fw &&" +
+          "  jar xf $$ROOT/$(location //web/gui2-fw-lib:gui2_fw_lib_ext_css)) &&" +
+          " chmod +x $$ROOT/apps/inbandtelemetry/int-gui2-lib/node_modules/@angular/cli/bin/ng &&" +
+          " export PATH=$$ROOT/$$(dirname $${NODE}):node_modules/@angular/cli/bin:$$PATH &&" +
+          " node -v > ../../../$(location int-gui2-lib-ver.log) &&" +
+          " npm -v >> ../../../$(location int-gui2-lib-ver.log) &&" +
+          " ng -v >> ../../../$(location int-gui2-lib-ver.log) &&" +
+          " echo Lint not run > ../../../$(location int-gui2-lib-lint.log) &&" +
+          " echo Test not run > ../../../$(location int-gui2-lib-test.log) &&" +
+          " exit 0;",
+    #          " ng lint int-gui2-lib > ../../../$(location int-gui2-lib-lint.log);" +
+    #          " if [ -f /usr/bin/chromium-browser ]; then " +  # Add to this for Mac and Chrome
+    #          "   export CHROME_BIN=/usr/bin/chromium-browser; " +
+    #          " elif [ -f /opt/google/chrome/chrome ]; then " +
+    #          "   export CHROME_BIN=/opt/google/chrome/chrome; " +
+    #          " else " +
+    #          "   MSG='Warning: Step int-gui2-lib-tests skipped because \\n" +
+    #          "   no binary for ChromeHeadless browser was found at /usr/bin/chromium-browser. \\n" +
+    #          "   Install Google Chrome or Chromium Browser to allow this step to run.';" +
+    #          "   echo -e $$MSG >&2;" +
+    #          "   echo -e $$MSG > ../../../$(location int-gui2-lib-test.log);" +
+    #          "   exit 0;" +
+    #          " fi;" +
+    #          " ng test int-gui2-lib --preserve-symlinks --code-coverage --browsers=ChromeHeadless" +
+    #          "     --watch=false > ../../../$(location int-gui2-lib-test.log) 2>&1 ||" +
+    #          " if [ $$? -eq 0 ]; then echo 'Successfully ran tests';" +
+    #          " else " +
+    #          "   echo 'Error running \'ng test int-gui2-lib\' on \'//apps/inbandtelemetry/int-gui2-lib:_int-gui2-lib-test-genrule\'. \\\n" +
+    #          "     See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-test.log for more details' >&2;" +
+    #          "   exit 1;" +
+    #          " fi;",
+    message = "Angular INT GUI2 Lib lint and test",
+)
+
+"""
+    Make a group of all the webapp files.
+"""
+
+filegroup(
+    name = "_int_gui2_lib_src",
+    srcs = glob(
+        [
+            "projects/int-gui2-lib/**/*",
+        ],
+        exclude = [
+            "projects/int-gui2-lib/**/*.spec.*",  # Don't track tests here
+            "projects/int-gui2-lib/karma.conf.js",
+            "projects/int-gui2-lib/src/test.ts",
+            "projects/int-gui2-lib/fw/**/*",
+        ],
+    ),
+)
+
+"""
+    Make a group of all the webapp qpp files.
+"""
+
+filegroup(
+    name = "_int-gui2_app_files",
+    srcs = glob(
+        [
+            "src/**/*",
+        ],
+    ),
+)
+
+"""
+    Make a jar file of all the webapp test (*.spec.ts) files.
+"""
+
+genrule(
+    name = "_int_gui2_lib_src_tests",
+    srcs = glob(
+        [
+            "projects/int-gui2-lib/karma.conf.js",
+            "projects/int-gui2-lib/src/test.ts",
+            "projects/int-gui2-lib/tsconfig.spec.json",
+            "projects/int-gui2-lib/**/*.spec.ts",
+        ],
+        exclude = [
+            "projects/int-gui2-lib/ng-package.json",
+            "projects/int-gui2-lib/ng-package.prod.json",
+            "projects/int-gui2-lib/package.json",
+            "projects/int-gui2-lib/tsconfig.lib.json",
+            "projects/int-gui2-lib/tslint.json",
+            "projects/int-gui2-lib/src/public_api.ts",
+        ],
+    ),
+    outs = ["int_gui2_lib_src_tests.jar"],
+    cmd = "cd apps/inbandtelemetry/int-gui2-lib &&" +
+          " jar Mcf ../../../$@ .",
+)
+
+"""
+    Make a jar file of all the webapp test (*.spec.ts) files.
+"""
+
+genrule(
+    name = "_int_gui2_lib_tests",
+    srcs = glob(
+        [
+            "projects/int-gui2-lib/**/*.spec.ts",
+            "projects/int-gui2-lib/**/*.spec.json",
+        ],
+        exclude = [
+            "src/main/webapp/tests/**",
+            "src/main/webapp/node_modules/**",
+            "src/main/webapp/dist/**",
+            "src/main/webapp/doc/**",
+        ],
+    ),
+    outs = ["int_gui2_lib_tests.jar"],
+    cmd = "cd apps/inbandtelemetry/int-gui2-lib &&" +
+          " find projects/int-gui2-lib/src/lib -type f -exec touch -t 201808280000 {} \; &&" +
+          " jar Mcf ../../../$@ projects/int-gui2-lib/src/lib",
+)
+
+"""
+    Wrap the genrule for testing in a test
+"""
+
+sh_test(
+    name = "int-gui2-lib-tests",
+    size = "small",
+    srcs = [
+        ":ng-test.sh",
+    ],
+    data = [
+        ":_int-gui2-lib-test-genrule",
+    ],
+    deps = [
+        "@bazel_tools//tools/bash/runfiles",
+    ],
+)