apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'net.corda.plugins.cordformation'
apply plugin: 'net.corda.plugins.quasar-utils'

configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

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

compileTestJava.dependsOn tasks.getByPath(':node:capsule:buildCordaJAR')

dependencies {
    compile project(':core')
    compile project(':client:jfx')
    compile project(':node-driver')
    compile project(':webserver')
    testCompile project(':verifier')
    testCompile project(':test-utils')

    compile "org.graphstream:gs-core:1.3"
    compile("org.graphstream:gs-ui:1.3") {
        exclude group: "bouncycastle"
        exclude group: "junit"
    }

    compile project(path: ":node:capsule", configuration: 'runtimeArtifacts')
    compile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts')

    // Corda Plugins: dependent flows and services
    compile project(':finance')
}

mainClassName = "net.corda.docs.ClientRpcTutorialKt"

task getClientRpcTutorial(type: CreateStartScripts) {
    dependsOn(classes)
    mainClassName = "net.corda.docs.ClientRpcTutorialKt"
    applicationName = "client-rpc-tutorial"
    defaultJvmOpts = []
    outputDir = new File(project.buildDir, 'scripts')
    classpath = jar.outputs.files + project.configurations.runtime
}

applicationDistribution.into("bin") {
    from(getClientRpcTutorial)
    fileMode = 0755
}

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

task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
    directory "./build/nodes"
    node {
        name "O=Notary Service,OU=corda,L=London,C=GB"
        notary = [validating : true]
        p2pPort 10002
        rpcSettings {
            address "localhost:10003"
            adminAddress "localhost:10013"
        }
        webPort 10004
        cordapps = []
    }
    node {
        name "O=Alice Corp,L=London,C=GB"
        p2pPort 10005
        rpcSettings {
            address "localhost:10006"
            adminAddress "localhost:10016"
        }
        webPort 10007
        cordapps = []
        rpcUsers = [
                ['username' : "user",
                 'password' : "password",
                 'permissions' : ["StartFlow.net.corda.finance.flows.CashFlow"]]
        ]
    }
}
