/********************************************************************************
 * 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
 *
 ********************************************************************************/
 

import org.apache.tools.ant.taskdefs.condition.Os
import org.apache.tools.ant.filters.ConcatFilter

plugins {
	id "com.moowork.node" version "1.3.1"
}

description = 'MDM Web Application'

System.setProperty('file.encoding', 'UTF-8')

task map_tslint(type: Copy) {
	File tsLintFile = file("${project.buildDir}/node/coverage/tslint_out.json")
	File mappedTsLintFile = file("${project.buildDir}/node/coverage/tslint_out_mapped.json")

	if (tsLintFile.exists()) {
		String contents = tsLintFile.getText('UTF-8')
		contents = contents.replaceAll( 'src/app', 'src/main/webapp/src/app' )
		mappedTsLintFile.write(contents, 'UTF-8')
	}
}

sonarqube {
	properties {
		property "sonar.sources", "src/main/webapp/src,src/main/java"
		property "sonar.exclusions", "src/main/webapp/node_modules/**, src/main/webapp/coverage/**, src/main/webapp/dist/**,**/*.spec.ts, **/*.js"
		property "sonar.tests", "src/main/webapp/src"
		property "sonar.test.inclusions", "**/*.spec.ts"

		property "sonar.ts.tslint.configPath", "src/main/webapp"
		property "sonar.ts.tslint.projectPath", "src/main/webapp"
		property "sonar.ts.tslint.outputPath", "${project.buildDir}/node/coverage/tslint_out_mapped.json"
		property "sonar.ts.coverage.lcovReportpath", "${project.buildDir}/node/coverage/lcov.info"
	}
}

dependencies {
	runtime 'org.glassfish.jersey.containers:jersey-container-servlet:2.23.2'
	compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.2'

	compile project(':org.eclipse.mdm.businessobjects')
	compile project(':org.eclipse.mdm.filerelease')
	compile project(':org.eclipse.mdm.property')
	compile project(':org.eclipse.mdm.freetextindexer')
	compile project(':org.eclipse.mdm.preferences')
}

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

task copy_websources(type: Copy) {

	from('./src/main/webapp') {
		exclude 'dist'
		exclude 'node_modules'
		exclude 'NOTICE.html'
	}

	into "${project.buildDir}/node"
}

task copyNoticeFile() {
  file("${project.buildDir}/node/src/app/").mkdirs()
  def html = file("${project.buildDir}/node/src/app/NOTICE.html")
  html.text = '<pre>' + file('../NOTICE.txt').text + '</pre>'
}


node {
	version = '10.14.0'
	npmVersion = '6.4.1'
	distBaseUrl = 'https://nodejs.org/dist'
	download = true
	workDir = file("${project.buildDir}/node/nodejs")
	npmWorkDir = file("${project.buildDir}/node")
	nodeModulesDir = file("${project.buildDir}/node")
	if (!nodeModulesDir.isDirectory()) {
		nodeModulesDir.mkdirs()
	}
}

npm_install { args = ["${project.buildDir}"] }

task runBuild(type: NpmTask) {
	args = ['run', 'ci_build']
	inputs.dir 'src'
	outputs.dir 'build'
}

task copy_loginsites(type: Copy) {
	from 	"${project.buildDir}/node/src/login.jsp",
			"${project.buildDir}/node/src/login.css",
			"${project.buildDir}/node/src/error.jsp"

	into	 "${project.buildDir}/node/dist"
}

task copyFilesForRunningWithoutNpm(type: Copy){
	from	"${project.buildDir}/node/src/index.html"
	into	"${project.buildDir}/node/dist"
}

if (hasProperty('skipNode')) {
  compileJava.dependsOn(copy_loginsites)
} else {
	compileJava.dependsOn(copy_loginsites)
	map_tslint.dependsOn(runBuild)
	copy_loginsites.dependsOn(runBuild)
	runBuild.dependsOn(npmInstall)
	npmInstall.dependsOn(copy_websources)
	npmInstall.dependsOn(copyNoticeFile)
	copy_websources.dependsOn(npmSetup)
	npmSetup.dependsOn(nodeSetup)
}