plugins {
    id "java"
    id "checkstyle"
    id "com.google.protobuf" version "0.8.12"
    id "application"
}

repositories {
    mavenCentral()
}

ext {
    guiceVersion = "4.2.3"
    jettyVersion = "9.4.33.v20201020"
    jerseyVersion = "2.32"
    jacksonVersion = "2.10.1" // same version as jersey-media-json-jackson dependency
    protobufVersion = "3.13.0"
}

sourceCompatibility = "1.8"
compileJava.options.encoding = "UTF-8"
mainClassName = "org.traccar.Main"

checkstyle {
    toolVersion = "8.26"
    configFile = "gradle/checkstyle.xml" as File
    checkstyleTest.enabled = false
}

protobuf {
    generatedFilesBaseDir = "$projectDir/src"
    protoc {
        artifact = "com.google.protobuf:protoc:$protobufVersion"
    }
}

dependencies {
    implementation "commons-codec:commons-codec:1.15"
    implementation "com.h2database:h2:1.4.200"
    implementation "mysql:mysql-connector-java:8.0.22"
    implementation "org.postgresql:postgresql:42.2.18"
    implementation "com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8"
    implementation "com.zaxxer:HikariCP:3.4.5"
    implementation "io.netty:netty-all:4.1.53.Final"
    implementation "org.slf4j:slf4j-jdk14:1.7.30"
    implementation "com.google.inject:guice:$guiceVersion"
    implementation "com.google.inject.extensions:guice-assistedinject:$guiceVersion"
    implementation "org.owasp.encoder:encoder:1.2.2"
    implementation "org.glassfish:javax.json:1.1.4"
    implementation "org.eclipse.jetty:jetty-server:$jettyVersion"
    implementation "org.eclipse.jetty:jetty-servlet:$jettyVersion"
    implementation "org.eclipse.jetty:jetty-webapp:$jettyVersion"
    implementation "org.eclipse.jetty:jetty-jndi:$jettyVersion"
    implementation "org.eclipse.jetty:jetty-proxy:$jettyVersion"
    implementation "org.eclipse.jetty.websocket:websocket-server:$jettyVersion"
    implementation "org.glassfish.jersey.containers:jersey-container-servlet:$jerseyVersion"
    implementation "org.glassfish.jersey.media:jersey-media-json-jackson:$jerseyVersion"
    implementation "org.glassfish.jersey.inject:jersey-hk2:$jerseyVersion"
    implementation "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jacksonVersion"
    implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr353:$jacksonVersion"
    implementation "org.liquibase:liquibase-core:3.10.3", {
        exclude group: "ch.qos.logback", module: "logback-classic"
    }
    implementation "com.sun.mail:javax.mail:1.6.2"
    implementation "org.jxls:jxls:2.4.7" // needs upgrade
    implementation "org.jxls:jxls-poi:1.0.16" // needs upgrade
    implementation "org.apache.velocity:velocity:1.7"
    implementation "org.apache.velocity:velocity-tools:2.0"
    implementation "org.apache.commons:commons-collections4:4.4"
    implementation "org.mnode.ical4j:ical4j:2.0.5" // needs upgrade
    implementation "org.locationtech.spatial4j:spatial4j:0.7"
    implementation "org.locationtech.jts:jts-core:1.17.1"
    implementation "net.java.dev.jna:jna-platform:5.6.0"
    implementation "com.github.jnr:jnr-posix:3.1.2"
    implementation "com.google.protobuf:protobuf-java:$protobufVersion"
    implementation "javax.xml.bind:jaxb-api:2.3.1"
    implementation "com.sun.xml.bind:jaxb-core:2.3.0.1"
    implementation "com.sun.xml.bind:jaxb-impl:2.3.3"
    implementation "javax.activation:activation:1.1.1"
    testImplementation "junit:junit:4.13.1"
}

task copyDependencies(type: Copy) {
    into "$projectDir/target/lib"
    from configurations.runtimeClasspath
}
task copyBinary(type: Copy) {
    into "$projectDir/target"
    from jar
}
assemble.dependsOn(copyBinary, copyDependencies)

jar {
    manifest {
        attributes(
                "Main-Class": "org.traccar.Main",
                "Implementation-Version": "4.11",
                "Class-Path": configurations.runtimeClasspath.files.collect { "lib/$it.name" }.join(" "))
    }
}