apply plugin: 'java'
apply plugin: 'com.google.protobuf'

buildscript {
    repositories {
        maven { // The google mirror is less flaky than mavenCentral()
            url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
    }
    dependencies { // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
        // gradle versions
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5' }
}

repositories {
    maven { // The google mirror is less flaky than mavenCentral()
        url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
    mavenLocal()
}

// IMPORTANT: You probably want the non-SNAPSHOT version of gRPC. Make sure you
// are looking at a tagged version of the example and not "master"!

// Feel free to delete the comment at the next line. It is just for safely
// updating the version in our release process.
def grpcVersion = '1.16.1' // CURRENT_GRPC_VERSION
def nettyTcNativeVersion = '2.0.7.Final'
def protobufVersion = '3.5.1'
def protocVersion = '3.5.1-1'

dependencies {
    compile "com.google.api.grpc:proto-google-common-protos:1.0.0"
    compile "io.grpc:grpc-alts:${grpcVersion}"
    compile "io.grpc:grpc-netty-shaded:${grpcVersion}"
    compile "io.grpc:grpc-protobuf:${grpcVersion}"
    compile "io.grpc:grpc-stub:${grpcVersion}"
    compileOnly "javax.annotation:javax.annotation-api:1.2"

    // Used in HelloWorldServerTls
    compile "io.grpc:grpc-netty:${grpcVersion}"
    compile "io.netty:netty-tcnative-boringssl-static:${nettyTcNativeVersion}"

    compile "com.google.protobuf:protobuf-java-util:${protobufVersion}"

    testCompile "io.grpc:grpc-testing:${grpcVersion}"
    testCompile "junit:junit:4.12"
    testCompile "org.mockito:mockito-core:1.9.5"
}

protobuf {
    protoc { artifact = "com.google.protobuf:protoc:${protocVersion}" }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
    }
    generateProtoTasks {
        all()*.plugins { grpc {} }
    }
}

// Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
sourceSets {
    main {
        java {
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

// Generate IntelliJ IDEA's .idea & .iml project files
apply plugin: 'idea'

// Provide convenience executables for trying out the examples.
apply plugin: 'application'

startScripts.enabled = false

task routeGuideServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.routeguide.RouteGuideServer'
    applicationName = 'route-guide-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task routeGuideClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.routeguide.RouteGuideClient'
    applicationName = 'route-guide-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworld.HelloWorldServer'
    applicationName = 'hello-world-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworld.HelloWorldClient'
    applicationName = 'hello-world-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldAltsServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsServer'
    applicationName = 'hello-world-alts-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldAltsClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsClient'
    applicationName = 'hello-world-alts-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldTlsServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworldtls.HelloWorldServerTls'
    applicationName = 'hello-world-tls-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldTlsClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworldtls.HelloWorldClientTls'
    applicationName = 'hello-world-tls-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task compressingHelloWorldClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.experimental.CompressingHelloWorldClient'
    applicationName = 'compressing-hello-world-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

applicationDistribution.into('bin') {
    from(routeGuideServer)
    from(routeGuideClient)
    from(helloWorldServer)
    from(helloWorldClient)
    from(helloWorldAltsServer)
    from(helloWorldAltsClient)
    from(helloWorldTlsServer)
    from(helloWorldTlsClient)
    from(compressingHelloWorldClient)
    fileMode = 0755
}
