/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.
 *
 *
 */

// Versions of Dependencies;
def asmVersion = '5.1'
def bonecpVersion = '0.8.0.RELEASE'
def bouncyVersion = '1.54'
def commonsDbcpVersion = '1.4' // Should be moved to commons-dbcp2
def commonsLangVersion = '2.6' // Should be moved to commons-lang3
def derbyVersion = '10.12.1.1'
def dnsJavaVersion = '2.1.7'
def ehcacheVersion = '2.10.2.2.21' // 3.x exists
def elasticsearchVersion = '1.7.5' // 2.x exists
def freemarkerVersion = '2.3.24-incubating'
def geodeVersion = '1.0.0-incubating.M2'
def groovyVersion = '2.4.7'
def h2Version = '1.4.192'
def hazelcastVersion = '3.6.3'
def httpClientVersion = '4.5.2'
def jacksonVersion = '2.7.5'
def javascriptVersion = '1.7.7.1'
def javasqlgeneratorVersion = '0.3.2'
def jcloudsVersion = '1.9.2'
def jdbmVersion = '2.4'
def jedisVersion = '2.8.1'
def jettyVersion = '9.2.17.v20160517' // 9.3.x Tests fail!
def jgoodiesLooksVersion = '2.7.0'
def jtaVersion = '1.1'
def leveldbVersion = '0.7'
def leveldbJniVersion = '1.8'
def liquibaseVersion = '3.5.1'
def logbackVersion = '1.1.3'
def mongodbVersion = '2.14.2' // 3.0.x Fails to compile!
def mysqlVersion = '5.1.39' // 6.x exists
def orgJsonVersion = '20130213'
def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
def pdfboxVersion = '1.8.12' // 2.x exists
def postgresqlVersion = '9.4.1208'
def prefuseVersion = '1.0.1'
def restletVersion = '2.3.7'
def rdfVersion = '2.7.16' // 2.8.x change query results!! 4.x exists
def riakVersion = '1.4.4' // 2.0.x Fails to compile!
def scalaVersion = '2.11.8'
def servletVersion = '3.1.0'
def shiroVersion = '1.2.4' // 1.2.5 exists but has wrong POM
def skedVersion = '2.1'
def slf4jVersion = '1.7.21'
def solrVersion = "1.4.1" // 4.x Fails to compile!
def springVersion = '4.3.0.RELEASE'
def spymemcachedVersion = '2.12.1'
def sqliteVersion = '3.8.11.2'
def velocityVersion = '1.7'
def wicketVersion = '1.5.8' // 6.x Samples fails to compile!
def wicketStatelessVersion = '1.5.0'
def woodstoxVersion = '4.4.1'
def yammerMetricsVersion = '2.2.0' // 3.x exists, relocated to io.dropwizard

def antVersion = '1.9.7'
def awaitilityVersion = '1.7.0'
def easyMockVersion = '3.4'
def junitVersion = '4.12'
def mockitoVersion = '1.10.19'

// build a map of the dependency artifacts to use.  Allows centralized definition of the version of artifacts to
// use.  In that respect it serves a role similar to <dependencyManagement> in Maven

