buildscript {
    ext {
        springBootVersion = '1.5.7.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

// Spring Boot plugin adds a numerous hardcoded dependencies in the version much lower then Corda expects
// causing the problems in runtime. Those can be changed by manipulating above properties
// See https://github.com/spring-gradle-plugins/dependency-management-plugin/blob/master/README.md#changing-the-value-of-a-version-property
ext['artemis.version'] = "$artemis_version"
ext['hibernate.version'] = "$hibernate_version"
ext['selenium.version'] = "$selenium_version"

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'net.corda.plugins.quasar-utils'
apply plugin: 'application'

mainClassName = 'net.corda.irs.IRSDemo'

sourceSets {
    integrationTest {
        kotlin {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integration-test/kotlin')
        }
    }
    systemTest {
        kotlin {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/system-test/kotlin')
        }
    }
}

configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
    demoArtifacts.extendsFrom testRuntime
    systemTestCompile.extendsFrom testCompile
}

repositories {
    maven {
        url 'https://dl.bintray.com/palantir/releases' // docker-compose-rule is published on bintray
    }
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    compile group: 'commons-io', name: 'commons-io', version: '2.5'
    compile project(path: ":samples:irs-demo:cordapp", configuration: "demoArtifacts")
    compile project(":samples:irs-demo:web")
    compile('org.springframework.boot:spring-boot-starter-web') {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }

    testCompile project(':node-driver')
    testCompile "junit:junit:$junit_version"
    testCompile "org.assertj:assertj-core:${assertj_version}"

    integrationTestCompile project(path: ":samples:irs-demo:web", configuration: "demoArtifacts")
    testCompile "com.palantir.docker.compose:docker-compose-rule-junit4:$docker_compose_rule_version"
    testCompile "org.seleniumhq.selenium:selenium-java:$selenium_version"
    testCompile "com.github.detro:ghostdriver:$ghostdriver_version"
}

bootRepackage {
    enabled = false
}

task integrationTest(type: Test, dependsOn: []) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}

evaluationDependsOn("cordapp")
evaluationDependsOn("web")

task systemTest(type: Test, dependsOn: ["cordapp:prepareDockerNodes", "web:generateDockerCompose"]) {
    testClassesDirs = sourceSets.systemTest.output.classesDirs
    classpath = sourceSets.systemTest.runtimeClasspath

    systemProperty "CORDAPP_DOCKER_COMPOSE", tasks.getByPath("cordapp:prepareDockerNodes").dockerComposePath.toString()
    systemProperty "WEB_DOCKER_COMPOSE", tasks.getByPath("web:generateDockerCompose").dockerComposePath.toString()

    def phantomJsPath = System.getProperty("phantomjs.binary.path") ?: System.getenv("PHANTOMJS_BINARY_PATH")
    if (phantomJsPath != null) {
        systemProperty "phantomjs.binary.path", phantomJsPath
    }
}

idea {
    module {
        downloadJavadoc = true // defaults to false
        downloadSources = true
    }
}