<?xml version="1.0"?>
<project name="Dekaf Post-Build Operations">

  <property name="ver">2.0.0-SNAPSHOT</property>
  <property name="test-db">h2</property>

  <property name="coverage-file-name">${teamcity.buildType.id}</property>


  <target name="unpack-fw">
    <mkdir dir="bin"/>
    <unzip src="dist/dekaf-fw.zip" dest="bin" overwrite="true"/>
  </target>

  <target name="unpack-single">
    <mkdir dir="bin"/>
    <unzip src="dist/dekaf-single-templates.zip" dest="bin" overwrite="false"/>
  </target>

  <target name="unpack-tests">
    <mkdir dir="bin"/>
    <unzip src="dist/dekaf-tests.zip" dest="bin" overwrite="false"/>
  </target>

  <target name="unpack-tools">
    <mkdir dir="tools"/>
    <unzip src="dist/dekaf-tools.zip" dest="tools" overwrite="false"/>
  </target>


  <target name='unit-test' depends="unpack-fw,unpack-tests,unpack-tools"
          description="Run unit tests">
    <mkdir dir="coverage"/>
    <java jar='bin/integration-tests.jar' fork='true' failonerror='true'>
      <jvmarg value="-javaagent:${basedir}/tools/jacoco/lib/jacocoagent.jar=destfile=coverage/jacoco-unit.dat,includes=org.jetbrains.dekaf.*,excludes=*Test"/>
      <jvmarg value='-ea'/>
      <arg value="unit"/>
    </java>
  </target>


  <target name='integration-test' depends="unpack-fw,unpack-tests,unpack-tools"
          description="Run DB-integration tests">
    <mkdir dir="coverage"/>
    <java jar='bin/integration-tests.jar' fork='true' failonerror='true'>
      <syspropertyset>
        <propertyref prefix="test-db-"/>
      </syspropertyset>
      <jvmarg value="-javaagent:${basedir}/tools/jacoco/lib/jacocoagent.jar=destfile=coverage/jacoco-${coverage-file-name}.dat,includes=org.jetbrains.dekaf.*,excludes=*Test"/>
      <jvmarg value='-ea'/>
      <jvmarg value='-Dtest-db=${test-db}'/>
    </java>
  </target>





  <target name="combine-jars" depends="unpack-fw,unpack-single"
          description="Combine Core and RDBMS-specific jars into single jars">
    <mkdir dir="temp/combined-jars"/>

    <antcall target="combine-jar">
      <param name="nr" value="1"/>
      <param name="infix" value=""/>
      <param name="suffix" value=""/>
      <param name="excludeJars" value="*-test-*"/>
    </antcall>
    <antcall target="combine-jar">
      <param name="nr" value="2"/>
      <param name="infix" value=""/>
      <param name="suffix" value="-sources"/>
      <param name="excludeJars" value="*-test-*"/>
    </antcall>
    <antcall target="combine-jar">
      <param name="nr" value="3"/>
      <param name="infix" value="test-db-"/>
      <param name="suffix" value=""/>
      <param name="excludeJars" value="Z"/>
    </antcall>
    <antcall target="combine-jar">
      <param name="nr" value="4"/>
      <param name="infix" value="test-db-"/>
      <param name="suffix" value="-sources"/>
      <param name="excludeJars" value="Z"/>
    </antcall>

    <replace file="dist/dekaf-single.pom" token="2.0.0-SNAPSHOT" value="${ver}"/>
    <replace file="dist/dekaf-single-test-db.pom" token="2.0.0-SNAPSHOT" value="${ver}"/>

    <move file="dist/dekaf-single.pom" tofile="temp/combined-jars/dekaf-single-${ver}.pom"/>
    <move file="dist/dekaf-single-test-db.pom" tofile="temp/combined-jars/dekaf-single-test-db-${ver}.pom"/>

    <zip basedir="temp/combined-jars" destfile="dist/dekaf-single.zip" compress="false"/>
  </target>


  <target name="combine-jar">
    <delete dir="temp/content-${nr}"/>
    <mkdir dir="temp/content-${nr}"/>

    <unjar src="bin/dekaf-single-${infix}${ver}${suffix}.jar" dest="temp/content-${nr}"/>

    <unjar dest="temp/content-${nr}" overwrite="false">
      <fileset dir="bin">
        <include name="dekaf-*-${infix}${ver}${suffix}.jar"/>
        <exclude name="dekaf-single*"/>
        <exclude name="${excludeJars}"/>
      </fileset>
      <patternset>
        <exclude name="META-INF/services/*"/>
      </patternset>
    </unjar>

    <jar basedir="temp/content-${nr}"
         destfile="temp/combined-jars/dekaf-single-${infix}${ver}${suffix}.jar"
         manifest="temp/content-${nr}/META-INF/MANIFEST.MF"
    />
  </target>


  <target name="clean-temp"
          description="Cleans the temporary directory">
    <delete dir="temp"/>
  </target>


  <target name="clean" depends="clean-temp"
          description="Cleans unpacked jars and temporary files">
    <delete dir="bin"/>
    <delete dir="coverage"/>
    <delete dir="sources"/>
  </target>


</project>