rootProject.ext {
  libraries = [
          // Ant
          ant: "org.apache.ant:ant:$antVersion",
          ant_junit: "org.apache.ant:ant-junit:$antVersion",

          // ASM
          asm: "org.ow2.asm:asm:$asmVersion",
          asm_util: "org.ow2.asm:asm-util:$asmVersion",
          asm_commons: "org.ow2.asm:asm-commons:$asmVersion",

          // OSGi
          osgi_core: "org.osgi:org.osgi.core:$osgiVersion",
          osgi_compendium: "org.osgi:org.osgi.compendium:$osgiVersion",
          osgi_enterprise: "org.osgi:org.osgi.enterprise:$osgiVersion",

          // logging
          slf4j_api: "org.slf4j:slf4j-api:$slf4jVersion",
          slf4j_simple: "org.slf4j:slf4j-simple:$slf4jVersion",
          logback: 'ch.qos.logback:logback-classic:' + logbackVersion,
          jcl_slf4j: "org.slf4j:jcl-over-slf4j:$slf4jVersion",
          jcl_api: 'commons-logging:commons-logging-api:99.0-does-not-exist',  //ensure it is never used.
          jcl: 'commons-logging:commons-logging:99.0-does-not-exist',  // ensure it is never used.

          // org.json
          org_json: "org.codeartisans:org.json:$orgJsonVersion",

          // Restlet
          restlet: [
                  "org.restlet.jee:org.restlet:$restletVersion",
//                  "org.restlet.jee:org.restlet.ext.ssl:$restletVersion",
                  "org.restlet.jee:org.restlet.ext.atom:$restletVersion",
                  "org.restlet.jee:org.restlet.ext.servlet:$restletVersion",
                  "org.restlet.jee:org.restlet.ext.slf4j:$restletVersion"
          ],

          // Scala
          scala:  "org.scala-lang:scala-library:$scalaVersion",

          // Spring
          spring_core: [
                  "org.springframework:spring-beans:$springVersion",
                  "org.springframework:spring-context:$springVersion"
          ],

          spring_testsupport: [
                  "org.springframework:spring-test:$springVersion"
          ],

          // RDF
          sesame: [ "org.openrdf.sesame:sesame-model:$rdfVersion",
                  "org.openrdf.sesame:sesame-queryparser-sparql:$rdfVersion",
                  "org.openrdf.sesame:sesame-repository-dataset:$rdfVersion",
                  "org.openrdf.sesame:sesame-repository-http:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-api:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-n3:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-ntriples:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-rdfxml:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-trig:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-trix:$rdfVersion",
                  "org.openrdf.sesame:sesame-rio-turtle:$rdfVersion",
                  "org.openrdf.sesame:sesame-sail-api:$rdfVersion",
                  "org.openrdf.sesame:sesame-sail-memory:$rdfVersion",
                  "org.openrdf.sesame:sesame-sail-nativerdf:$rdfVersion",
                  "org.openrdf.sesame:sesame-sail-rdbms:$rdfVersion"
          ],
          sparql: [
                  "org.openrdf.sesame:sesame-queryresultio-sparqlxml:$rdfVersion",
                  "org.openrdf.sesame:sesame-queryresultio-sparqljson:$rdfVersion"
          ],

          // SOLR
          solr: [ "org.apache.solr:solr-core:$solrVersion",
                  "org.apache.solr:solr-solrj:$solrVersion"
          ],

          // Jetty
          jetty_server: "org.eclipse.jetty:jetty-server:$jettyVersion",
          jetty_webapp: "org.eclipse.jetty:jetty-webapp:$jettyVersion",
          jetty_servlet: "org.eclipse.jetty:jetty-servlet:$jettyVersion",
          jetty_http: "org.eclipse.jetty:jetty-http:$jettyVersion",
          jetty_io: "org.eclipse.jetty:jetty-io:$jettyVersion",
          jetty_jmx: "org.eclipse.jetty:jetty-jmx:$jettyVersion",
          jetty_security: "org.eclipse.jetty:jetty-security:$jettyVersion",
          jetty_jsp: "org.eclipse.jetty:jetty-jsp:$jettyVersion",
          jetty_util: "org.eclipse.jetty:jetty-util:$jettyVersion",
          jetty_continuation: "org.eclipse.jetty:jetty-continuation:$jettyVersion",
          jetty_client: "org.eclipse.jetty:jetty-client:$jettyVersion",
          jetty_xml: "org.eclipse.jetty:jetty-xml:$jettyVersion",

          // Scripting
          groovy: "org.codehaus.groovy:groovy-all:$groovyVersion",

          javascript: "org.mozilla:rhino:$javascriptVersion",

          // Wicket
          wicket: [ "org.apache.wicket:wicket-core:$wicketVersion",
                  "org.apache.wicket:wicket-datetime:$wicketVersion",
                  "org.apache.wicket:wicket-extensions:$wicketVersion"
          ],
          wicket_devutils: "org.apache.wicket:wicket-devutils:$wicketVersion",
          wicket_stateless: "com.jolira:wicket-stateless:$wicketStatelessVersion",

          // Library & Extension dependencies
          jackson_mapper: "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
          ehcache: "net.sf.ehcache:ehcache:$ehcacheVersion",
          elasticsearch: "org.elasticsearch:elasticsearch:$elasticsearchVersion",
          geode: "org.apache.geode:geode-core:$geodeVersion",
          h2: "com.h2database:h2:$h2Version",
          hazelcast: "com.hazelcast:hazelcast:$hazelcastVersion",
          jclouds_core: "org.apache.jclouds:jclouds-core:$jcloudsVersion",
          jclouds_blobstore: "org.apache.jclouds:jclouds-allblobstore:$jcloudsVersion",
          jclouds_filesystem: "org.apache.jclouds.api:filesystem:$jcloudsVersion",
          jdbm: "jdbm:jdbm:$jdbmVersion",
          jedis: "redis.clients:jedis:$jedisVersion",
          jgoodies_looks: "com.jgoodies:jgoodies-looks:$jgoodiesLooksVersion",
          leveldb_api: "org.iq80.leveldb:leveldb-api:$leveldbVersion",
          leveldb_java: "org.iq80.leveldb:leveldb:$leveldbVersion",
          leveldb_jni_all: "org.fusesource.leveldbjni:leveldbjni-all:$leveldbJniVersion",
          mongodb: "org.mongodb:mongo-java-driver:$mongodbVersion",
          riak: "com.basho.riak:riak-client:$riakVersion",
          jta: "javax.transaction:jta:$jtaVersion",
          javaSqlGenerator: "org.java-sql-generator:org.java-sql-generator.api:$javasqlgeneratorVersion",
          javaSqlGeneratorImpl: "org.java-sql-generator:org.java-sql-generator.implementation:$javasqlgeneratorVersion",
          velocity: "org.apache.velocity:velocity:$velocityVersion",
          commons_dbcp: "commons-dbcp:commons-dbcp:$commonsDbcpVersion",
          commons_lang: "commons-lang:commons-lang:$commonsLangVersion",
          servlet_api: "javax.servlet:javax.servlet-api:$servletVersion",
          http_client: "org.apache.httpcomponents:httpclient:$httpClientVersion",
          woodstox: "org.codehaus.woodstox:woodstox-core-asl:$woodstoxVersion",
          restlet_xml: "org.restlet.jee:org.restlet.ext.xml:$restletVersion",
          bouncy_castle: "org.bouncycastle:bcprov-jdk15on:$bouncyVersion",
          dnsjava: "dnsjava:dnsjava:$dnsJavaVersion",
          freemarker: "org.freemarker:freemarker:$freemarkerVersion",
          shiro: "org.apache.shiro:shiro-core:$shiroVersion",
          shiro_web: "org.apache.shiro:shiro-web:$shiroVersion",
          bonecp: "com.jolbox:bonecp:$bonecpVersion",
          liquibase: "org.liquibase:liquibase-core:$liquibaseVersion",
          sked: "org.codeartisans:sked:$skedVersion",
          yammer_metrics: "com.yammer.metrics:metrics-core:$yammerMetricsVersion",
          pdfbox: "org.apache.pdfbox:pdfbox:$pdfboxVersion",
          prefuse: "de.sciss:prefuse-core:$prefuseVersion",
          spymemcached: "net.spy:spymemcached:$spymemcachedVersion",

          // Testing
          junit: "junit:junit:$junitVersion",
          awaitility: "com.jayway.awaitility:awaitility:$awaitilityVersion",
          easymock: "org.easymock:easymock:$easyMockVersion",
          mockito: "org.mockito:mockito-core:$mockitoVersion",

          // Tests dependencies
          derby: "org.apache.derby:derby:$derbyVersion",
          derbyclient: "org.apache.derby:derbyclient:$derbyVersion",
          derbynet: "org.apache.derby:derbynet:$derbyVersion",
          postgres: "org.postgresql:postgresql:$postgresqlVersion",
          mysql_connector: "mysql:mysql-connector-java:$mysqlVersion",
          sqlite: "org.xerial:sqlite-jdbc:$sqliteVersion",
  ]
}

