/**
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

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

plugins {
    id "com.github.hierynomus.license" version "0.14.0"
    id "com.moowork.node" version "1.1.0"
    id "java"
    id "eclipse"
    id "idea"
}

repositories {
    mavenCentral()
    mavenLocal()
}

configurations {
    testPlugins {}
}

dependencies {
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.8.1'
}

apply from: 'gradle/license.gradle'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

task licenseFormatNode(type: com.hierynomus.gradle.license.tasks.LicenseFormat) {
    source = fileTree(dir: "src").include("**/*")
    source = fileTree(dir: "front-end/src").include("**/*")
}
licenseFormat.dependsOn licenseFormatNode

task licenseCheckNode(type: com.hierynomus.gradle.license.tasks.LicenseCheck) {
    source = fileTree(dir: "src").include("**/*")
}

// Add VERSION
task incrementVersion<<{
    new File(projectDir, "VERSION").text = version
}

dependencyManagement {
  imports {
    mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR2'
  }
  applyMavenExclusions = false
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: springBootVersion
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-zuul', version: springBootVersion
    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: springMybatisVersion
    compile group: 'org.postgresql', name: 'postgresql', version: postgresqlVersion
    compile group: 'org.herddb', name: 'herddb-jdbc', version: herddbVersion
    compile group: 'javax.validation', name: 'validation-api', version: javaxValidationVersion
    compile group: 'io.jsonwebtoken', name: 'jjwt-api', version: jsonWebTokenApiVersion
    compile group: 'io.jsonwebtoken', name: 'jjwt-impl', version: jsonWebTokenImplVersion
    compile group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: jsonWebTokenImplVersion
    compile group: 'org.xerial', name: 'sqlite-jdbc', version: sqliteVersion
    compile group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: pageHelperVersion
    compile group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
    compile group: 'com.google.guava', name: 'guava', version: guavaVersion
    compile group: 'com.google.code.gson', name: 'gson', version: gsonVersion
    compile group: 'org.apache.pulsar', name: 'pulsar-common', version: pulsarVersion
    compile group: 'io.springfox', name: 'springfox-swagger2', version: swagger2Version
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: swaggeruiVersion
    compile group: 'org.powermock', name: 'powermock-api-mockito', version: apiMockitoVersion
    compile group: 'org.powermock', name: 'powermock-module-junit4', version: mockitoJunit4Version
    compile group: 'org.apache.pulsar', name: 'pulsar-broker', version: brokerVersion
    compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion
}
