/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */

// build a map of the dependency artifacts to use.  Allows centralized definition of the version of artifacts to
// use.  In that respect it serves a role similar to <dependencyManagement> in Maven
ext {

    junitVersion = '4.13.2'
    junitVintageVersion = '5.8.2'
    junit5Version = '5.8.2'

    h2Version = '1.4.197'
    bytemanVersion = '4.0.16' //Compatible with JDK16
    jnpVersion = '5.0.6.CR1'

    hibernateCommonsVersion = '6.0.0.CR1'
    hibernateValidatorVersion = '6.2.1.Final'
    validationApiVersion = '2.0.1.Final'
    elVersion = '3.0.1-b09'
    hibernateValidatorJakartaVersion = '7.0.2.Final'

    cdiVersion = '2.0'
    weldVersion = '3.1.5.Final'
    jakartaWeldVersion = '4.0.1.SP1'

    byteBuddyVersion = '1.12.7'

    agroalVersion = '1.14'

    assertjVersion = '3.14.0'

    geolatteVersion = '1.8.2'

    shrinkwrapVersion = '1.2.6'
    shrinkwrapDescriptorsVersion = '2.0.0'

    jodaTimeVersion = '2.3'

    jaxbApiVersion = '2.3.1'
    // We can't upgrade JAXB in Karaf (yet), but fortunately everything works fine with the version built in Karaf
    jaxbApiVersionOsgiRange = "[2.2,3)"
    jaxbRuntimeVersion = '2.3.1'
    jakartaJaxbRuntimeVersion = '3.0.2'

    //GraalVM
    graalvmVersion = '21.3.0'

    antlrVersion = '4.9.1'

    micrometerVersion = '1.6.1'

    libraries = [
            // Ant
            ant:            'org.apache.ant:ant:1.8.2',

            // Antlr
            antlr:           "org.antlr:antlr4:${antlrVersion}",
            antlr4_runtime:  "org.antlr:antlr4-runtime:${antlrVersion}",

            // Annotations
            commons_annotations: "org.hibernate.common:hibernate-commons-annotations:${hibernateCommonsVersion}",
            jandex:         'org.jboss:jandex:2.4.2.Final',
            classmate:      'com.fasterxml:classmate:1.5.1',

            // Dom4J
            dom4j:          'org.dom4j:dom4j:2.1.3@jar',

            // Byte Buddy
            byteBuddy:      "net.bytebuddy:byte-buddy:${byteBuddyVersion}",

            // jakarta
            jakarta_jpa:            "jakarta.persistence:jakarta.persistence-api:${project.jakartaJpaVersion}",
            jakarta_jta:            'jakarta.transaction:jakarta.transaction-api:2.0.0',
            jakarta_validation:     'jakarta.validation:jakarta.validation-api:3.0.0',
            jakarta_jacc:           'jakarta.authorization:jakarta.authorization-api:2.0.0',
            jakarta_interceptor:    'jakarta.interceptor:jakarta.interceptor-api:2.0.0',
            jakarta_activation:     'jakarta.activation:jakarta.activation-api:2.0.1',
            jakarta_resource:       'jakarta.resource:jakarta.resource-api:2.0.0',
            jakarta_jaxb_api:       'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1',
            jakarta_jaxb_xjc:       "org.glassfish.jaxb:jaxb-xjc:${jakartaJaxbRuntimeVersion}",
            jakarta_jaxb_runtime:   "org.glassfish.jaxb:jaxb-runtime:${jakartaJaxbRuntimeVersion}",
            jakarta_cdi:            'jakarta.enterprise:jakarta.enterprise.cdi-api:3.0.0',
            jakarta_weld:           "org.jboss.weld.se:weld-se-shaded:${jakartaWeldVersion}",
            jboss_jta_jakarta:      "org.jboss.narayana.jta:narayana-jta-jakarta:5.11.2.Final",
            jboss_tx_spi_jakarta:   "org.jboss:jboss-transaction-spi-jakarta:7.6.1.Final",
            jakarta_validator:      "org.hibernate.validator:hibernate-validator:${hibernateValidatorJakartaVersion}",
            jakarta_el:             'org.glassfish:jakarta.el:4.0.1',
            jakarta_inject:         'jakarta.inject:jakarta.inject-api:2.0.0',
            jakarta_jsonb:          'jakarta.json.bind:jakarta.json.bind-api:2.0.0',

            // javax
            jpa:            "javax.persistence:javax.persistence-api:${project.jpaVersion}",
            jta:            'org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final',
            validation:     "javax.validation:validation-api:${validationApiVersion}",
            jacc:           'org.jboss.spec.javax.security.jacc:jboss-jacc-api_1.4_spec:1.0.2.Final',
            interceptor:    'javax.interceptor:javax.interceptor-api:1.2',
            // required by JAXB from JDK 9 as it is not available anymore in JDK 9
            activation:     'javax.activation:javax.activation-api:1.2.0',
            cdi: "javax.enterprise:cdi-api:${cdiVersion}",
            weld: "org.jboss.weld.se:weld-se-shaded:${weldVersion}",
            jaxb_api: "javax.xml.bind:jaxb-api:${jaxbApiVersion}",
            jaxb_runtime: "org.glassfish.jaxb:jaxb-runtime:${jaxbRuntimeVersion}",
            jaxb_xjc: "org.glassfish.jaxb:jaxb-xjc:${jaxbRuntimeVersion}",
            // Note that jaxb2_basics is a set of tools on *top* of JAXB.
            // See https://github.com/highsource/jaxb2-basics
            jaxb2_basics: 'org.jvnet.jaxb2_commons:jaxb2-basics:0.12.0',
            jaxb2_basics_ant: 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.12.0',
            jboss_jta:       "org.jboss.narayana.jta:narayana-jta:5.11.2.Final",
            jboss_tx_spi:    "org.jboss:jboss-transaction-spi:7.6.1.Final",
            validator:       "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}",
            expression_language: "org.glassfish:javax.el:${elVersion}",


            // logging
            logging:        'org.jboss.logging:jboss-logging:3.4.3.Final',
            logging_annotations: 'org.jboss.logging:jboss-logging-annotations:2.2.1.Final',
            logging_processor:  'org.jboss.logging:jboss-logging-processor:2.2.1.Final',

            // jaxb task

            jackson:         'com.fasterxml.jackson.core:jackson-databind:2.13.0',
            geolatte:       "org.geolatte:geolatte-geom:${geolatteVersion}",

            // Animal Sniffer Ant Task and Java 1.6 API signature file
            // not using 1.9 for the time being due to MANIMALSNIFFER-34
            animal_sniffer:     'org.codehaus.mojo:animal-sniffer-ant-tasks:1.13',
            java16_signature:   'org.codehaus.mojo.signature:java16:1.0@signature',

            //Maven plugin framework
            maven_core: 'org.apache.maven:maven-core:3.8.1',
            maven_artifact: 'org.apache.maven:maven-artifact:3.0.5',
            maven_plugin: 'org.apache.maven:maven-plugin-api:3.0.5',
            maven_plugin_tools: 'org.apache.maven.plugin-tools:maven-plugin-annotations:3.2',

            // ~~~~~~~~~~~~~~~~~~~~~~~~~~ testing


            junit5_api:     "org.junit.jupiter:junit-jupiter-api:${junit5Version}",
            junit5_jupiter: "org.junit.jupiter:junit-jupiter-engine:${junit5Version}",
            junit5_params : "org.junit.jupiter:junit-jupiter-params:${junit5Version}",
            junit:          "junit:junit:${junitVersion}",
            junit5_vintage: "org.junit.vintage:junit-vintage-engine:${junitVintageVersion}",

            log4j2:          "org.apache.logging.log4j:log4j-core:2.17.1",

            byteman:         "org.jboss.byteman:byteman:${bytemanVersion}",
            byteman_install: "org.jboss.byteman:byteman-install:${bytemanVersion}",
            byteman_bmunit:  "org.jboss.byteman:byteman-bmunit:${bytemanVersion}",
            h2:              "com.h2database:h2:${h2Version}",
            h2gis:           "org.orbisgis:h2gis:1.5.0",
            hsqldb:          "org.hsqldb:hsqldb:2.3.6",
            derby:           "org.apache.derby:derby:10.14.2.0",
            postgresql:      'org.postgresql:postgresql:42.2.16',
            mysql:           'mysql:mysql-connector-java:8.0.27',
            tidb:            'mysql:mysql-connector-java:8.0.27',
            mariadb:         'org.mariadb.jdbc:mariadb-java-client:2.2.3',
            cockroachdb:     'org.postgresql:postgresql:42.2.8',

            oracle:          'com.oracle.database.jdbc:ojdbc8:21.3.0.0',
            mssql:           'com.microsoft.sqlserver:mssql-jdbc:7.2.1.jre8',
            db2:             'com.ibm.db2:jcc:11.5.7.0',
            hana:            'com.sap.cloud.db.jdbc:ngdbc:2.4.59',
            sybase:          'net.sourceforge.jtds:jtds:1.3.1',

            jodaTime:        "joda-time:joda-time:${jodaTimeVersion}",

            informix:        'com.ibm.informix:jdbc:4.10.12',
            firebird:        'org.firebirdsql.jdbc:jaybird:4.0.3.java8',
            xapool:          "com.experlog:xapool:1.5.0",
            mockito:         'org.mockito:mockito-core:2.19.1',
            mockito_inline:  'org.mockito:mockito-inline:2.19.1',

            c3p0:            "com.mchange:c3p0:0.9.5.5",
            ehcache:         "net.sf.ehcache:ehcache:2.10.6",
            ehcache3:        "org.ehcache:ehcache:3.10.0-alpha0",
            jcache:          "javax.cache:cache-api:1.0.0",
            proxool:         "proxool:proxool:0.8.3",
            hikaricp:        "com.zaxxer:HikariCP:3.2.0",
            vibur:           "org.vibur:vibur-dbcp:25.0",
            agroal_api:      "io.agroal:agroal-api:${agroalVersion}",
            agroal_pool:     "io.agroal:agroal-pool:${agroalVersion}",
            micrometer:      "io.micrometer:micrometer-core:1.6.1",

            atomikos:         "com.atomikos:transactions:4.0.6",
            atomikos_jta:     "com.atomikos:transactions-jta:4.0.6",


            assertj: "org.assertj:assertj-core:${assertjVersion}",
            assertj_api: "org.assertj:assertj-core-api:${assertjVersion}",

            // Shrinkwrap
            shrinkwrap_api: "org.jboss.shrinkwrap:shrinkwrap-api:${shrinkwrapVersion}",
            shrinkwrap: "org.jboss.shrinkwrap:shrinkwrap-impl-base:${shrinkwrapVersion}",

            shrinkwrap_descriptors_api_javaee: "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-javaee:${shrinkwrapDescriptorsVersion}",
            shrinkwrap_descriptors_impl_javaee: "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-impl-javaee:${shrinkwrapDescriptorsVersion}",

            jboss_vfs: "org.jboss:jboss-vfs:3.2.11.Final",
            wildfly_transaction_client : 'org.wildfly.transaction:wildfly-transaction-client-jakarta:2.0.0.Final',
            jboss_ejb_spec_jar          : 'org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.0.Final',
            jboss_annotation_spec_jar   : 'org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.0.Final',

            graalvm_nativeimage         : "org.graalvm.nativeimage:svm:${graalvmVersion}",

            //asciidoclet : 'org.asciidoctor:asciidoclet:1.+',
            // Use the SNAPSHOT temporarily to validate asciidoclet's PR-91 - https://github.com/asciidoctor/asciidoclet/pull/91
            //		- which does not seem to work anyway
            // todo (6.0) : come back and verify whether this ever works
            asciidoclet : 'org.asciidoctor:asciidoclet:1.5.7-SNAPSHOT'
    ]
}

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        //Force the "byte buddy agent" version to match the Byte Buddy version we use, as Mockito might pull in a mismatched version transitively:
        if (details.requested.group + ":" + details.requested.name == 'net.bytebuddy:byte-buddy-agent') {
            details.useVersion byteBuddyVersion
        }
    }
}