<?xml version="1.0" encoding="UTF-8"?>
<!--
    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="enhance" basedir=".">
    <!--
        This build file executes the PCEnhancer on the test entities. It's in a
        separate file instead of nested in pom.xml to make some conditional
        processing easier.

        Test classes will not be compiled if maven is invoked with
        -Dmaven.test.skip=true.
    -->

    <condition property="maven.test.skip.istrue">
        <istrue value="${maven.test.skip}" />
    </condition>

    <condition property="skip.enhance">
        <or>
        <equals arg1="${test}" arg2="false" />
        <equals arg1="${build.enhance}" arg2="false" />
        <istrue value="${maven.test.skip}" />
        <istrue value="${skipTests}" />
        </or>
    </condition>

    <!-- =================================
          target: enhance
         ================================= -->
    <target name="enhance"
            description="--> run the enhancer unless test=false"
            unless="skip.enhance">
        <antcall target="enhance.all.entities"
                 inheritall="true"
                 inheritrefs="true" />
    </target>

    <!-- =================================
          target: enhance.all.entities
         ================================= -->
    <target name="enhance.all.entities"
            description="--> enhance the test entities"
            unless="skip.enhance">
        <echo> running enhancer</echo>
        <!--
            Inherited references won't be present until the task is called.
            Therefore the path definition needs to stay inside the task.
          -->
        <path id="cp">
            <path refid="maven.test.classpath" />
        </path>

        <taskdef name="openjpac"
                 classname="org.apache.openjpa.ant.PCEnhancerTask">
            <classpath refid="cp" />
        </taskdef>

        <fileset id="enhance.path.ref"
                 dir="${project.build.testOutputDirectory}">
            <include name="**/*.class" />
            <include name="org/apache/openjpa/persistence/meta/TestMetamodelWithEnum$Main.class" />
            <exclude name="**/inheritance/serializable/*.class" />
            <exclude name="**/detach/serializable/*.class" />
            <exclude name="**/proxy/entities/*.class" />
            <exclude name="**/xml/*.class" />
            <exclude name="**/Unenhanced*.class" />
            <exclude name="org/apache/openjpa/enhance/EnhancedSuperClass.class"/>
            <exclude name="org/apache/openjpa/enhance/EnhancedSubClass.class"/>
            <exclude name="**/AbstractUnenhanced*.class" />
            <exclude name="**/unenhanced/*.class" />
            <exclude name="**/persistence/property/AccessModsEntity.class"/>
            <exclude name="org/apache/openjpa/enhance/ids/*.class"/>
        </fileset>
        <openjpac>
            <classpath refid="cp" />
            <fileset refid="enhance.path.ref" />
            <config log="${openjpa.Log}" />
        </openjpac>
        <!--  Set detach state for serialization tests -->
        <openjpac>
            <config detachState="fgs(DetachedStateField=true)" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
                <include name="**/inheritance/serializable/*.class" />
                <include name="**/detach/serializable/*.class" />
                <!--  include files from orm.xml -->
                <include name="**/xml/*.class" />
                <exclude name="**/persistence/delimited/identifiers/xml/*.class"/>
                <exclude name="**/Test*.class" />
            </fileset>
            <config log="${openjpa.Log}" />
        </openjpac>
        <!-- Enhance with private persistent properties compatibility option -->
        <openjpac>
            <config propertiesFile="${project.build.testOutputDirectory}/META-INF/nopriv_persistence.xml" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
            <include name="**/persistence/property/AccessModsEntity.class"/>
            </fileset>
            <config log="${openjpa.Log}" />
        </openjpac>
        <!-- Enhance with DetachState fetch-groups option -->
        <openjpac>
            <config propertiesFile="${project.build.testOutputDirectory}/org/apache/openjpa/persistence/proxy/persistence1.xml" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
                <include name="**/proxy/entities/*.class"/>
            </fileset>
            <config log="${openjpa.Log}" />
        </openjpac>
        <!-- Enhance with DetachedStateField=true option -->
        <openjpac>
            <config propertiesFile="${project.build.testOutputDirectory}/org/apache/openjpa/enhance/persistence1.xml" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
                <include name="org/apache/openjpa/enhance/EnhancedSuperClass.class"/>
                <include name="org/apache/openjpa/enhance/EnhancedSubClass.class"/>
            </fileset>
            <config log="${openjpa.Log}" />
        </openjpac>
        <!-- Enhance delimited identifiers XML-based entities separately -->
        <openjpac>
            <config propertiesFile="${project.build.testOutputDirectory}/META-INF/delim_persistence.xml" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
                <include name="**/persistence/delimited/identifiers/xml/*.class"/>
                <exclude name="**/persistence/delimited/identifiers/xml/Test*.class"/>
            </fileset>
            <config log="${openjpa.Log}"/>
        </openjpac>
        <!-- Enhance with optimized id copy option -->
        <openjpac>
            <config propertiesFile="${project.build.testOutputDirectory}/META-INF/optidcpy_persistence.xml" />
            <classpath refid="cp" />
            <fileset dir="${project.build.testOutputDirectory}">
                <include name="org/apache/openjpa/enhance/ids/*.class"/>
            </fileset>
            <config log="${openjpa.Log}" />
        </openjpac>
    </target>
</project>
