<project name="ObsFrameworkMetaComponents" default="GenerateAll" basedir="..">
    <description>
        Run the generator meta-components of the OBS Framework. To each generator
        meta-component, a target in this build file is associated. The generators 
        are used to generate sample classes that are incorporated in the OBS 
        Framework as examples of the components that can be generated by the meta-components.
    </description>
    
  <!-- set global properties for this build -->
  <property name="GenHomeDir" location="src/xsl"/>
  <property name="GenInpDir" location="src/xml"/>
  <property name="GenTargetDir" location="src/cpp"/>

  <target name="init">
    <tstamp/>
  </target>

  <target name="GenerateAll">
    <antcall target="genParDB"/>
    <antcall target="genDP"/>
    <antcall target="genMatlabWR"/>
    <antcall target="genDynFactory"/>
    <antcall target="genStkContainer"/>
  </target>

  <target name="genParDB">
    <antcall target="genParameterDatabase">
      <param name="Name" value="SampleR1Database"/>
    </antcall>
    <antcall target="genParameterDatabase">
      <param name="Name" value="SampleR2Database"/>
    </antcall>
    <antcall target="genParameterDatabase">
      <param name="Name" value="SampleR3Database"/>
    </antcall>
  </target>

  <target name="genDP">
    <antcall target="genDataPool">
      <param name="Name" value="SampleFullDataPool"/>
    </antcall>
    <antcall target="genDataPool">
      <param name="Name" value="SampleMonitoredDataPool"/>
    </antcall>
  </target>

  <target name="genMatlabWR">
    <antcall target="genMatlabWrapper">
      <param name="Name" value="MatlabCopyPID"/>
    </antcall>
    <antcall target="genMatlabWrapper">
      <param name="Name" value="MatlabPointerPID"/>
    </antcall>
    <antcall target="genMatlabWrapper">
      <param name="Name" value="MatlabDataItemPID"/>
    </antcall>
    <antcall target="genMatlabWrapper">
      <param name="Name" value="MatlabDataPoolPID"/>
    </antcall>
  </target>

  <target name="genDynFactory">
    <antcall target="genDynamicFactory">
      <param name="InpName" value="SampleTelecommands"/>
      <param name="Name" value="TelecommandFactoryLog"/>
    </antcall>
    <antcall target="genDynamicFactory">
      <param name="InpName" value="SampleTelemetryPackets"/>
      <param name="Name" value="TelemetryPacketFactoryLog"/>
    </antcall>
    <antcall target="genDynamicFactory">
      <param name="InpName" value="SampleManoeuvres"/>
      <param name="Name" value="ManoeuvreFactoryLog"/>
    </antcall>
  </target>

  <target name="genStkContainer">
    <antcall target="genStackCont">
      <param name="Name" value="IntStack"/>
    </antcall>
    <antcall target="genStackCont">
      <param name="Name" value="RootObjectStack"/>
    </antcall>
  </target>


  <target name="genParameterDatabase" description="run the parameter database generator meta-component">
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_header.txt" 
                                                style="${GenHomeDir}/GenerateParameterDatabaseHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_body.txt" 
                                                style="${GenHomeDir}/GenerateParameterDatabaseBody.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/Data/${Name}_include.txt" 
                                                style="${GenHomeDir}/GenerateParameterDatabaseInclude.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_testheader.txt" 
                                                style="${GenHomeDir}/GenerateParameterDatabaseTestCaseHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_testbody.txt" 
                                                style="${GenHomeDir}/GenerateParameterDatabaseTestCaseBody.xsl"/>
  </target>

  <target name="genDataPool" description="run the data pool generator meta-component">
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_header.txt" 
                                                style="${GenHomeDir}/GenerateDataPoolHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_body.txt" 
                                                style="${GenHomeDir}/GenerateDataPoolBody.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_include.txt" 
                                                style="${GenHomeDir}/GenerateDataPoolInclude.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_headertest.txt" 
                                                style="${GenHomeDir}/GenerateDataPoolTestCaseHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_bodytest.txt"
                                                style="${GenHomeDir}/GenerateDataPoolTestCaseBody.xsl"/>
  </target>

  <target name="genMatlabWrapper" description="run the matlab wrapper generator meta-component">
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_header.txt" 
                                                style="${GenHomeDir}/GenerateMatlabWrapperHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/${Name}_body.txt" 
                                                style="${GenHomeDir}/GenerateMatlabWrapperBody.xsl"/>
  </target>

  <target name="genDynamicFactory" description="run the dynamic factory generator meta-component">
    <xslt force="true" in="${GenInpDir}/${InpName}.xml" out="${GenTargetDir}/${Name}_header.txt" 
                                                style="${GenHomeDir}/GenerateDynamicFactoryHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${InpName}.xml" out="${GenTargetDir}/${Name}_body.txt" 
                                                style="${GenHomeDir}/GenerateDynamicFactoryBody.xsl"/>
  </target>

  <target name="genStackCont" description="run the stack container generator meta-component">
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/System/CC_${Name}.h" 
                                                style="${GenHomeDir}/GenerateStackContainerHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/System/CC_${Name}.cpp" 
                                                style="${GenHomeDir}/GenerateStackContainerBody.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/RegressionTest/TestCase${Name}_1.h" 
                                                style="${GenHomeDir}/GenerateStackContainerTestCaseHeader.xsl"/>
    <xslt force="true" in="${GenInpDir}/${Name}.xml" out="${GenTargetDir}/RegressionTest/TestCase${Name}_1.cpp" 
                                                style="${GenHomeDir}/GenerateStackContainerTestCaseBody.xsl"/>
  </target>

  <target name="delete" description="delete all files generated by the generator meta-components" >
    <delete>
      <fileset dir="src/cpp/">
        <include name="Data/DC_Sample*Database*.*"/>
        <include name="Data/DC_Sample*DataPool*.*"/>
        <include name="Data/DC_Matlab*.*"/>
        <include name="System/CC_*Stack.*"/>
        <include name="Telemetry/CC_TelemetryPacketFactory.*"/>
        <include name="Telecommand/CC_TelecommandFactory.*"/>
        <include name="Manoeuvre/CC_ManoeuvreFactory.*"/>
        <include name="*Log*.txt"/>
        <include name="*_header.txt"/>
        <include name="*_body.txt"/>
        <include name="*_include.txt"/>
        <include name="*_headertest.txt"/>
        <include name="*_bodytest.txt"/>
      </fileset>
    </delete>
  </target>

</project>
