<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements. See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership. The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License. You may obtain a copy of the License at
 http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied. See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
<project name="edgent.common"
  xmlns:jacoco="antlib:org.jacoco.ant"
  >
    <description>
        Common tasks.
    </description>


    <!-- Assumption is that build files are two levels deep -->
    <property name="edgent.dir" location="${basedir}/../.."/>

    <property name="edgent.tools" location="${edgent.dir}/tools"/>

    <property name="target.dir" location="${edgent.dir}/target"/>
    <property name="edgent.ext" location="${edgent.dir}/ext"/>

    <!-- Project specific extension jars -->
    <property name="project.ext" location="${basedir}/ext"/>

    <property name="target.java8.dir" location="${target.dir}/java8"/>
    <property name="target.java8.ext" location="${target.java8.dir}/ext"/>

    <property name="edgent.lib" location="${target.java8.dir}/lib"/>

   <!-- default to edgent lib  -->
   <condition property="lib"
       value="${target.java8.dir}/${component.path}/lib"
       else="${edgent.lib}">
       <isset property="component.path"/>
   </condition>
   <condition property="component.ext"
       value="${target.java8.dir}/${component.path}/ext">
       <isset property="component.path"/>
   </condition>

   <property name="edgent.analytics" location="${target.java8.dir}/analytics"/>
   <property name="edgent.apps" location="${target.java8.dir}/apps"/>
   <property name="edgent.connectors" location="${target.java8.dir}/connectors"/>
   <property name="edgent.console" location="${target.java8.dir}/console"/>
   <property name="edgent.utils" location="${target.java8.dir}/utils"/>
   <property name="edgent.samples" location="${target.java8.dir}/samples"/>

    <property name="src" location="src/main/java"/>
    <property name="src.excludes" value=""/>
    <property name="resources" location="src/main/resources"/>
    <property name="classes" location="classes"/>
    <property name="jarname" value="${ant.project.name}.jar"/>
    <property name="jar" location="${lib}/${jarname}"/>

    <property name="test.src" location="src/test/java"/>
    <property name="test.classes" location="test.classes"/>
    <property name="test.dir" location="unittests"/>

    <!-- compile.classpath ref is used by default for compilation
         and manifest class path generation. 
         When the full compile needs external jars that should
         not be in the manifest compile.classpath should just
         include local jars and a new reference id should be used
         that includes compile.classpath and the external jars.
         The property full.compile.classpath.id is set
         to the name of the reference (see android examples).
    -->

    <property name="full.compile.classpath.id" value="compile.classpath"/>

    <!-- Core Edgent ext class path -->
    <path id="edgent.ext.classpath">
      <pathelement location="${target.java8.ext}/google-gson-2.2.4/gson-2.2.4.jar" />
      <pathelement location="${target.java8.ext}/slf4j-1.7.12/slf4j-api-1.7.12.jar"/>
      <pathelement location="${target.java8.ext}/metrics-3.1.2/metrics-core-3.1.2.jar"/>
    </path>

    <!-- Edgent samples common class path -->
    <path id="edgent.samples.classpath">
      <pathelement location="${edgent.lib}/edgent.providers.development.jar"/>
      <pathelement location="${edgent.lib}/edgent.providers.direct.jar"/>
      <pathelement location="${target.java8.ext}/slf4j-1.7.12/slf4j-jdk14-1.7.12.jar"/>
    </path>

    <!-- Edgent unit tests common class path -->
    <path id="test.common.classpath">
      <pathelement location="${target.java8.ext}/slf4j-1.7.12/slf4j-jdk14-1.7.12.jar"/>
    </path>

    <!-- expects a property of component.path e.g. connectors/iotp -->
    <!-- only called by non-core components -->
    <macrodef name="setup.component">
	<sequential>
            <property name="component.target" location="${target.java8.dir}/${component.path}"/>
            <property name="component.lib" location="${component.target}/lib"/>
