Implement bazel support for web context

- add web context to OSGI rules
- build ACL app
- build DHCP app

Change-Id: I03687d109eb44621458ad7269a435e03eec47495
diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl
index 6c8a381..c490960 100644
--- a/tools/build/bazel/osgi_java_library.bzl
+++ b/tools/build/bazel/osgi_java_library.bzl
@@ -33,6 +33,9 @@
     else:
         return native.glob([resources_root + "**"])
 
+def _webapp():
+    return native.glob(["src/main/webapp/**"])
+
 # Implementation of the rule to call bnd to make an OSGI jar file
 def _bnd_impl(ctx):
     if (len(ctx.files.source) == 1):
@@ -56,7 +59,10 @@
     import_packages = ctx.attr.import_packages
     exportPackages = "*"
     includeResources = ""
-    webContext = "NONE"
+    web_context = ctx.attr.web_context
+    if web_context == None or web_context == "":
+        web_context = "NONE"
+    web_xml = ctx.attr.web_xml
     dynamicimportPackages = ""
     cp = ""
 
@@ -83,6 +89,11 @@
         progress_message = "Expanding jar file: %s" % jar,
     )
     inputDependencies += [classes]
+    web_xml_root_path = ""
+    if len(web_xml) != 0:
+        web_xml_root = web_xml[0].files.to_list()[0]
+        inputDependencies += [web_xml_root]
+        web_xml_root_path = web_xml_root.path.replace("WEB-INF/web.xml", "")
 
     # call bnd to make the OSGI jar file
     arguments = [
@@ -96,7 +107,8 @@
         import_packages,
         exportPackages,
         includeResources,
-        webContext,
+        web_context,
+        web_xml_root_path,
         dynamicimportPackages,
         classesPath,
     ]
@@ -124,6 +136,8 @@
         "package_name_root": attr.string(),
         "source": attr.label(),
         "import_packages": attr.string(),
+        "web_context": attr.string(),
+        "web_xml": attr.label_list(allow_files = True),
         "_bnd_exe": attr.label(
             executable = True,
             cfg = "host",
@@ -138,8 +152,26 @@
     implementation = _bnd_impl,
 )
 
-def wrapped_osgi_jar(name, jar, deps, version = ONOS_VERSION, package_name_root = "org.onosproject", import_packages = "*", visibility = ["//visibility:private"]):
-    _bnd(name = name, source = jar, deps = deps, version = version, package_name_root = package_name_root, visibility = visibility, import_packages = import_packages)
+def wrapped_osgi_jar(
+        name,
+        jar,
+        deps,
+        version = ONOS_VERSION,
+        package_name_root = "org.onosproject",
+        import_packages = "*",
+        web_context = None,
+        web_xml = None,
+        visibility = ["//visibility:private"]):
+    _bnd(
+        name = name,
+        source = jar,
+        deps = deps,
+        version = version,
+        package_name_root = package_name_root,
+        visibility = visibility,
+        import_packages = import_packages,
+        web_xml = web_xml,
+    )
 
 def osgi_jar_with_tests(
         name = None,
@@ -154,6 +186,11 @@
         test_resources = None,
         visibility = ["//visibility:public"],
         version = ONOS_VERSION,
+        web_context = None,
+        api_title = "",
+        api_version = "",
+        api_description = "",
+        api_package = "",
         import_packages = None):
     if name == None:
         name = "onos-" + native.package_name().replace("/", "-")
@@ -176,8 +213,11 @@
     tests_name = name + "-tests"
     tests_jar_deps = list(depset(deps + test_deps)) + [name]
     all_test_deps = tests_jar_deps + [tests_name]
+    web_xml = _webapp()
 
+    # compile the Java code
     native.java_library(name = name + "-native", srcs = srcs, resources = resources, deps = deps, visibility = visibility)
+
     _bnd(
         name = name,
         source = name + "-native",
@@ -186,6 +226,8 @@
         package_name_root = package_name_root,
         visibility = visibility,
         import_packages = import_packages,
+        web_context = web_context,
+        web_xml = web_xml,
     )
     if test_srcs != []:
         native.java_library(
@@ -214,7 +256,7 @@
         visibility = ["//visibility:public"],
         version = ONOS_VERSION,
         # TODO - implement these for swagger and web.xml
-        web_context = "",
+        web_context = None,
         api_title = "",
         api_version = "",
         api_description = "",
@@ -238,4 +280,5 @@
         visibility = visibility,
         version = version,
         import_packages = import_packages,
+        web_context = web_context,
     )