<?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 - Entity" default="jar" basedir=".">
    <import file="../../common.xml"/>

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

    <property name="desc" value="Entity Component"/>
    <property name="name" value="ofbiz-entity"/>
    <property name="ofbiz.home.dir" value="../.."/>

    <path id="local.class.path">
        <fileset dir="${lib.dir}" includes="*.jar"/>
        <fileset dir="${lib.dir}/jdbc" includes="*.jar"/>
        <fileset dir="../base/lib" includes="*.jar"/>
        <fileset dir="../base/lib/commons" includes="*.jar"/>
        <fileset dir="../base/lib/j2eespecs" includes="*.jar"/>
        <fileset dir="../base/lib/scripting" includes="*.jar"/>
        <fileset dir="../base/build/lib" includes="*.jar"/>
    </path>

    <patternset id="src.exc.set">
        <exclude name="org/ofbiz/entity/connection/XaPoolConnectionFactory.java"/>
        <exclude name="org/ofbiz/entity/connection/TyrexConnectionFactory.java"/>
    </patternset>

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

    <target name="classes" depends="prepare">
        <javac15/>
    </target>

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

    <target name="docs" depends="prepare-docs">
        <javadoc packagenames="org.ofbiz.entity.*"
                 classpathref="local.class.path"
                 destdir="${build.dir}/javadocs"
                 Windowtitle="Open for Business - ${desc}">
            <fileset dir="${src.dir}" defaultexcludes="yes">
                <patternset refid="src.inc.set"/>
                <patternset refid="src.exc.set"/>
            </fileset>
        </javadoc>
    </target>
</project>
