<?xml version="1.0" encoding="UTF-8"?>
<!--
  - Extends the default template to generate a Jira Spec Artifacts file and incidentally does some QA to ensure the IG meets HL7 International publication rules.
  -->
<project name="ProcessIg-HL7">
  <import file="ant.xml"/>
  <target name="onGenerate.jira.setup" depends="onGenerate.processIg">
    <property name="file.properties" value="${ig.template}/properties.txt"/>
    <property name="file.workgroups" value="${ig.root}/input-cache/workgroups.xml"/>
    <property name="file.packagelist" value="${ig.root}/package-list.json"/>
    <property name="file.packagelist.tmp" value="${ig.template}/onGenerate.jira.package-list.tmp.xml"/>
    <property name="file.packagelist.xml" value="${ig.template}/onGenerate.jira.package-list.xml"/>
    <property name="file.pubrequest" value="${ig.root}/publication-request.json"/>
    <property name="file.pubrequest.tmp" value="${ig.template}/onGenerate.jira.pubrequest.tmp.xml"/>
    <property name="file.pubrequest.xml" value="${ig.template}/onGenerate.jira.pubrequest.xml"/>
    <property name="file.jiraspec" value="${ig.root}/input-cache/jiraspec.xml"/>
    <property name="file.workingpackagelist" value="${ig.template}/onGenerate.jira.workingpackage-list.json"/>
    <property name="file.publish" value="${ig.root}/publication-request.json"/>
    <xslt in="${onGenerate.ig.dest}xml" out="${file.properties}" style="${ig.scripts}/onGenerate.genProperties.xslt"/>
    <loadproperties srcfile="${file.properties}"/>
    <get src="https://github.com/HL7/JIRA-Spec-Artifacts/raw/master/xml/_workgroups.xml" dest="${file.workgroups}" usetimestamp="true" ignoreerrors="true"/>
    <get src="https://github.com/HL7/JIRA-Spec-Artifacts/raw/master/xml/${jiraSpecFile}.xml" dest="${file.jiraspec}" usetimestamp="true" ignoreerrors="true"/>
    <condition property="doJira">
      <and>
        <available file="${file.workgroups}"/>
        <available file="${file.jiraspec}"/>
      </and>
    </condition>
    <condition property="packagelistExists">
      <available file="${file.packagelist}"/>
    </condition>
    <condition property="pubrequestExists">
      <available file="${file.pubrequest}"/>
    </condition>
    <condition property="online" value="yes">
      <available file="${file.workgroups}"/>
    </condition>
  </target>
  <target name="onGenerate.jira.packagelistcopy" depends="onGenerate.jira.setup" if="packagelistExists">
    <copy file="${file.packagelist}" tofile="${file.workingpackagelist}"/>
    <condition property="workingpackagelistExists">
      <available file="${file.workingpackagelist}"/>
    </condition>
  </target>
  <target name="onGenerate.jira.packagelistget" depends="onGenerate.jira.setup" unless="packagelistExists">
    <get src="${packagelisturl}" dest="${file.workingpackagelist}" ignoreerrors="true"/>
    <condition property="workingpackagelistExists">
      <available file="${file.workingpackagelist}"/>
    </condition>
  </target>
  <target name="onGenerate.jira.packagelistProcess" depends="onGenerate.jira.packagelistcopy,onGenerate.jira.packagelistget" if="workingpackagelistExists">
    <concat encoding="UTF-8" destfile="${file.packagelist.tmp}" ignoreempty="true">
      <fileset file="${file.workingpackagelist}"/>
      <filterchain>
        <tokenfilter>
          <replacestring from="&amp;" to="&amp;amp;"/>
        </tokenfilter>
        <tokenfilter>
          <replacestring from="&lt;" to="&amp;lt;"/>
          <replacestring from="&gt;" to="&amp;gt;"/>
        </tokenfilter>
      </filterchain>
      <header filtering="no">&lt;json&gt;</header>
      <footer filtering="no">&lt;/json&gt;</footer>
    </concat>
    <xslt in="${file.packagelist.tmp}" out="${file.packagelist.xml}" style="${ig.scripts}/onGenerate.package-list.xslt"/>
  </target>
  <target name="onGenerate.jira.packagelistSkip" depends="onGenerate.jira.packagelistcopy,onGenerate.jira.packagelistget" unless="workingpackagelistExists">
    <echo file="${file.packagelist.xml}" message=""/>
  </target>
  <target name="onGenerate.jira.pubrequestProcess" depends="onGenerate.jira.setup" if="pubrequestExists">
    <concat encoding="UTF-8" destfile="${file.pubrequest.tmp}">
      <fileset file="${file.pubrequest}"/>
      <filterchain>
        <tokenfilter>
          <replacestring from="&amp;" to="&amp;amp;"/>
        </tokenfilter>
      </filterchain>
      <header filtering="no">&lt;json&gt;</header>
      <footer filtering="no">&lt;/json&gt;</footer>
    </concat>
    <xslt in="${file.pubrequest.tmp}" out="${file.pubrequest.xml}" style="${ig.scripts}/onGenerate.pubrequest.xslt"/>
  </target>
  <target name="onGenerate.jira.pubrequestSkip" depends="onGenerate.jira.setup" unless="pubrequestExists">
    <echo file="${file.pubrequest.xml}" message=""/>
  </target>
  <target name="onGenerate.jira.generate" depends="onGenerate.jira.packagelistProcess,onGenerate.jira.packagelistSkip,onGenerate.jira.pubrequestProcess,onGenerate.jira.pubrequestSkip">
    <property name="file.jira.tmp" value="${ig.template}/onGenerate.jira.tmp.xml"/>
    <property name="file.jira.tmp2" value="${ig.template}/onGenerate.jira.tmp2.xml"/>
    <property name="file.jira.tmp3" value="${ig.template}/onGenerate.jira.xml"/>
    <property name="name.jira" value="jira-new.xml"/>
    <property name="file.jira" value="${ig.template}/${name.jira}"/>
    <property name="name.jiraspec.tmp" value="jira-current.xml"/>
    <property name="file.jiraspec.tmp" value="${ig.template}/${name.jiraspec.tmp}"/>
    <concat encoding="UTF-8" destfile="${file.jira.tmp}" fixlastline="yes">
      <fileset file="${file.workgroups}"/>
      <fileset file="${file.jiraspec}"/>
      <fileset file="${file.packagelist.xml}"/>
      <fileset file="${file.pubrequest.xml}"/>
      <fileset file="${onGenerate.ig.dest}xml"/>
      <header filtering="no">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;root&gt;</header>
      <footer filtering="no">&lt;/root&gt;</footer>
      <filterchain>
        <linecontains negate="true">
          <contains value="?xml version"/>
        </linecontains>
      </filterchain>
    </concat>
    <xslt in="${file.jira.tmp}" out="${file.jira.tmp2}" style="${ig.scripts}/onGenerate.process-pkg-list.xslt"/>
    <xslt in="${file.jira.tmp2}" out="${file.jira.tmp3}" style="${ig.scripts}/onGenerate.jira.xslt"/>
    <xslt in="${file.jira.tmp3}" out="${file.jira}" style="${ig.scripts}/onGenerate.normalize.xslt"/>
    <xslt in="${file.jiraspec}" out="${file.jiraspec.tmp}" style="${ig.scripts}/onGenerate.normalize.xslt" failOnError="false"/>
    <condition property="jiraMatch">
      <filesmatch file1="${file.jira}" file2="${file.jiraspec.tmp}" textfile="true"/>
    </condition>
    <copy file="${file.jira}" tofile="${ig.root}/${jiraSpecFile}.xml"/>
  </target>
  <target name="onGenerate.jira.check" depends="onGenerate.jira.generate" if="doJira" unless="jiraMatch">
    <echo file="${ig.template}/ongenerate-validation-jira.json" message='&#x0a;{"severity":"warning","code":"informational","details":{"text":"The jira specification file appears to be out of date with the versions, artifacts and pages currently defined in the IG.  A proposed revised file to be reviewed and, if appropriate, submitted as a pull request against the XML folder in https://github.com/HL7/JIRA-Spec-Artifacts.  To see the differences, perform a file compare on &apos;template/${name.jiraspec.tmp}&apos; (a normalized view of what is in Github) and &apos;template/${name.jira}&apos; (reflects current IG content)"}}&#x0a;'/>
  </target>   
  <target name="onGenerate.jira.skip-offline" depends="onGenerate.jira.setup" if="doJira" unless="online">
    <echo message="Skipped checking for revised jira spec file because running off-line"/>
  </target>
  <target name="onGenerate.jira.skip-missing" depends="onGenerate.jira.setup" if="online" unless="doJira">
    <echo file="${ig.template}/ongenerate-validation-jira.json" message='&#x0a;{"severity":"error","code":"informational","details":{"text":"There is no jira specification file defined with the expected name of ${jiraSpecFile} in the xml folder of the  https://github.com/HL7/Jira-Spec-Artifacts project.  This must exist before ballot or publication."}}'/>
  </target>
  <target name="onGenerate.jira" depends="onGenerate.jira.check,onGenerate.jira.skip-offline,onGenerate.jira.skip-missing" extensionOf="onGenerate.extend"/>
</project>
