/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */
ext {
    depVersions = null
    depLibs = null
}

depVersions = [
    arquillianCubeDocker: "1.18.2",
    arquillianJunit: "1.6.0.Final",
    bcFips: "1.0.2",
    bouncycastle: "1.69",
    commonsCli: "1.2",
    commonsCodec: "1.6",
    commonsCollections4: "4.1",
    commonsCompress: "1.19",
    commonsConfiguration: "1.10",
    commonsIO: "2.7",
    commonsLang2: "2.6",
    commonsLang3: "3.6",
    commonsBeanutils: "1.9.3",
    curator: "5.1.0",
    dockerJava: "3.2.5",
    dropwizard: "3.2.5",
    errorprone: "2.4.0",
    etcd: "0.5.4",
    freebuilder: "2.7.0",
    googleHTTPClient: "1.34.0",
    gradleTooling: "4.0.1",
    grpc: "1.33.0",
    groovy: "2.5.8",
    guava: "30.0-jre",
    hamcrest: "1.3",
    hdrhistogram: "2.1.10",
    httpclient: "4.5.13",
    jackson: "2.11.0",
    javaxServlet: "4.0.0",
    javaAnnotations:"1.3.2",
    jcommander: "1.78",
    jctools: "2.1.2",
    jetty: "9.4.43.v20210629",
    jmh: "1.19",
    jmock: "2.8.2",
    jna: "3.2.7",
    jsr305: "3.0.2",
    junit: "4.12",
    junitFoundation: "11.0.0",
    kerby: "1.1.1",
    log4j: "2.15.0",
    lombok: "1.18.20",
    lz4: "1.3.0",
    mockito: "3.0.0",
    netty: "4.1.68.Final",
    nettyTcnativeBoringSsl: "2.0.42.Final",
    powermock: "2.0.2",
    prometheus: "0.8.1",
    protobuf: "3.14.0",
    reflections: "0.9.11",
    rocksDb: "6.22.1.1",
    slf4j: "1.7.32",
    snakeyaml: "1.19",
    spotbugsAnnotations: "3.1.8",
    protocGenGrpcJava: "1.12.0",
    shrinkwrap:"3.1.4",
    snappy: "1.1.7",
    thrift: "0.14.2",
    testcontainers: "1.15.1",
    vertx: "3.9.8",
    yahooDatasketches: "0.8.3",
    zookeeper: "3.6.2",
]

