/**
 * 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.
 */
dependencies {
        def tomcatVersion = '7.0.54'
        tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
               "org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}" // NOT tomcat-embed-logging-juli (http://stackoverflow.com/questions/23963049/classcircularityerror-java-util-logging-logrecord-running-gradle-webapp-with-ja)
        tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
            exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
        }
        tomcat "org.apache.tomcat:tomcat-dbcp:${tomcatVersion}"

    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")

    providedCompile(
//              [group: 'javax.servlet', name: 'servlet-api', version: '2.5'],
            )

    compile(
               // [group: 'ch.vorburger.mariaDB4j', name: 'mariaDB4j', version: '2.1.3'],

                [group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion],
                [group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: springBootVersion],
                [group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: springBootVersion],
				//[group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.0.0'],
                [group: 'org.springframework', name: 'spring-context-support', version: springVersion],
				
	       		[group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: springOauthVersion],

                [group: 'org.apache.openjpa', name:'openjpa-all', version:'2.4.1'],
                //[group: 'org.apache.openjpa', name:'openjpa-maven-plugin', version:'2.4.1'],
                //[group: 'javax.ws.rs', name: 'jsr311-api', version: '1.1.1'],
                [group: 'com.sun.jersey', name: 'jersey-core', version: jerseyVersion],
                [group: 'com.sun.jersey', name: 'jersey-servlet', version: jerseyVersion],
                [group: 'com.sun.jersey', name: 'jersey-server', version: jerseyVersion],
                [group: 'com.sun.jersey', name: 'jersey-json', version: jerseyVersion],
                [group: 'com.sun.jersey.contribs', name: 'jersey-spring', version: jerseyVersion],
                [group: 'com.sun.jersey.contribs', name: 'jersey-multipart', version: jerseyVersion],

                [group: 'com.squareup.retrofit', name: 'retrofit', version: '1.6.1'],
                [group: 'com.squareup.okhttp', name: 'okhttp', version: '2.0.0'],
                [group: 'com.squareup.okhttp', name: 'okhttp-urlconnection', version: '2.0.0'],


                [group: 'com.google.code.gson', name: 'gson', version: '2.2.4'],
                [group: 'com.google.guava', name: 'guava', version: '15.0'],

                [group: 'joda-time', name: 'joda-time', version: '2.4'],
                //[group: 'net.sourceforge.javacsv', name: 'javacsv', version: '2.0'],
                [group: 'org.apache.commons', name: 'commons-email', version: '1.3.3'],
                [group: 'org.apache.commons', name: 'commons-lang3', version: '3.3.2'],

                // no slf4j & logback here (anymore), as spring-boot-starter-logging already brings this now, better assembled (log4j-over-slf4j was originally forgotten here)

                //[group: 'mysql', name: 'mysql-connector-java', version: '5.1.27'],
                [group: 'org.drizzle.jdbc', name: 'drizzle-jdbc', version: '1.3'],
               // [group: 'org.apache.tomcat', name: 'tomcat-jdbc', version: tomcatVersion],


                [group: 'org.apache.poi',name: 'poi', version: '3.9'],
                [group: 'org.apache.poi',name: 'poi-ooxml', version: '3.9'],
                [group: 'org.apache.poi',name: 'poi-ooxml-schemas', version: '3.9'],

                [group: 'com.lowagie', name: 'itext', version: '2.1.7'],
                //[group: 'com.lowagie', name: 'itext-rtf', version: '2.1.7'],
                [group: 'org.mnode.ical4j', name: 'ical4j', version: '1.0.4'],
                [group: 'com.googlecode.flyway', name: 'flyway-core', version: '2.1.1'],
                [group: 'org.quartz-scheduler', name: 'quartz', version: '2.1.7'],
                [group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.80'],
                [group: 'net.sf.ehcache', name: 'ehcache', version: '2.7.2'],
                [group: 'com.github.spullara.mustache.java', name: 'compiler', version: '0.8.12'],
                [group: 'com.jayway.jsonpath', name: 'json-path', version: '0.9.1'],

                // Although fineract (at the time of writing) doesn't have any compile time dep. on this,
                // it's useful to have this for the Spring Boot TestRestTemplate http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-rest-templates-test-utility
                [group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.5'],
                // Once we've switched to Java 8 this dep can be removed.
                //[group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.0']
                [group: 'org.springframework', name:'spring-jms'],
                [group: 'org.apache.activemq', name: 'activemq-broker']

     )
     testCompile 'junit:junit:4.11',
                 'junit:junit-dep:4.11',
                 'org.mockito:mockito-core:1.9.5',
                 'com.jayway.restassured:rest-assured:2.3.3',
                 [group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: springBootVersion],
                 [group: 'com.mockrunner', name: 'mockrunner-jms', version: '1.0.6'],
                 [group: 'com.mockrunner', name: 'mockrunner-jdbc', version: '1.0.6']

}
