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.3' }
}

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.14.0-SNAPSHOT' // 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:${grpcVersion}"
    compile "io.grpc:grpc-protobuf:${grpcVersion}"
    compile "io.grpc:grpc-stub:${grpcVersion}"
    compileOnly "javax.annotation:javax.annotation-api:1.2"

    // Used for TLS in HelloWorldServerTls
    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
}
