<?xml version="1.0"?>
<!--
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="OFBiz - Product Component" default="jar" basedir=".">

    <!-- ================================================================== -->
    <!-- Initialization of all property settings                            -->
    <!-- ================================================================== -->

    <target name="init">
        <property environment="env"/>
        <property name="desc" value="Product Component"/>
        <property name="name" value="ofbiz-product"/>
        <property name="ofbiz.home.dir" value="../.."/>
        <property name="src.dir" value="src"/>
        <property name="dtd.dir" value="dtd"/>
        <property name="lib.dir" value="lib"/>
        <property name="build.dir" value="build"/>
    </target>

    <target name="classpath">
        <path id="local.class.path">
            <!--<fileset dir="${lib.dir}" includes="*.jar"/>-->
            <fileset dir="../../framework/base/lib" includes="*.jar"/>
            <fileset dir="../../framework/base/lib/commons" includes="*.jar"/>
            <fileset dir="../../framework/base/lib/j2eespecs" includes="*.jar"/>
            <fileset dir="../../framework/base/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/entity/lib" includes="*.jar"/>
            <fileset dir="../../framework/entity/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/security/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/service/lib" includes="*.jar"/>
            <fileset dir="../../framework/service/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/minilang/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/webapp/lib" includes="*.jar"/>
            <fileset dir="../../framework/webapp/build/lib" includes="*.jar"/>
            <fileset dir="../../framework/common/build/lib" includes="*.jar"/>
            <fileset dir="../content/lib" includes="*.jar"/>
            <fileset dir="../content/build/lib" includes="*.jar"/>
            <fileset dir="../party/build/lib" includes="*.jar"/>
        </path>
    </target>

    <!-- ================================================================== -->
    <!-- Removes all created files and directories                          -->
    <!-- ================================================================== -->

    <target name="clean" depends="clean-lib">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-lib" depends="init">
        <delete dir="${build.dir}/lib"/>
    </target>

    <!-- ================================================================== -->
    <!-- Makes sure the needed directory structure is in place              -->
    <!-- ================================================================== -->

    <target name="prepare" depends="clean-lib">
        <mkdir dir="${build.dir}/classes"/>
        <mkdir dir="${build.dir}/lib"/>
    </target>

    <target name="prepare-docs" depends="init">
        <mkdir dir="${build.dir}/javadocs"/>
    </target>

    <!-- ================================================================== -->
    <!-- Compilation of the source files                                                                                                                         -->
    <!-- ================================================================== -->

    <target name="classes" depends="prepare,classpath">
        <!-- check for applet required classes -->
        <condition property="noapplet" value="ShipmentScaleApplet.java">
            <not>
                <or>
                    <available classname="javax.comm.SerialPort" classpathref="local.class.path"/>
                    <available classname="netscape.javascript.JSObject" classpathref="local.class.path" property="jsobject.avail"/>
                </or>
            </not>
        </condition>

        <javac debug="on" source="1.4" deprecation="on" destdir="${build.dir}/classes">
            <classpath>
                <path refid="local.class.path"/>
            </classpath>
            <src path="${src.dir}"/>
            <exclude name="${noapplet}"/>
        </javac>
        <!-- also put the DTDs in the jar file... -->
        <copy todir="${build.dir}/classes">
            <!--<fileset dir="${dtd.dir}" includes="*.dtd"/>-->
            <fileset dir="${src.dir}" includes="**/*.properties,**/*.xml,**/*.bsh,**/*.logic,**/*.js,**/*.jacl,**/*.py"/>
        </copy>
        
        <!-- now add the NOTICE and LICENSE files to allow the jar file to be distributed alone -->
        <copy todir="${build.dir}/classes/META-INF">
            <fileset dir="${ofbiz.home.dir}" includes="NOTICE,LICENSE"/>
        </copy>        
    </target>

    <target name="jar" depends="classes">
        <jar jarfile="${build.dir}/lib/${name}.jar" basedir="${build.dir}/classes"/>
    </target>

    <!-- ================================================================== -->
    <!-- Build JavaDoc                                                      -->
    <!-- ================================================================== -->

    <target name="docs" depends="prepare-docs,classpath">
        <javadoc packagenames="org.ofbiz.product.*,org.ofbiz.shipment.*"
                 classpathref="local.class.path"
                 destdir="${build.dir}/javadocs"
                 Windowtitle="Open for Business - ${desc}">
            <sourcepath path="${src.dir}"/>
        </javadoc>
    </target>

    <target name="all" depends="jar,docs"/>
</project>
