buildscript {

    repositories {
        jcenter()
    }

    dependencies {
        classpath ("io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE")
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE")
    }
}

plugins {
    id 'com.github.hierynomus.license' version '0.13.1'
}

group 'io.mifos.dev'
version '0.1.0-BUILD-SNAPSHOT'

ext.versions = [
        frameworkservicestarter : '0.1.0-BUILD-SNAPSHOT',
        mifosidentity           : '0.1.0-BUILD-SNAPSHOT',
        mifosprovisioner        : '0.1.0-BUILD-SNAPSHOT',
        mifosrhythm             : '0.1.0-BUILD-SNAPSHOT',
        mifosoffice             : '0.1.0-BUILD-SNAPSHOT',
        mifoscustomer           : '0.1.0-BUILD-SNAPSHOT',
        mifosaccounting         : '0.1.0-BUILD-SNAPSHOT',
        mifosportfolio          : '0.1.0-BUILD-SNAPSHOT',
        mifosdeposit            : '0.1.0-BUILD-SNAPSHOT',
        mifosteller             : '0.1.0-BUILD-SNAPSHOT',
        mifosreporting          : '0.1.0-BUILD-SNAPSHOT',
        kuelapcheques           : '0.1.0-BUILD-SNAPSHOT',
        mifospayroll            : '0.1.0-BUILD-SNAPSHOT',
        frameworkapi            : '0.1.0-BUILD-SNAPSHOT',
        frameworklang           : '0.1.0-BUILD-SNAPSHOT',
        frameworktest           : '0.1.0-BUILD-SNAPSHOT',
        frameworkanubis         : '0.1.0-BUILD-SNAPSHOT',
        defaultsetup            : '0.1.0-BUILD-SNAPSHOT',
        validator               : '5.3.0.Final'
]

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'spring-boot'
apply plugin: 'maven-publish'

tasks.withType(JavaCompile) {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

repositories {
    jcenter()
    mavenLocal()
}

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:Athens-RELEASE'
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR1'
    }
}

// override certain dependency provided by Spring platform using newer releases
ext['cassandra.version'] = '3.6'
ext['cassandra-driver.version'] = '3.1.2'
ext['activemq.version'] = '5.13.2'
ext['spring-data-releasetrain.version'] = 'Gosling-SR2A'

dependencies {
    compile(
            [group: 'com.google.code.findbugs', name: 'jsr305'],
            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka-server'],
            [group: 'io.mifos.office', name: 'api', version: versions.mifosoffice],
            [group: 'io.mifos.provisioner', name: 'api', version: versions.mifosprovisioner],
            [group: 'io.mifos.identity', name: 'api', version: versions.mifosidentity],
            [group: 'io.mifos.rhythm', name: 'api', version: versions.mifosrhythm],
            [group: 'io.mifos.rhythm', name: 'spi', version: versions.mifosrhythm],

            [group: 'io.mifos.customer', name: 'api', version: versions.mifoscustomer],
            [group: 'io.mifos.accounting', name: 'api', version: versions.mifosaccounting],
            [group: 'io.mifos.accounting', name: 'importer', version: versions.mifosaccounting],
            [group: 'io.mifos.portfolio', name: 'api', version: versions.mifosportfolio],
            [group: 'io.mifos.deposit-account-management', name: 'api', version: versions.mifosdeposit],
            [group: 'io.mifos.teller', name: 'api', version: versions.mifosteller],
            [group: 'io.mifos.reporting', name: 'api', version: versions.mifosreporting],
            [group: 'io.mifos.cheques', name: 'api', version: versions.kuelapcheques],
            [group: 'io.mifos.payroll', name: 'api', version: versions.mifospayroll],

            [group: 'io.mifos.anubis', name: 'api', version: versions.frameworkanubis],
            [group: 'io.mifos.anubis', name: 'test', version: versions.frameworkanubis],
            [group: 'io.mifos.core', name: 'api', version: versions.frameworkapi],
            [group: 'io.mifos.core', name: 'test', version: versions.frameworktest],
            [group: 'io.mifos.core', name: 'lang', version: versions.frameworklang],
            [group: 'io.mifos', name: 'service-starter', version: versions.frameworkservicestarter],
            [group: 'io.mifos.default-setup', name: 'accounting', version: versions.defaultsetup],
            [group: 'org.springframework.boot', name: 'spring-boot-starter-test'],
            [group: 'org.eclipse.aether', name: 'aether-api', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-spi', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-util', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-impl', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-connector-basic', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-transport-file', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-transport-http', version: '1.1.0'],
            [group: 'org.apache.maven', name: 'maven-aether-provider', version: '3.1.0'],
            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
    )
}

publishToMavenLocal.dependsOn bootRepackage

license {
    header rootProject.file('HEADER')
    strictCheck true
    mapping {
        java = 'SLASHSTAR_STYLE'
        xml = 'XML_STYLE'
        yml = 'SCRIPT_STYLE'
        yaml = 'SCRIPT_STYLE'
    }
    ext.year = Calendar.getInstance().get(Calendar.YEAR)
    ext.name = 'The Mifos Initiative'
}
