<?xml version="1.0"?>
<!DOCTYPE project [
       <!ENTITY properties SYSTEM 'file:./properties.xml'>
       <!ENTITY classpaths SYSTEM 'file:./classpaths.xml'>
  ]>
<project name="build_ejb" basedir="." default="dist">

  <description>
This build file compiles and packs the required classes and descriptors
for all EJBs. The "pack" target is invoked with the following parameters

- ejb.name = Name of the Ejb

- ejb.subpath = Path, from the root of the java sources, where the principal
              ejb java sources are located. In instant bank project this
              could be com/instantbank/${ejb.name} or
              com/instantbank/component/${ejb.name}
- ejb.dist.dir = directory where the corresponding ejb.jar will be placed.  
- extra.ejbc20.classpath = Classpath used by the weblogic.ejbc20 class when
              run in order to generate the extra classes required by weblogic.
- patternset = Patternset describing the classes/javasources required for the
  construction of the ejb.jar. For each ejb.jar there are two related patternsets:
   - ${patternset}.ejb.classes : The set of classes that must be packed inside 
     the ejb.jar
   - ${patternset}.ejb.javasources: The set of java sources corresponding to the
     ejb's classes.             

All ejbs in collections share the same couple of patternsets.
They are very different from each other in letters and servicing

</description>
  &properties;
  &classpaths;
  
  
  <!-- extra.ejbc20.classpath used for letters and servicing ejbs -->
  <path id="letters.servicing.ejbc20.classpath">
    <pathelement location="${weblogic.jar}"/>
    <pathelement location="${ftp.jar}"/>
  </path>
  
  <!-- extra.ejbc20.classpath used for a few ejbs in collections -->
  <path id="basic.collections.ejbc20.classpath">
    <pathelement location="${security_realm.jar}"/>
    <pathelement location="${xsu12.jar}"/>
    <pathelement location="${xmlparserv2.jar}"/>
    <pathelement location="${weblogic.jar}"/>
  </path>
  
  <!-- extra.ejbc20.classpath used for most of the ejbs in collections -->
  <path id="full.collections.ejbc20.classpath">
    <path refid="basic.collections.ejbc20.classpath"/>
    <pathelement location="${util.jar}"/>
  </path>
  
  <!-- extra.ejbc20.classpath used for servicing-jar -->
  <path id="security.collections.ejbc20.classpath">
    <pathelement location="${weblogic.jar}"/>
    <pathelement location="${xsu12.jar}"/>
    <pathelement location="${xmlparserv2.jar}"/>
    <pathelement location="${util.jar}"/>
  </path>
  
  <!-- ========================================================== -->
  <!-- Pattersets corresponding to classes for the different ejbs -->
  <!-- ========================================================== -->
  
  <!-- common patternsets -->
  <patternset id="common.collections.ejb.classes">
    <include name="${ejb.subpath}/**"/>
  </patternset>

  <patternset id="common.collections.ejb.javasources">
    <include name="${ejb.subpath}/**/*.java"/>
  </patternset>

  <patternset id="common.ejb.classes">
    <include name="${ejb.subpath}/**"/>
    <include name="**/common/utilcomponents/**"/>
  </patternset>

  <patternset id="common.ejb.javasources">
    <include name="${ejb.subpath}/**/*.java"/>
    <include name="**/common/utilcomponents/**/*.java"/>
  </patternset>

  <patternset id="lettertemplate.common.classes">
    <include name="**/lettertemplate/ejb/**"/>
    <include name="**/lettertemplate/util/**"/>
  </patternset>

  <patternset id="lettertemplate.common.javasources">
    <include name="**/lettertemplate/ejb/**/*.java"/>
    <include name="**/lettertemplate/util/**/*.java"/>
  </patternset>

   <!--      
   #section_build_ejb1() 
   -->

<!-- ================================ -->
<!-- patternsets for Collections ejbs     -->
<!-- ================================ -->
  <!-- patternsets including ach classes.jar -->
  <patternset id="collections.with.ach.ejb.classes">
    <patternset refid="common.collections.ejb.classes"/>
    <include name="${base.package}/collections/ach/"/>
  </patternset>

  <patternset id="collections.with.ach.ejb.javasources">
    <patternset refid="common.collections.ejb.javasources"/>
    <include name="${base.package}/collections/ach/*.java"/>
  </patternset>

