/**
 * 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: 'io.spring.dependency-management'
apply plugin: 'application'

mainClassName = 'org.apache.pulsar.manager.PulsarManagerApplication'

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
}

distTar {
    archiveName "pulsar-manager.tar"
}

jar {
    manifest {
        attributes(
                'Main-Class': mainClassName
        )
    }
}

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: '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
}
