/********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

description = 'MDM API - ODSAdapter'
group = 'org.eclipse.mdm'
version = '5.1.0M1'

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
apply plugin: 'com.google.protobuf'

buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.1'
	}
}

repositories {
	jcenter()
	mavenLocal()
	mavenCentral()
}

sourceSets {

	generated {
		java {
			srcDir 'src/gen/java'
			srcDir 'build/generated/source/proto/main/java'
		}
	}

	main {
		compileClasspath += generated.output
		runtimeClasspath += generated.output
	}

	test {
		compileClasspath += generated.output
		runtimeClasspath += generated.output
	}
}

configurations.all {
	exclude group: 'javax.inject', module: 'javax.inject'
	exclude group: 'commons-logging', module: 'commons-logging'
	
	// exclude guava dependencies
	exclude group: 'com.google.code.findbugs', module: 'jsr305'
	exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
	exclude group: 'com.google.j2objc', module: 'j2objc-annotations'
	exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
	exclude group: 'org.checkerframework', module: 'checker-compat-qual'
}

dependencies {
	compileOnly 'javax:javaee-api:7.0'

	// logging
	compile 'org.slf4j:slf4j-api:1.7.25'
	// httpclient uses commons-logging
	compile 'org.slf4j:jcl-over-slf4j:1.7.25'

	// MDM5 API
	compile "org.eclipse.mdm:org.eclipse.mdm.api.base:${version}"
	compile "org.eclipse.mdm:org.eclipse.mdm.api.default:${version}"

	// compile CORBA idl using JDK tools
	generatedCompile files(System.getenv('JAVA_HOME') + '/lib/tools.jar')
    generatedCompile files('src/main/idl/')
    
	// Peak notification service
	compile 'com.google.protobuf:protobuf-java:3.2.0'
	compile 'com.google.protobuf:protobuf-java-util:3.2.0'
	compile 'com.google.guava:guava:25.0-jre'
	compile 'org.glassfish.jersey.core:jersey-client:2.23.2'
	compile 'org.glassfish.jersey.media:jersey-media-sse:2.23.2'
	generatedCompile 'com.google.protobuf:protobuf-java:3.2.0'

	// querying es
	compile 'commons-httpclient:commons-httpclient:3.1'
	compile 'org.apache.commons:commons-lang3:3.4'

	// testing
	testCompile 'junit:junit:4.12'
	testRuntime 'org.slf4j:slf4j-simple:1.7.25'
	testCompile 'org.mockito:mockito-core:2.13.0'
	testCompile 'org.assertj:assertj-core:3.6.2'
	testCompile(group: 'org.elasticsearch', name: 'elasticsearch', version: '2.3.4')
	testCompile(group: 'org.elasticsearch', name: 'elasticsearch', version: '2.3.4', classifier: 'tests')
}

test {
	if(project.hasProperty('host')) {
		systemProperty 'host', project.property('host')
	} else {
		systemProperty 'host', '<host>'
	}

	if(project.hasProperty('port')) {
		systemProperty 'port', project.property('port')
	} else {
		systemProperty 'port', '2809'
	}
	
	if(project.hasProperty('service')) {
		systemProperty 'service', project.property('service')
	} else {
		systemProperty 'service', '<service>'
	}

	jvmArgs '-Dorg.slf4j.simpleLogger.defaultLogLevel=debug'
}

protobuf {
	protoc {
		artifact = 'com.google.protobuf:protoc:3.2.0'
	}
}


task compileIDL(type: JavaExec) {
	classpath = configurations.generatedCompile

	main = 'com.sun.tools.corba.se.idl.toJavaPortable.Compile'

	// add 'fallTIE' if <Type>POA & <Type>POATie have to be generated   
	args '-td', 'src/gen/java/', 'src/main/idl/ods530.idl'

	outputs.dir("src/gen/java")
}

task compileNotificationServiceIDL(type: JavaExec) {
	classpath = configurations.generatedCompile

	main = 'com.sun.tools.corba.se.idl.toJavaPortable.Compile'

	args '-emitAll', '-fall', '-i', 'src/main/idl/', '-td', 'src/gen/java/', 'src/main/idl/CosNotifyChannelAdmin.idl'

	outputs.dir("src/gen/java")
	outputs.upToDateWhen { false }
}

compileGeneratedJava {
	inputs.dir("build/generated/source")
	inputs.dir("src/gen/java")
}

// generate classes from idl and compile them
compileGeneratedJava.dependsOn compileIDL
compileGeneratedJava.dependsOn compileNotificationServiceIDL

compileJava.dependsOn compileGeneratedJava

jar {
	from sourceSets.generated.output
	dependsOn generatedClasses

	metaInf { from 'NOTICE.txt' }
	metaInf { from 'LICENSE.txt' }
}

task deleteGenerated(type: Delete) {
	delete 'src/gen'
	delete 'build'
}

clean.dependsOn deleteGenerated