<!--            <property name="component.ext" location="${component.target}/ext"/> -->

            <mkdir dir="${component.lib}"/>
            <mkdir dir="${component.ext}"/>
	    <copy todir="${component.ext}" includeEmptyDirs="no" failonerror="false" quiet="true">
	       <fileset dir="${project.ext}"/>
	    </copy>
	</sequential>
    </macrodef>
    <target name="project.component" if="component.path">
       <setup.component/>
    </target>
	
	  <macrodef name="edgent.compile">
	      <sequential>
		    <javac debug="true" includeantruntime="no"
		       srcdir="${src}" 
		       excludes="${src.excludes}" 
		       destdir="${classes}"
		       classpathref="${full.compile.classpath.id}"/>
	      </sequential>
	  </macrodef>
	
	<target name="all" depends="jar,test.compile"/>

	<target name="init">
        <mkdir dir="${src}"/>
        <mkdir dir="${test.src}"/>
	    <mkdir dir="${classes}"/>
        <mkdir dir="${resources}"/>
	    <mkdir dir="${test.classes}"/>
	    <mkdir dir="${target.java8.dir}"/>
	    <mkdir dir="${target.java8.ext}"/>
	    <mkdir dir="${edgent.lib}"/>
	    <copy todir="${target.java8.ext}">
	       <fileset dir="${edgent.ext}"/>
	    </copy>
	  </target>
	
	  <target name="clean" >
	    <delete dir="${classes}"/>
	    <delete dir="${test.classes}"/>
	    <delete dir="${test.dir}"/>
	    <delete file="${jar}"/>
	  </target>

	  <target name="compile" depends="init,project.component">
	  	<edgent.compile/>
	  </target>
	
	  <target name="jar" depends="compile">
		<mkdir dir="${classes}/META-INF"/>
		<copy file="${edgent.dir}/LICENSE" tofile="${classes}/META-INF/LICENSE"/>
		<copy file="${edgent.dir}/NOTICE" tofile="${classes}/META-INF/NOTICE"/>
	    <manifestclasspath property="jar.classpath" jarfile="${jar}"
	        maxParentLevels="10">
	      <classpath refid="compile.classpath"/>
	    </manifestclasspath>
	    <jar destfile="${jar}">
	      <manifest>
                <attribute name="Implementation-Title" value="${ant.project.name}"/>
                <attribute name="Implementation-Version" value="${commithash}-${DSTAMP}-${TSTAMP}"/>
                <attribute name="Implementation-Vendor" value="Apache Software Foundation"/>
	        <attribute name="Class-Path" value="${jar.classpath}"/>
	      </manifest>
	      <fileset dir="${classes}"/>
          <fileset dir="${resources}"/>
	    </jar>	    
	  </target>
	
	  <target name="test.compile" depends="jar">
	    <javac debug="true" includeantruntime="yes"
	       srcdir="${test.src}" 
	       destdir="${test.classes}"
	       classpathref="test.compile.classpath"/>
	  </target>

	  <!-- Allow the pattern of tests to run be set
	       ant -Dtest.base.pattern='**/*TestManual.java test'
	  -->
	  <property name="test.base.pattern" value="**/*Test.java"/>

	  <target name="test" depends="test.compile,test.run"/>

	  <target name="test.run">
	     <mkdir dir="${test.dir}"/>
	     <tempfile property="test.run.dir" prefix="testrun" destDir="${test.dir}"/>
	     <mkdir dir="${test.run.dir}"/>
	   <jacoco:coverage enabled="yes" destfile="${test.run.dir}/jacoco.exec">
	     <junit fork="yes" dir="${test.run.dir}" printsummary="yes" showoutput="no"
	           haltonfailure="yes">
	       <classpath>
	         <path refid="test.classpath"/>
	       </classpath>
	       <sysproperty key="edgent.build.ci" value="${edgent.build.ci}"/>
	       <!-- Allow tests to know the root directory -->
	       <sysproperty key="edgent.test.root.dir" value="${edgent.dir}"/>
	       <assertions><enable/></assertions>
	       <formatter type="xml"/>
	       <!-- Only use the brief formatter for a continuous integration build" -->
	       <formatter type="brief" usefile="no" if="edgent.build.ci"/>
	       <batchtest todir="${test.run.dir}">
	          <fileset dir="${test.src}">
	             <include name="${test.base.pattern}"/>
	          </fileset>
	       </batchtest>
	     </junit>
	   </jacoco:coverage>
	   </target>
</project>
