/********************************************************************************
 * 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.0'

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-text:1.6'

	// 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 "org.elasticsearch.client:elasticsearch-rest-client:6.4.1"
	testCompile "org.testcontainers:elasticsearch:1.12.5"
}

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
