/********************************************************************************
 * 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.0.0M5-ATFX-SNAPSHOT'

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 '-fallTIE', '-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', '-fallTIE', '-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 sourcesJar(type: Jar, dependsOn: classes) {
	classifier = 'sources'
	from sourceSets.main.allSource
}

artifacts {
	archives sourcesJar
}

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

clean.dependsOn deleteGenerated