<!-- ================================ -->
<!-- patternsets for Letters ejbs     -->
<!-- ================================ -->
  <!-- patternsets for job_ejb.jar -->
  <patternset id="job.ejb.classes">
    <patternset refid="common.ejb.classes"/>
  </patternset>

  <patternset id="job.ejb.javasources">
    <patternset refid="common.ejb.javasources"/>
  </patternset>
  
  <!-- patternsets for lettersftpmdb_ejb.jar -->
  <patternset id="lettersftpmdb.ejb.classes">
    <patternset refid="common.ejb.classes"/>
    <patternset refid="lettertemplate.common.classes"/>
  </patternset>

  <patternset id="lettersftpmdb.ejb.javasources">
    <patternset refid="common.ejb.javasources"/>
    <patternset refid="lettertemplate.common.javasources"/>
  </patternset>
  
  <!-- patternsets for lettersjobmdb_ejb.jar -->
  <patternset id="lettersjobmdb.ejb.classes">
    <patternset refid="common.ejb.classes"/>
    <patternset refid="lettertemplate.common.classes"/>
    <include name="**/job/ejb/**"/>
    <include name="**/job/util/**"/>
    <include name="**/job/model/JobModel.class"/>
    <include name="**/editor/web/TemplateTransformer.class"/>
  </patternset>

  <patternset id="lettersjobmdb.ejb.javasources">
    <patternset refid="common.ejb.javasources"/>
    <patternset refid="lettertemplate.common.javasources"/>
    <include name="**/job/ejb/**/*.java"/>
    <include name="**/job/util/**/*.java"/>
    <include name="**/job/model/JobModel.java"/>
    <include name="**/editor/web/TemplateTransformer.java"/>
  </patternset>
  
  <!-- patternsets for lettertemplate_ejb.jar -->
  <patternset id="lettertemplate.ejb.classes">
    <patternset refid="common.ejb.classes"/>
    <include name="**/editor/web/TemplateTransformer.class"/>
    <include name="**/editor/util/LetterOp.class"/>
    <include name="**/lettertemplate/control/LetterTemplateEventException.class"/>
    <include name="**/component/job/util/Field.class"/>
  </patternset>

  <patternset id="lettertemplate.ejb.javasources">
    <patternset refid="common.ejb.javasources"/>
    <include name="**/editor/web/TemplateTransformer.java"/>
    <include name="**/editor/util/LetterOp.java"/>
    <include name="**/lettertemplate/control/LetterTemplateEventException.java"/>
    <include name="**/component/job/util/Field.java"/>
  </patternset>

   <!--      
   #section_build_ejb2() 
   -->
   
   
  
  <!-- Common patternsets for controllers -->
  <patternset id="common.controller.ejb.classes">
    <include name="${ejb.subpath}/*.class"/>
    <include name="${ejb.subpath}/ejb/**/*.class"/>
    <include name="${ejb.subpath}/event/*.class"/>
    <include name="${ejb.subpath}/util/*.class"/>
    <include name="**/common/uiutils/ByteArrayFromFile.class"/>
    <include name="**/common/utilcomponents/**"/>
  </patternset>

  <patternset id="common.controller.ejb.javasources">
    <include name="${ejb.subpath}/*.java"/>
    <include name="${ejb.subpath}/ejb/**/*.java"/>
    <include name="${ejb.subpath}/event/*.java"/>
    <include name="${ejb.subpath}/util/*.java"/>
    <include name="**/common/uiutils/ByteArrayFromFile.java"/>
    <include name="**/common/utilcomponents/**/*.java"/>
  </patternset>
  
  <!-- Patternsets for lettertemplateController_ejb.jar -->
  <patternset id="lettertemplateController.ejb.classes">
    <patternset refid="common.controller.ejb.classes"/>
    <include name="${ejb.subpath}/web/handlers/MacBinaryDecoderOutputStream.class"/>
    <include name="${ejb.subpath}/web/handlers/MultipartInputStreamHandler.class"/>
    <include name="${ejb.subpath}/web/handlers/MultipartRequest.class"/>
    <include name="${ejb.subpath}/web/handlers/UploadedFile.class"/>
    <include name="**/component/**/LetterTemplate.class"/>
    <include name="**/component/**/LetterTemplateHome.class"/>
    <include name="**/component/**/Job.class"/>
    <include name="**/component/**/JobHome.class"/>
  </patternset>

  <patternset id="lettertemplateController.ejb.javasources">
    <patternset refid="common.controller.ejb.javasources"/>
    <include name="${ejb.subpath}/web/handlers/MacBinaryDecoderOutputStream.java"/>
    <include name="${ejb.subpath}/web/handlers/MultipartInputStreamHandler.java"/>
    <include name="${ejb.subpath}/web/handlers/MultipartRequest.java"/>
    <include name="${ejb.subpath}/web/handlers/UploadedFile.java"/>
    <include name="**/component/**/LetterTemplate.java"/>
    <include name="**/component/**/LetterTemplateHome.java"/>
    <include name="**/component/**/Job.java"/>
    <include name="**/component/**/JobHome.java"/>
  </patternset>