// Global transitive dependencies substitution rules
// See https://docs.gradle.org/current/userguide/dependency_management.html#dependency_substitution_rules
// See https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.DependencySubstitutions.html
allprojects {
  configurations.all {
    resolutionStrategy.dependencySubstitution.all { DependencySubstitution dep ->
      if( dep.requested instanceof ModuleComponentSelector ) {
        // Always resolve SLF4J to the same version
        if( dep.requested.group == 'org.slf4j' ) {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: slf4jVersion
        }
        // Always resolve ASM to the same version
        if( dep.requested.group == 'org.ow2.asm' ) {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: asmVersion
        }
        // Always resolve OSGi to the same version
        if( dep.requested.group == 'org.osgi' ) {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: osgiVersion
        }
        // Always resolve Jackson to the same version
        if( dep.requested.group.startsWith( 'com.fasterxml.jackson' ) && dep.requested.module != 'jackson-parent' ) {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: jacksonVersion
        }
        // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
        if( dep.requested.group == 'woodstox' && dep.requested.module == 'wstx-asl' ) {
          dep.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: dep.requested.version
        }
        // some bad citizens have SNAPSHOT parents ...
        if( dep.requested.module == 'commons-sandbox-parent' && dep.requested.version == '3-SNAPSHOT') {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: '3'
        }
        // GSON 2.3 POM is invalid, use 2.3.1 instead .. see https://github.com/google/gson/issues/588
        if( dep.requested.group == 'com.google.code.gson' && dep.requested.module == 'gson' && dep.requested.version == '2.3' ) {
          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: '2.3.1'
        }
        // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
        // Apache 2 licensed instead
        if( dep.requested.group == 'net.sourceforge.findbugs' && dep.requested.module == 'annotations' ) {
          dep.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
        }
      }
    }
  }
}