depLibs = [
    bcpkixJdk15on: "org.bouncycastle:bcpkix-jdk15on:${depVersions.bouncycastle}",
    bcproveExtJdk15on: "org.bouncycastle:bcprov-ext-jdk15on:${depVersions.bouncycastle}",
    bcFips: "org.bouncycastle:bc-fips:${depVersions.bcFips}",
    commonsCli: "commons-cli:commons-cli:${depVersions.commonsCli}",
    arquillianCubeDocker: "org.arquillian.cube:arquillian-cube-docker:${depVersions.arquillianCubeDocker}",
    arquillianJunitContainer: "org.jboss.arquillian.junit:arquillian-junit-container:${depVersions.arquillianJunit}",
    arquillianJunitStandalone: "org.jboss.arquillian.junit:arquillian-junit-standalone:${depVersions.arquillianJunit}",
    commonsCodec: "commons-codec:commons-codec:${depVersions.commonsCodec}",
    commonsCollections4: "org.apache.commons:commons-collections4:${depVersions.commonsCollections4}",
    commonsCompress: "org.apache.commons:commons-compress:${depVersions.commonsCompress}",
    commonsConfiguration: "commons-configuration:commons-configuration:${depVersions.commonsConfiguration}",
    commonsIO: "commons-io:commons-io:${depVersions.commonsIO}",
    commonsLang2: "commons-lang:commons-lang:${depVersions.commonsLang2}",
    commonsLang3: "org.apache.commons:commons-lang3:${depVersions.commonsLang3}",
    commonsBeanutils: "commons-beanutils:commons-beanutils:${depVersions.commonsBeanutils}",
    curatorFramework: dependencies.create("org.apache.curator:curator-framework:${depVersions.curator}") {
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        exclude group: 'io.netty', module: 'netty-transport-native-epoll'
        exclude group: 'log4j', module: 'log4j'
    },

    curatorRecipes:  dependencies.create("org.apache.curator:curator-recipes:${depVersions.curator}") {
        exclude group: 'org.apache.curator', module: 'curator-framework'
    },
    dockerJava: "com.github.docker-java:docker-java:${depVersions.dockerJava}",
    errorprone: "com.google.errorprone:error_prone_annotations:${depVersions.errorprone}",
    etcd: dependencies.create("io.etcd:jetcd-core:${depVersions.etcd}") {
        exclude group: 'io.grpc'
    },
    freebuilder: "org.inferred:freebuilder:${depVersions.freebuilder}",
    googleHTTPClient: dependencies.create("com.google.http-client:google-http-client:${depVersions.googleHTTPClient}") {
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        exclude group: 'commons-codec', module: 'commons-codec'
        exclude group: 'commons-logging', module: 'commons-logging'
        exclude group: 'org.apache.httpcomponents', module: 'httpcore'
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
    },
    gradleTooling: "org.gradle:gradle-tooling-api:${depVersions.gradleTooling}",
    grpc: dependencies.create("io.grpc:grpc-all:${depVersions.grpc}") {
        exclude group: 'com.google.http-client', module: 'google-http-client'
        exclude group: 'com.squareup.okhttp', module: 'okhttp'
        exclude group: 'com.squareup.okio', module: 'okio'
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        exclude group: 'io.grpc', module: 'grpc-netty-shaded'
        exclude group: 'io.grpc', module: 'grpc-okhttp'
        exclude group: 'junit', module: 'junit'
        exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on'
        exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
    },
    groovy: "org.codehaus.groovy:groovy-all:${depVersions.groovy}",
    guava: dependencies.create("com.google.guava:guava:${depVersions.guava}"){
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
    },
    hdrHistogram: "org.hdrhistogram:HdrHistogram:${depVersions.hdrhistogram}",
    hamcrest: "org.hamcrest:hamcrest-all:${depVersions.hamcrest}",
    httpclient: dependencies.create("org.apache.httpcomponents:httpclient:${depVersions.httpclient}") {
        exclude group: 'commons-codec', module: 'commons-codec'
        exclude group: 'commons-logging', module: 'commons-logging'
    },
    jacksonAnnotations: "com.fasterxml.jackson.core:jackson-annotations:${depVersions.jackson}",
    javaAnnotations: "javax.annotation:javax.annotation-api:${depVersions.javaAnnotations}",
    jacksonCore: "com.fasterxml.jackson.core:jackson-core:${depVersions.jackson}",
    jacksonDatabind: "com.fasterxml.jackson.core:jackson-databind:${depVersions.jackson}",
    javaxServlet: "javax.servlet:javax.servlet-api:${depVersions.javaxServlet}",
    jcommander: "com.beust:jcommander:${depVersions.jcommander}",
    jctools: "org.jctools:jctools-core:${depVersions.jctools}",
    jettyServlet: dependencies.create("org.eclipse.jetty:jetty-servlet:${depVersions.jetty}") {
        exclude group: 'javax.servlet', module: 'javax.servlet-api'
    },
    jettyWebapp: "org.eclipse.jetty:jetty-webapp:${depVersions.jetty}",
    jmock: "org.jmock:jmock:${depVersions.jmock}",
    jmhCore: "org.openjdk.jmh:jmh-core:${depVersions.jmh}",
    jmhGeneratorAnnprocess: "org.openjdk.jmh:jmh-generator-annprocess:${depVersions.jmh}",
    jna: "net.java.dev.jna:jna:${depVersions.jna}",
    jsr305: "com.google.code.findbugs:jsr305:${depVersions.jsr305}",
    junit: "junit:junit:${depVersions.junit}",
    junitFoundation: "com.nordstrom.tools:junit-foundation:${depVersions.junitFoundation}",
    kerbySimpleKdc: "org.apache.kerby:kerb-simplekdc:${depVersions.kerby}",
    log4jSlf4jImpl: "org.apache.logging.log4j:log4j-slf4j-impl:${depVersions.log4j}",
    log4j12api: "org.apache.logging.log4j:log4j-1.2-api:${depVersions.log4j}",
    log4jCore: "org.apache.logging.log4j:log4j-core:${depVersions.log4j}",
    lombok: "org.projectlombok:lombok:${depVersions.lombok}",
    lz4: "net.jpountz.lz4:lz4:${depVersions.lz4}",
    metricsCore: "io.dropwizard.metrics:metrics-core:${depVersions.dropwizard}",
    metricsJvm: "io.dropwizard.metrics:metrics-jvm:${depVersions.dropwizard}",
    metricsGraphite: "io.dropwizard.metrics:metrics-graphite:${depVersions.dropwizard}",
    mockito: "org.mockito:mockito-core:${depVersions.mockito}",
    nettyBuffer: "io.netty:netty-buffer:${depVersions.netty}",
    nettyCommon: "io.netty:netty-common:${depVersions.netty}",
    nettyHandler: "io.netty:netty-handler:${depVersions.netty}",
    nettyTcnativeBoringSsl: "io.netty:netty-tcnative-boringssl-static:${depVersions.nettyTcnativeBoringSsl}",
    nettyTransport: "io.netty:netty-transport:${depVersions.netty}",
    nettyTransportNativeEpoll: "io.netty:netty-transport-native-epoll:${depVersions.netty}:linux-x86_64",
    nettyProxy: "io.netty:netty-handler-proxy:${depVersions.netty}",
    nettyCodecHTTP: "io.netty:netty-codec-http:${depVersions.netty}",
    nettyCodecHTTP2: "io.netty:netty-codec-http2:${depVersions.netty}",
    nettyResolver: "io.netty:netty-resolver:${depVersions.netty}",
    nettyResolverDNS: "io.netty:netty-resolver-dns:${depVersions.netty}",
    powermockJunit: "org.powermock:powermock-module-junit4:${depVersions.powermock}",
    powermockMockito: "org.powermock:powermock-api-mockito2:${depVersions.powermock}",
    prometheusSimpleClient: "io.prometheus:simpleclient:${depVersions.prometheus}",
    prometheusSimpleClientHotspot: "io.prometheus:simpleclient_hotspot:${depVersions.prometheus}",
    prometheusSimpleClientServlet: "io.prometheus:simpleclient_servlet:${depVersions.prometheus}",
    protobuf: "com.google.protobuf:protobuf-java:${depVersions.protobuf}",
    protocGenGrpcJava: "io.grpc:protoc-gen-grpc-java:${depVersions.protocGenGrpcJava}",
    protoc: "com.google.protobuf:protoc:${depVersions.protobuf}",
    reflections: "org.reflections:reflections:${depVersions.reflections}",
    rocksDb: "org.rocksdb:rocksdbjni:${depVersions.rocksDb}",
    slf4j: "org.slf4j:slf4j-api:${depVersions.slf4j}",
    slf4jSimple: "org.slf4j:slf4j-simple:${depVersions.slf4j}",
    shrinkwrapImpl: "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:${depVersions.shrinkwrap}",
    shrinkwrapApi: "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api:${depVersions.shrinkwrap}",
    snappy: "org.xerial.snappy:snappy-java:${depVersions.snappy}",
    snakeyaml: "org.yaml:snakeyaml:${depVersions.snakeyaml}",
    spotbugsAnnotations: dependencies.create("com.github.spotbugs:spotbugs-annotations:${depVersions.spotbugsAnnotations}") {
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
    },
    thrift: dependencies.create("org.apache.thrift:libthrift:${depVersions.thrift}") {
        exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-core'
        exclude group: 'javax.annotation', module: 'javax.annotation-api'
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
        exclude group: 'org.apache.httpcomponents', module: 'httpcore'
        exclude group: 'org.slf4j', module: 'slf4j-api'
    },
    testcontainers: "org.testcontainers:testcontainers:${depVersions.testcontainers}",
    vertxCore: dependencies.create("io.vertx:vertx-core:${depVersions.vertx}") {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-annotations'
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-core'
        exclude group: 'io.netty'
    },
    vertxWeb: dependencies.create("io.vertx:vertx-web:${depVersions.vertx}") {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-annotations'
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-core'
        exclude group: 'io.netty'
    },
    yahooDatasketches: "com.yahoo.datasketches:sketches-core:${depVersions.yahooDatasketches}",
    zookeeper: dependencies.create("org.apache.zookeeper:zookeeper:${depVersions.zookeeper}") {
        exclude group: 'io.netty', module: 'netty-transport-native-epoll'
        exclude group: 'log4j', module: 'log4j'
        exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    },
    zookeeperTest: "org.apache.zookeeper:zookeeper:${depVersions.zookeeper}:tests"
]
