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.12.0-SNAPSHOT' // CURRENT_GRPC_VERSION
def nettyTcNativeVersion = '2.0.7.Final'

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}"

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

  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:3.5.1-1'
  }
  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
}
