diff --git a/apps/acl/BUILD b/apps/acl/BUILD new file mode 100644 index 0000000000..58e48ae941 --- /dev/null +++ b/apps/acl/BUILD @@ -0,0 +1,22 @@ +COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [ + "@javax_ws_rs_api//jar", + "//utils/rest:onlab-rest", + "//core/store/serializers:onos-core-serializers", +] + +TEST_DEPS = TEST_REST + [ + "@jersey_server//jar", +] + +osgi_jar_with_tests( + test_deps = TEST_DEPS, + web_context = "/onos/v1/acl", + deps = COMPILE_DEPS, +) + +onos_app( + category = "Security", + description = "ONOS ACL application.", + title = "Access Control Lists", + url = "http://onosproject.org", +) diff --git a/apps/dhcp/BUILD b/apps/dhcp/BUILD new file mode 100644 index 0000000000..dbf2ac4c6e --- /dev/null +++ b/apps/dhcp/BUILD @@ -0,0 +1,11 @@ +BUNDLES = [ + "//apps/dhcp/api:onos-apps-dhcp-api", + "//apps/dhcp/app:onos-apps-dhcp-app", +] + +onos_app( + category = "Utility", + included_bundles = BUNDLES, + title = "DHCP Server", + url = "http://onosproject.org", +) diff --git a/apps/dhcp/api/BUILD b/apps/dhcp/api/BUILD new file mode 100644 index 0000000000..f72e3bcff0 --- /dev/null +++ b/apps/dhcp/api/BUILD @@ -0,0 +1,3 @@ +osgi_jar_with_tests( + deps = CORE_DEPS, +) diff --git a/apps/dhcp/app/BUILD b/apps/dhcp/app/BUILD new file mode 100644 index 0000000000..5d1f80083b --- /dev/null +++ b/apps/dhcp/app/BUILD @@ -0,0 +1,18 @@ +COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [ + "@javax_ws_rs_api//jar", + "@org_apache_karaf_shell_console//jar", + "//apps/dhcp/api:onos-apps-dhcp-api", + "//utils/rest:onlab-rest", + "//core/store/serializers:onos-core-serializers", + "//cli:onos-cli", +] + +osgi_jar_with_tests( + api_description = "REST API for DHCP Server", + api_package = "org.onosproject.dhcp.rest", + api_title = "DHCP Server", + api_version = "1.0", + test_deps = TEST_ADAPTERS, + web_context = "/onos/dhcp", + deps = COMPILE_DEPS, +) diff --git a/modules.bzl b/modules.bzl index 33064c54dc..30ed0a6ede 100644 --- a/modules.bzl +++ b/modules.bzl @@ -147,11 +147,11 @@ ONOS_PROVIDERS = [ ONOS_APPS = [ # Apps - #"//apps/dhcp:onos-apps-dhcp-oar", + "//apps/dhcp:onos-apps-dhcp-oar", #"//apps/dhcprelay:onos-apps-dhcprelay-oar", #"//apps/fwd:onos-apps-fwd-oar", #"//apps/packet-stats:onos-apps-packet-stats-oar", - #"//apps/acl:onos-apps-acl-oar", + "//apps/acl:onos-apps-acl-oar", #"//apps/bgprouter:onos-apps-bgprouter-oar", #"//apps/cip:onos-apps-cip-oar", #"//apps/drivermatrix:onos-apps-drivermatrix-oar", @@ -280,8 +280,8 @@ PIPELINES = [ APP_JARS = [ #"//apps/cpman/api:onos-apps-cpman-api", #"//apps/routing-api:onos-apps-routing-api", - #"//apps/dhcp/api:onos-apps-dhcp-api", - #"//apps/dhcp/app:onos-apps-dhcp-app", + "//apps/dhcp/api:onos-apps-dhcp-api", + "//apps/dhcp/app:onos-apps-dhcp-app", #"//apps/imr/api:onos-apps-imr-api", #"//apps/imr/app:onos-apps-imr-app", #"//apps/dhcprelay:onos-apps-dhcprelay", diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl index 6c8a381e9f..c4909609cb 100644 --- a/tools/build/bazel/osgi_java_library.bzl +++ b/tools/build/bazel/osgi_java_library.bzl @@ -33,6 +33,9 @@ def _all_resources(resources_root): 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 @@ def _bnd_impl(ctx): 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 @@ def _bnd_impl(ctx): 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 @@ def _bnd_impl(ctx): import_packages, exportPackages, includeResources, - webContext, + web_context, + web_xml_root_path, dynamicimportPackages, classesPath, ] @@ -124,6 +136,8 @@ _bnd = rule( "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 @@ _bnd = rule( 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 @@ def osgi_jar_with_tests( 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 @@ def osgi_jar_with_tests( 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 @@ def osgi_jar_with_tests( 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 @@ def osgi_jar( 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 @@ def osgi_jar( visibility = visibility, version = version, import_packages = import_packages, + web_context = web_context, ) diff --git a/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java b/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java index fe286cb8bf..c819ebd934 100644 --- a/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java +++ b/utils/osgiwrap/src/main/java/org/onlab/osgiwrap/OSGiWrapper.java @@ -74,6 +74,7 @@ public class OSGiWrapper { private String bundleLicense; private String webContext; + private String webXmlRoot; private String destdir; // FIXME should consider using Commons CLI, etc. @@ -94,8 +95,9 @@ public class OSGiWrapper { String exportPackages = args[8]; String includeResources = args[9]; String webContext = args[10]; - String dynamicimportPackages = args[11]; - String destdir = args[12]; + String webXmlRoot = args[11]; + String dynamicimportPackages = args[12]; + String destdir = args[13]; String desc = Joiner.on(' ').join(Arrays.copyOfRange(args, 12, args.length)); OSGiWrapper wrapper = new OSGiWrapper(jar, output, cp, @@ -104,6 +106,7 @@ public class OSGiWrapper { importPackages, exportPackages, includeResources, webContext, + webXmlRoot, dynamicimportPackages, desc, destdir); @@ -126,6 +129,7 @@ public class OSGiWrapper { String exportPackages, String includeResources, String webContext, + String webXmlRoot, String dynamicimportPackages, String bundleDescription, String destdir) { @@ -155,6 +159,7 @@ public class OSGiWrapper { } this.webContext = webContext; + this.webXmlRoot = webXmlRoot; this.destdir = destdir; } @@ -184,7 +189,7 @@ public class OSGiWrapper { } if (isWab()) { - analyzer.setProperty(Analyzer.WAB, "src/main/webapp/"); + analyzer.setProperty(Analyzer.WAB, webXmlRoot); analyzer.setProperty("Web-ContextPath", webContext); analyzer.setProperty(Analyzer.IMPORT_PACKAGE, "*,org.glassfish.jersey.servlet,org.jvnet.mimepull\n"); } @@ -281,6 +286,7 @@ public class OSGiWrapper { } Path wabRoot = Paths.get(wab); + log("wab root " + wabRoot.toString()); includeFiles(dot, null, wabRoot.toString()); }