/*
 * 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.0.4'
def bonecpVersion = '0.8.0.RELEASE'
def bouncyVersion = '1.52'
def commonsCodecVersion = '1.10'
def commonsDbcpVersion = '1.4' // Should be moved to commons-dbcp2
def commonsIoVersion = '2.4'
def commonsLangVersion = '2.6' // Should be moved to commons-lang3
def derbyVersion = '10.11.1.1'
def dnsJavaVersion = '2.1.7'
def ehcacheVersion = '2.10.0'
def elasticsearchVersion = '1.6.0'
def freemarkerVersion = '2.3.22'
def groovyVersion = '2.4.3'
def guavaVersion = '18.0'
def h2Version = '1.4.187'
def hazelcastVersion = '3.5'
def httpClientVersion = '4.2.2' // 4.3.4 exists
def jacksonVersion = '2.5.4'
def javascriptVersion = '1.7.7'
def javasqlgeneratorVersion = '0.3.2'
def jcloudsVersion = '1.9.0'
def jdbmVersion = '2.4'
def jdomVersion = '2.0.2'
def jedisVersion = '2.7.2'
def jettyVersion = '9.2.11.v20150529' // 9.3.x Tests fail!
def jgoodiesLooksVersion = '2.5.3'
def jodaMoneyVersion = '0.10.0'
def jodaTimeVersion = '2.8.1'
def jtaVersion = '1.1'
def leveldbVersion = '0.7'
def leveldbJniVersion = '1.8'
def liquibaseVersion = '3.4.0'
def log4jVersion = '1.2.17'
def logbackVersion = '1.1.3'
def mongodbVersion = '2.13.2' // 3.0.x Fails to compile!
def mysqlVersion = '5.1.35'
def orgJsonVersion = '20130213'
def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
def pdfboxVersion = '1.8.5'
def postgresqlVersion = '9.4-1201-jdbc41'
def prefuseVersion = '0.21'
def restletVersion = '2.0.15' // 2.2.1 Fails to compile!
def rdfVersion = '2.7.9'
def riakVersion = '1.4.4' // 2.0.x Fails to compile!
def scalaVersion = '2.11.6'
def servletVersion = '3.1.0'
def shiroVersion = '1.2.3'
def skedVersion = '2.1'
def sleepycatVersion = '5.0.73'
def slf4jVersion = '1.7.12'
def solrVersion = "1.4.1" // 4.8.1 Fails to compile!
def springVersion = '4.1.7.RELEASE'
def spymemcachedVersion = '2.12.0'
def sqliteVersion = '3.8.10.1'
def velocityVersion = '1.7'
def voldemortVersion = '1.3.0'
def wicketVersion = '1.5.8' // 6.15.0 Samples fails to compile!
def wicketStatelessVersion = '1.5.0'
def woodstoxVersion = '4.4.1'
def yammerMetricsVersion = '2.2.0'

def antVersion = '1.9.5'
def awaitilityVersion = '1.6.3'
def easyMockVersion = '3.3.1'
def jmockVersion = '2.8.1'
def junitVersion = '4.11'
def mockitoVersion = '1.10.19'
def testNgVersion = '6.9.4'
def restAssuredVersion= '2.4.1'
def xmlunitVersion = '1.6'

// 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",
          log4j: 'log4j:log4j:' + log4jVersion,
          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",
          jodamoney: "org.joda:joda-money:$jodaMoneyVersion",
          jodatime: "joda-time:joda-time:$jodaTimeVersion",
          ehcache: "net.sf.ehcache:ehcache:$ehcacheVersion",
          elasticsearch: "org.elasticsearch:elasticsearch:$elasticsearchVersion",
          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",
          voldemort: "org.immunogenomics.gl.voldemort:voldemort:$voldemortVersion",
          guava: "com.google.guava:guava:$guavaVersion",
          sleepycat: "com.sleepycat:je:$sleepycatVersion",
          jdom: "org.jdom:jdom:$jdomVersion",
          velocity: "org.apache.velocity:velocity:$velocityVersion",
          commons_codec: "commons-codec:commons-codec:$commonsCodecVersion",
          commons_dbcp: "commons-dbcp:commons-dbcp:$commonsDbcpVersion",
          commons_io: "commons-io:commons-io:$commonsIoVersion",
          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",
          jmock: "org.jmock:jmock:$jmockVersion",
          mockito: "org.mockito:mockito-core:$mockitoVersion",
          rest_assured: "com.jayway.restassured:rest-assured:$restAssuredVersion",
          testng: "org.testng:testng:$testNgVersion",
          xmlunit: "xmlunit:xmlunit:$xmlunitVersion",
          
          // 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 resolution rules
// See https://docs.gradle.org/current/userguide/dependency_management.html#sec:dependency_resolve_rules
// See https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html
allprojects {
  configurations.all {
    resolutionStrategy {
      dependencySubstitution {
        eachModule { ModuleDependencySubstitution details ->
          // Always resolve SLF4J to the same version
          if( details.requested.group == 'org.slf4j' ) {
            details.useTarget group: details.requested.group, name: details.requested.module, version: slf4jVersion
          }
          // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
          if( details.requested.group == 'woodstox' && details.requested.module == 'wstx-asl' ) {
            details.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: details.requested.version
          }
          // some bad citizens have SNAPSHOT parents ...
          if( details.requested.module == 'commons-sandbox-parent' && details.requested.version == '3-SNAPSHOT') {
            details.useTarget group: details.requested.group, name: details.requested.module, version: '3'
          }
          // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
          // Apache 2 licensed instead
          if( details.requested.group == 'net.sourceforge.findbugs' && details.requested.module == 'annotations' ) {
            details.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
          }
        }
      }
    }
  }
}
