buildscript {
    repositories {
        if (rootProject.hasProperty("cacheLocation")) {
            mavenLocal()
            maven { url cacheLocation }
        } else {
            mavenLocal()
            gradlePluginPortal()
            mavenCentral()
            jcenter()
            maven {
                url "https://repo.spring.io/libs-milestone"
                mavenContent { releasesOnly() }
            }
            maven {
                url "https://repo.spring.io/libs-snapshot"
                mavenContent { snapshotsOnly() }
            }
            maven {
                url "https://plugins.gradle.org/m2/"
                mavenContent { releasesOnly() }
            }
        }
    }
    dependencies {
        classpath "de.undercouch:gradle-download-task:${project.gradleDownloadTaskVersion}"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${project.springBootVersion}"
        classpath "gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:${project.jibVersion}"
        classpath "io.freefair.gradle:maven-plugin:${project.gradleMavenPluginVersion}"
        classpath "io.freefair.gradle:lombok-plugin:${project.gradleLombokPluginVersion}"
    }
}

repositories {
    if (rootProject.hasProperty("cacheLocation")) {
        mavenLocal()
        maven { url cacheLocation }
    } else {
        mavenLocal()
        mavenCentral()
        jcenter()
        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots"
            mavenContent { snapshotsOnly() }
        }
        maven {
            mavenContent { releasesOnly() }
            url "https://build.shibboleth.net/nexus/content/repositories/releases/"
        }
        maven {
            mavenContent { releasesOnly() }
            url "https://repo.spring.io/milestone/"
        }
        maven {
            url "https://repo.spring.io/snapshot/"
            mavenContent { snapshotsOnly() }
        }
        maven {
            mavenContent { snapshotsOnly() }
            url "https://oss.jfrog.org/artifactory/oss-snapshot-local"
        }
    }
}

def casServerVersion = project.'cas.version'
def casWebApplicationBinaryName = "cas.war"

project.ext."casServerVersion" = casServerVersion
project.ext."casWebApplicationBinaryName" = casWebApplicationBinaryName

apply plugin: "io.freefair.war-overlay"
apply plugin: "io.freefair.lombok"
apply from: rootProject.file("gradle/tasks.gradle")

apply plugin: "war"
apply plugin: "eclipse"
apply plugin: "idea"

apply from: rootProject.file("gradle/springboot.gradle")
apply from: rootProject.file("gradle/dockerjib.gradle")

dependencies {
    // Other CAS dependencies/modules may be listed here...
    implementation "org.apereo.cas:cas-server-support-ldap:${project.'cas.version'}"
    implementation "org.apereo.cas:cas-server-support-json-service-registry:${project.'cas.version'}"
    implementation "org.apereo.cas:cas-server-support-saml-idp:${project.'cas.version'}"
    implementation "org.apereo.cas:cas-server-support-oidc:${project.'cas.version'}"
}

tasks.findByName("jibDockerBuild")
    .dependsOn(copyWebAppIntoJib, copyConfigIntoJib)
    .finalizedBy(deleteWebAppFromJib)

tasks.findByName("jib")
    .dependsOn(copyWebAppIntoJib, copyConfigIntoJib)
    .finalizedBy(deleteWebAppFromJib)

configurations.all {
    resolutionStrategy {
        cacheChangingModulesFor 0, "seconds"
        cacheDynamicVersionsFor 0, "seconds"

        preferProjectModules()

        def failIfConflict = project.hasProperty("failOnVersionConflict") && Boolean.valueOf(project.getProperty("failOnVersionConflict"))
        if (failIfConflict) {
            failOnVersionConflict()
        }
    }
}

eclipse {
    classpath {
       downloadSources = true
       downloadJavadoc = true
    }
}

idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}
