<?xml version="1.0" encoding="UTF-8"?>
<!--
  	ANT
 
  	Copyright 2017 IS2T. All rights reserved.
	Modification and distribution is permitted under certain conditions.
  	IS2T PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-->
<project name="kernelAPIGenerator" default="launch">
	<fail unless="platform.dir"/>
	<property name="kernelAPIGenerator.activity.id" value="Kernel API Generator" />
	
	<import file="${platform.dir}/scripts/activity.xml"/>
	<import file="${platform.dir}/scripts/antToolsDefinition.xml"/>
	
	<path id="taskdef.path.id">
		<pathelement location="${platform.dir}/tools/kernelAPIGenerator.jar"/>
	</path>
	
	<target name="kernelAPIGenerator:complete">
		<complete.activity
			activity.id="${kernelAPIGeneratoractivity.id}"
		/>
	</target>

	<target name="kernelAPIGenerator:define-patterns:init" unless="kernel.api.generator.includes.patterns">
		<property name="kernel.api.generator.includes.patterns" value="**/*.class" />
	</target>

	<target name="kernelAPIGenerator:define-entrypoints" depends="kernelAPIGenerator:define-patterns:init">
		<path id="kernelAPIGenerator.classpath" path="${kernel.api.generator.classpath}" />
		<resources id="kernelAPIGenerator.entries" />
			
		<script language="javascript">	
			var resources = project.getReference('kernelAPIGenerator.entries');
			var includesPatterns = ""+project.getProperty('kernel.api.generator.includes.patterns');
			var excludesPatterns = ""+project.getProperty('kernel.api.generator.excludes.patterns');
			
			var classapth = project.getReference('kernelAPIGenerator.classpath');
			var classapthEntryIerator = classapth.iterator();
			while (classapthEntryIerator.hasNext()) {
				// Filter all classpath entry according to the includes and the excludes patterns. 
				var classfiles = project.createDataType('zipfileset');
				var patternSet = classfiles.createPatternSet();
				patternSet.setIncludes(includesPatterns);
				patternSet.setExcludes(excludesPatterns);
							
				var classpathEntryFile = classapthEntryIerator.next().getFile();
				if (classpathEntryFile.getName().endsWith(".jar")) {
					classfiles.setSrc(classpathEntryFile);
				} else {
					classfiles.setDir(classpathEntryFile);
				}
						
				var classfilesIterator = classfiles.iterator();
				while (classfilesIterator.hasNext()) {
					var classfileName = classfilesIterator.next().getName();
					if (classfileName.endsWith(".class")) {
						var resource = project.createDataType('string');
						var classfileNameWithoutClass = classfileName.substring(0,classfileName.lastIndexOf(".class"));
						resource.addText(classfileNameWithoutClass.replaceAll("/", ".").replaceAll("\\\\", "."));
						resources.add(resource);
					}
				}
			}
		</script>
		
		<pathconvert property="kernel.api.generator.entry.points" refid="kernelAPIGenerator.entries" pathsep=","/>
	</target>	
	
	
	<target name="kernelAPIGenerator" depends="kernelAPIGenerator:define-entrypoints">	
		<fail unless="kernel.api.generator.classpath" message="The kernel API Generator classpath is not set"/>
		<property name="kernel.api.generator.output.file" value="${output.dir}/kernel.api" />
		
		<property name="kernel.api.generator.output.file" value="${output.dir}/kernel.api" />
		
		<start.activity
			activity.id="${kernelAPIGenerator.activity.id}"
			message="${kernelAPIGenerator.activity.id}"
		/>
			
		<!-- Default values -->
		<java classname="com.is2t.tools.kernel.api.generator.KernelAPIGeneratorBatch" classpathref="taskdef.path.id">
			<arg line="-cp '${kernel.api.generator.classpath}'" />
			<arg line="-outputFile '${kernel.api.generator.output.file}'" />
			<arg line="-entryPoints '${kernel.api.generator.entry.points}'" />
		</java>
	</target>
	
	<target name="launch" depends="kernelAPIGenerator, kernelAPIGenerator:complete" />
</project>