#
# 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
    )