<!-- ================================ -->
<!-- patternsets for Servicing ejbs     -->
<!-- ================================ -->
  
  <!-- Patternsets for parameter_ejb.jar -->
  <patternset id="parameter.ejb.classes">
    <patternset refid="common.ejb.classes"/>
  </patternset>

  <patternset id="parameter.ejb.javasources">
    <patternset refid="common.ejb.javasources"/>
  </patternset>
  
  <!-- Patternsets for servicingController_ejb.jar -->
  <patternset id="servicingController.ejb.classes">
    <patternset refid="common.controller.ejb.classes"/>
    <include name="**/component/**/Parameter.class"/>
    <include name="**/component/**/ParameterHome.class"/>
  </patternset>

  <patternset id="servicingController.ejb.javasources">
    <patternset refid="common.controller.ejb.javasources"/>
    <include name="**/component/**/Parameter.java"/>
    <include name="**/component/**/ParameterHome.java"/>
  </patternset>

   <!--      
   #section_build_ejb3() 
   -->
   
  
  <!-- END OF PATTERNSETS -->

  <target name="init">
    <mkdir dir="${ejb.dist.dir}"/>
    <mkdir dir="${build.tmp.dir}"/>
  </target>

  <target name="compile">
    <mkdir dir="${build.classes.dir}"/>
    <javac destdir="${build.classes.dir}" srcdir="${src.dir}">
      <bootclasspath refid="boot.classpath"/>
      <classpath refid="compile.classpath"/>
      <patternset refid="${patternset}.ejb.javasources"/>
    </javac>
  </target>

  <target name="dist">
  <!-- ======================== -->
  <!-- Packing collections ejbs -->
  <!-- ======================== -->

    <antcall target="pack">
      <param name="ejb.name" value="basicInfo"/>
      <param name="ejb.subpath" value="${base.package}/collections/basicInfo"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
 <!-- also packs ach classes -->
      <param name="ejb.name" value="collectionsActivities"/>
      <param name="ejb.subpath" value="${base.package}/collections/collectionsActivities"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="collections.with.ach"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="collectionsQueuing"/>
      <param name="ejb.subpath" value="${base.package}/collections/collectionsQueuing"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="commonQueuing"/>
      <param name="ejb.subpath" value="${base.package}/collections/commonQueuing"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
 <!-- also packs ach classes -->
      <param name="ejb.name" value="companyInfo"/>
      <param name="ejb.subpath" value="${base.package}/collections/companyInfo"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="collections.with.ach"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="creditInfo"/>
      <param name="ejb.subpath" value="${base.package}/collections/creditInfo"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="customerInfo"/>
      <param name="ejb.subpath" value="${base.package}/collections/customerInfo"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="documents"/>
      <param name="ejb.subpath" value="${base.package}/collections/documents"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="letters"/>
      <param name="ejb.subpath" value="${base.package}/collections/letters"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="full.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="security"/>
      <param name="ejb.subpath" value="${base.package}/collections/security"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="security.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="util"/>
      <param name="ejb.subpath" value="${base.package}/collections/util"/>
      <param name="ejb.dist.dir" location="${collections.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="basic.collections.ejbc20.classpath"/>
      <param name="patternset" value="common.collections"/>
    </antcall>

      <!-- =========================== -->
      <!-- Packing lettertemplate ejbs -->
      <!-- =========================== -->

    <antcall target="pack">
      <param name="ejb.name" value="lettertemplate"/>
      <param name="ejb.subpath" value="${base.package}/component/lettertemplate"/>
      <param name="ejb.dist.dir" location="${letters.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="lettertemplate"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="lettertemplateController"/>
      <param name="ejb.subpath" value="${base.package}/lettertemplate/control"/>
      <param name="ejb.dist.dir" location="${letters.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="lettertemplateController"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="job"/>
      <param name="ejb.subpath" value="${base.package}/component/job"/>
      <param name="ejb.dist.dir" location="${letters.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="job"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="lettersjobmdb"/>
      <param name="ejb.subpath" value="${base.package}/component/lettersjobmdb"/>
      <param name="ejb.dist.dir" location="${letters.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="lettersjobmdb"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="lettersftpmdb"/>
      <param name="ejb.subpath" value="${base.package}/component/lettersftpmdb"/>
      <param name="ejb.dist.dir" location="${letters.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="lettersftpmdb"/>
    </antcall>


      <!-- =========================== -->
      <!-- Packing servicing ejbs      -->
      <!-- =========================== -->

    <antcall target="pack">
      <param name="ejb.name" value="parameter"/>
      <param name="ejb.subpath" value="${base.package}/component/parameter"/>
      <param name="ejb.dist.dir" location="${servicing.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="parameter"/>
    </antcall>

    <antcall target="pack">
      <param name="ejb.name" value="servicingController"/>
      <param name="ejb.subpath" value="${base.package}/servicing/control"/>
      <param name="ejb.dist.dir" location="${servicing.dist.dir}"/>
      <param name="extra.ejbc20.classpath" value="letters.servicing.ejbc20.classpath"/>
      <param name="patternset" value="servicingController"/>
    </antcall>

   <!--      
   #section_build_ejb4() 
   -->
  
  </target>
  
  <!-- ================================================== -->
  <!-- Packing ejb classes and adding web-logic generated -->
  <!-- classes.                                           -->
  <!-- ================================================== -->

  <target name="pack" depends="init,compile,testupdate" unless="ejb.build.not.required" description="packs the ${ejb.name} component">
    <echo message="packing ${ejb.dist.dir}/${ejb.name}_ejb.jar"/>
    <jar destfile="${build.tmp.dir}/pre_${ejb.name}.jar">
      <metainf dir="${src.dir}/${ejb.subpath}/META-INF"/>
      <fileset dir="${build.classes.dir}">
        <patternset refid="${patternset}.ejb.classes"/>
      </fileset>
    </jar>

    <java classname="weblogic.ejbc" fork="yes" jvm="${jvm}">
      <classpath refid="${extra.ejbc20.classpath}"/>
      <arg value="-idlDirectory"/>
      <arg value="${build.tmp.dir}"/>
      <arg value="${build.tmp.dir}/pre_${ejb.name}.jar"/>
      <arg value="${ejb.dist.dir}/${ejb.name}_ejb.jar"/>
    </java>
    <delete>
      <fileset dir="${build.tmp.dir}">
        <include name="pre_${ejb.name}.jar"/>
      </fileset>
    </delete>
  </target>
  
  <!-- Testing if the ejb jar must be generated -->

  <target name="testupdate">
    <uptodate property="ejb.build.not.required" targetfile="${ejb.dist.dir}/${ejb.name}_ejb.jar">
      <srcfiles dir="${src.dir}/${ejb.subpath}/META-INF"/>
    </uptodate>
  </target>

  <target name="clean" description="deletes the ${ejb.name}_ejb.jar file">
    <delete>
      <fileset dir="${letters.dist.dir}">
        <include name="${ejb.name}_ejb.jar"/>
      </fileset>
    </delete>
  </target>

</project>