Adding a bucklet to compile XSD in to Java

Change-Id: I760ad7a5c926ee65d7b922bd337f9e3abb1339a7
diff --git a/buck-tools/default.defs b/buck-tools/default.defs
index ad9f8aa..0e3ff13 100644
--- a/buck-tools/default.defs
+++ b/buck-tools/default.defs
@@ -5,6 +5,7 @@
 include_defs('//bucklets/yang.bucklet')
 include_defs('//bucklets/remote_jar.bucklet')
 include_defs('//bucklets/grpc.bucklet')
+include_defs('//bucklets/jaxb2.bucklet')
 
 BASE_DEPS = [
     '//lib:junit',
diff --git a/bucklets/jaxb2.bucklet b/bucklets/jaxb2.bucklet
new file mode 100644
index 0000000..f3bb9fb
--- /dev/null
+++ b/bucklets/jaxb2.bucklet
@@ -0,0 +1,64 @@
+#
+# Copyright 2017-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.
+#
+# Bucklet to create Java Code from XSD using the 'xjc' tool from the JAXB API v2.
+# The genrule() creates the Java code, zips it and puts it in the output of jaxb2-xjc
+# The osgi_jar_with_tests() takes the sources in this ZIP and adds them to what ever
+# sources were used in the call to this method, and compiles all of them and adds
+# them to a JAR file in the output folder
+
+include_defs('//onos.defs')
+include_defs('//bucklets/onos.bucklet')
+
+def _get_name():
+    base_path = get_base_path()
+    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
+
+def jaxb2_xjc_osgi_jar(
+    name,
+    srcs,
+    xsd,
+    bindinfo=None,
+    destdir='.',
+    deps=[],
+    test_deps=[],
+    visibility = [],
+    **kwargs
+    ):
+    if name is None:
+          name = _get_name()
+
+    cmd = 'xjc '+xsd
+    if bindinfo is not None:
+        cmd=cmd+' -b '+bindinfo
+        cmd=cmd+' -d '+destdir
+
+    genrule(
+        name = 'jaxb2-xjc',
+        srcs = glob(['src/main/resources/*.xsd','src/main/resources/*.xjb']),
+        bash = cmd + ' && zip $OUT -r *',
+        out = name+'.src.zip',
+        visibility = [ ],
+    )
+
+    osgi_jar_with_tests (
+        deps = [":jaxb2-xjc"] + deps,
+        srcs = [':jaxb2-xjc'] + srcs,
+        test_deps = test_deps,
+        do_javadocs = False,
+        do_checkstyle = False,
+        **kwargs
+    )
+