<?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.
-->

<!--
  To run the tests for Torque for any of the databases,
  adjust any of the profiles below for your needs and then run
  mvn -P${profileName} test, e.g. mvn -Pmysql test
  
  To ignore errors when executing the generated sql 
  (e.g. because your database is in an inconsistent state) run
  mvn -P${profileName} -DonSqlError=continue test
  
  Troubleshooting:
  Exception org.apache.torque.generator.source.transform.SourceTransformerException: Option torque.database must be set:
  You did not specify a correct profile name, see above.
  
  Eclipse classpath generation: 
  First run mvn test -Pmysql -DskipTests=true, then mvn eclipse:eclipse -Dmaven.antrun.skip=true -Pmysql
 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
    <parent>
        <groupId>org.apache.torque</groupId>
        <artifactId>torque</artifactId>
        <version>8.0-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>torque-test</artifactId>
    <packaging>jar</packaging>
    <name>Torque Test Project</name>

    <properties>
        <onSqlError>abort</onSqlError>
        
        <!-- log4j2.version and derby.version now renamed in parent pom as shared in other modules -->
        <torque.test.hsqldb.version>2.7.4</torque.test.hsqldb.version>
        <torque.test.mssql.version>1.2.7</torque.test.mssql.version>
        <torque.test.mysql.version>8.0.33</torque.test.mysql.version><!-- 5.1.48  -->
        <torque.test.oracle.version>10.2.0.4.0</torque.test.oracle.version>
        <torque.test.postgres.jdbc.version>42.6.0</torque.test.postgres.jdbc.version><!-- 9.1-901.jdbc4, -->
        <torque.test.postgres.version>15.2</torque.test.postgres.version>
        <torque.test.testcontainer.version>1.19.7</torque.test.testcontainer.version>
        <!-- -->
        <torque.test.idmethod>native</torque.test.idmethod>
        <torque.generate.drops>true</torque.generate.drops>
        
        <executeDrop>true</executeDrop><!-- skip -->
        
    </properties>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/db/torque/tags/torque-7.0/torque-test</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/db/torque/tags/torque-7.0/torque-test
        </developerConnection>
        <url>http://svn.apache.org/viewvc/db/torque/tags/torque-7.0/torque-test</url>
    </scm>

    <dependencies>

        <dependency>
            <artifactId>torque-runtime</artifactId>
            <groupId>org.apache.torque</groupId>
            <version>${project.version}</version>
        </dependency>

        <!-- jndi -->
        <dependency>
            <artifactId>naming-common</artifactId>
            <groupId>tomcat</groupId>
            <version>5.0.28</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <artifactId>naming-java</artifactId>
            <groupId>tomcat</groupId>
            <version>5.0.28</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>  
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <scope>test</scope>
         </dependency>

        <!-- avalon -->
        <dependency>
            <groupId>org.apache.avalon.framework</groupId>
            <artifactId>avalon-framework-impl</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-yaafi</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-testcontainer</artifactId>
            <version>2.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.1.0</version>
            <scope>test</scope>
         </dependency>

        <!-- testcontainer minimal shared resources -->
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>testcontainers</artifactId>
            <version>${torque.test.testcontainer.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${torque.test.testcontainer.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>clean-generated-sources</id>
                        <phase>clean</phase>
                        <configuration>
                            <target>
                                <!--  remove old generated sources -->
                                <echo message="Deleting directory src/main/generated-java" />
                                <delete dir="src/main/generated-java" />
                                <echo message="Deleting directory target/torque" />
                                <delete dir="target/torque" />
                                <echo message="Deleting log file torque-test.log" />
                                <delete file="target/torque-test.log" />
                                <echo message="Deleting directory torque-test" /><!-- from derby -->
                                <delete dir="torque-test" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>filter-schema</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <target>
                                <delete dir="target/torque/test/schema" />
                                <!-- schema files need to be copied to insert idMethod -->
                                <copy todir="target/torque/test/schema">
                                    <fileset dir="src/main/schema" />
                                    <filterset>

                                        <filter token="DATABASE_DEFAULT" value="bookstore" />
                                        <filter token="DATABASE_ID_METHOD" value="${torque.test.idmethod}" />
                                        <filter token="DATABASE_SCHEMA" value="${torque.test.databaseSchema}" />
                                        <filter token="ON_UPDATE_CASCADE" value="${torque.test.onUpdateCascade}" />
                                        <filter token="ON_UPDATE_SETNULL" value="${torque.test.onUpdateSetNull}" />
                                        <filter token="ON_UPDATE_RESTRICT" value="${torque.test.onUpdateRestrict}" />
                                        <filter token="ON_DELETE_RESTRICT" value="${torque.test.onDeleteRestrict}" />
                                        <filter token="BIT_DATA_TYPE" value="${torque.test.bitDataType}" />
                                        <filter token="CURRENT_TIMESTAMP_DEFAULT" value="${torque.test.currentTimestampDefault}" />
                                        <filter token="CURRENT_TIME_DEFAULT" value="${torque.test.currentTimeDefault}" />
                                        <filter token="CURRENT_DATE_DEFAULT" value="${torque.test.currentDateDefault}" />
                                    </filterset>
                                </copy>
                                <delete dir="target/torque/test/sql" />
                                <copy todir="target/torque/test/sql">
                                    <fileset dir="src/test/sql" />
                                </copy>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-database-filled</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <target>
                                <sql driver="${torque.driver}" url="${torque.database.url}" userid="${torque.database.user}" password="${torque.database.password}" errorproperty="cannot.access.book.table" failOnConnectionError="false" onerror="continue">
                                    select count(*) from book;
                                </sql>
                                <!-- if it aborts table book does not exist, no need to drop, set executeDrop, which is exported, to false -->
                                <condition property="executeDrop" value="false">
                                    <istrue value="${cannot.access.book.table}" />
                                </condition>
                                <condition property="executeDrop"><!-- defalut is true -->
                                    <isfalse value="${cannot.access.book.table}" />
                                </condition>
                                <echo message="error: ${cannot.access.book.table}: set executeDrop: ${executeDrop}" />
                            </target>
                            <exportAntProperties>true</exportAntProperties>
                            <failOnError>false</failOnError>
                            <skip>${executeDrop}</skip>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>shutdown-db-after-test-database</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <!-- this executes the shutdown URL, which may throw an exception e.g. like: Database 'target/bookstore' shutdown.  and this is expected beahaviour -->
                                <sql driver="${torque.driver}" url="${torque.database.shutdown.url}" userid="${torque.database.user}" password="${torque.database.password}">
                                    -- do nothing
                                </sql>
                            </target>
                            <exportAntProperties>true</exportAntProperties>
                            <failOnError>false</failOnError>
                            <skip>${torque.database.shutdown.skip}</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.torque</groupId>
                <artifactId>torque-maven-plugin</artifactId>
                <version>${project.version}</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.om</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <overrideConfigDir>src/main/torque-gen</overrideConfigDir>
                            <sourceExcludes>
                                <sourceExclude>ext*-schema.xml</sourceExclude>
                                <sourceExclude>included*-schema.xml</sourceExclude>
                                <sourceExclude>id-table-schema.xml</sourceExclude>
                            </sourceExcludes>
                            <loglevel>error</loglevel>
                            <optionsFile>torque-gen.properties</optionsFile>
                            <options>
                                <torque.om.useManagers>${torque.useManagers}</torque.om.useManagers>
                                <torque.om.generateBeans>${torque.generateBeans}</torque.om.generateBeans>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-sql</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.sql</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <defaultOutputDir>target/generated-sql</defaultOutputDir>
                            <defaultOutputDirUsage>none</defaultOutputDirUsage>
                            <loglevel>error</loglevel>
                            <sourceExcludes>
                                <sourceExclude>included*-schema.xml</sourceExclude>
                            </sourceExcludes>
                            <options>
                                <torque.database>${torque.targetDatabase}</torque.database>
                                <torque.sql.generate.drops>${torque.generate.drops}</torque.sql.generate.drops>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-createdb-sql</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.sql.createdb</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <defaultOutputDir>target/generated-createdb-sql</defaultOutputDir>
                            <defaultOutputDirUsage>none</defaultOutputDirUsage>
                            <loglevel>error</loglevel>
                            <sourceExcludes>
                                <sourceExclude>ext*-schema.xml</sourceExclude>
                                <sourceExclude>included*-schema.xml</sourceExclude>
                                <sourceExclude>id-table-schema.xml</sourceExclude>
                            </sourceExcludes>
                            <options>
                                <torque.database>${torque.targetDatabase}</torque.database>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-idtable-sql</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.idtable</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <defaultOutputDir>target/generated-sql-init</defaultOutputDir>
                            <defaultOutputDirUsage>none</defaultOutputDirUsage>
                            <loglevel>error</loglevel>
                            <options>
                                <torque.database>${torque.targetDatabase}</torque.database>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-html-doc</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.doc.html</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <sourceExcludes>
                                <sourceExclude>ext*-schema.xml</sourceExclude>
                                <sourceExclude>included*-schema.xml</sourceExclude>
                                <sourceExclude>id-table-schema.xml</sourceExclude>
                            </sourceExcludes>
                            <defaultOutputDir>target/generated-docs</defaultOutputDir>
                            <defaultOutputDirUsage>none</defaultOutputDirUsage>
                            <loglevel>error</loglevel>
                            <options>
                                <torque.database>${torque.targetDatabase}</torque.database>
                                <torque.om.package>org.apache.torque.test</torque.om.package>
                            </options>
                        </configuration>
                    </execution>
                    <!-- execution>
                      <id>generate-schema-from-jdbc</id>
                      <phase>generate-test-sources</phase>
                      <goals>
                        <goal>generate</goal>
                      </goals>
                      <configuration>
                        <packaging>classpath</packaging>
                        <configPackage>org.apache.torque.templates.jdbc2schema</configPackage>
                        <defaultOutputDir>target/generated-schema</defaultOutputDir>
                        <defaultOutputDirUsage>none</defaultOutputDirUsage>
                        <loglevel>info</loglevel>
                        <options>
                          <torque.jdbc2schema.driver>${torque.driver}</torque.jdbc2schema.driver>
                          <torque.jdbc2schema.url>${torque.database.url}</torque.jdbc2schema.url>
                          <torque.jdbc2schema.user>${torque.database.user}</torque.jdbc2schema.user>
                          <torque.jdbc2schema.password>${torque.database.password}</torque.jdbc2schema.password>
                        </options>
                      </configuration>
                    </execution-->
                    <execution>
                        <id>generate-xdoc</id>
                        <phase>pre-site</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <packaging>classpath</packaging>
                            <configPackage>org.apache.torque.templates.doc.xdoc</configPackage>
                            <sourceDir>target/torque/test/schema</sourceDir>
                            <sourceExcludes>
                                <sourceExclude>ext*-schema.xml</sourceExclude>
                                <sourceExclude>included*-schema.xml</sourceExclude>
                                <sourceExclude>id-table-schema.xml</sourceExclude>
                            </sourceExcludes>
                            <defaultOutputDir>target/generated-xdocs</defaultOutputDir>
                            <defaultOutputDirUsage>none</defaultOutputDirUsage>
                            <options>
                                <torque.database>${torque.targetDatabase}</torque.database>
                                <torque.om.package>org.apache.torque.test</torque.om.package>
                            </options>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.torque</groupId>
                        <artifactId>torque-templates</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                    <!-- for generate-schema-from-jdbc only -->
                    <!-- dependency>
                      <groupId>${torque.test.driver.groupId}</groupId>
                      <artifactId>${torque.test.driver.artifactId}</artifactId>
                      <version>${torque.test.driver.version}</version>
                    </dependency-->
                </dependencies>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>execute-ext-ddl</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <driver>${torque.driver}</driver>
                            <url>${torque.database.url}</url>
                            <username>${torque.database.user}</username>
                            <password>${torque.database.password}</password>
                            <onError>${onSqlError}</onError>
                            <autocommit>true</autocommit>
                            <printResultSet>true</printResultSet>
                            <orderFile>descending</orderFile>
                            <!-- if drop is executed it is assumed that external tables already exist
                              so we do not need to drop and recreate them
                              (which avoids dependency problems) -->
                            <skip>${executeDrop}</skip>
                            <fileset>
                                <basedir>${basedir}/target/generated-sql</basedir>
                                <includes>
                                    <include>ext*.sql</include>
                                </includes>
                                <excludes>
                                    <exclude>*idtable-init.sql</exclude>
                                </excludes>
                            </fileset>
                        </configuration>
                    </execution>
                    <execution>
                        <id>execute-ddl</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <driver>${torque.driver}</driver>
                            <url>${torque.database.url}</url>
                            <username>${torque.database.user}</username>
                            <password>${torque.database.password}</password>
                            <!--onError>${onSqlError}</onError-->
                            <onError>continue</onError>
                            <autocommit>true</autocommit>
                            <orderFile>ascending</orderFile>
                            <fileset>
                                <basedir>${basedir}/target/generated-sql</basedir>
                                <includes>
                                    <include>*.sql</include>
                                </includes>
                                <excludes>
                                    <exclude>*idtable-init.sql</exclude>
                                    <exclude>ext*.sql</exclude>
                                </excludes>
                            </fileset>
                        </configuration>
                    </execution>
                    <execution>
                        <!--
                          separate execution to make sure the idtable is filled
                          after it is created
                        -->
                        <id>execute-idtable-sql</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <driver>${torque.driver}</driver>
                            <url>${torque.database.url}</url>
                            <username>${torque.database.user}</username>
                            <password>${torque.database.password}</password>
                            <onError>${onSqlError}</onError>
                            <autocommit>true</autocommit>
                            <orderFile>ascending</orderFile>
                            <fileset>
                                <basedir>${basedir}/target/generated-sql-init</basedir>
                                <includes>
                                    <include>*idtable-init.sql</include>
                                </includes>
                                <excludes>
                                    <exclude>included-*-idtable-init.sql</exclude>
                                </excludes>
                            </fileset>
                        </configuration>
                    </execution>
                    <execution>
                        <id>shutdown-db-after-ddl</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <driver>${torque.driver}</driver>
                            <url>${torque.database.shutdown.url}</url>
                            <username>${torque.database.user}</username>
                            <password>${torque.database.password}</password>
                            <onError>continue</onError>
                            <autocommit>true</autocommit>
                            <skip>${torque.database.shutdown.skip}</skip>
                            <skipOnConnectionError>true</skipOnConnectionError>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                        <include>**/${torque.test.include.beans}</include>
                        <include>**/${torque.test.include.managers}</include>
                    </includes>
                    <excludes>
                        <exclude>**/Base*.java</exclude>
                        <exclude>**/*Container*.java</exclude>
                        <exclude>**/junit5/extension/**</exclude>
                    </excludes>
                    <!--excludedGroups>docker</excludedGroups-->
                    <forkCount>0</forkCount>
                    <reuseForks>false</reuseForks>
                    <!-- change forkCount = 1, if remote debugging with mvnDebug port 8000, set forkCount=0 -->
                    <systemPropertyVariables combine.children="merge">
                        <torque.configuration.file>src/test/profile/${torque.test.profileDirectory}/Torque.properties
                        </torque.configuration.file>
                        <torque.callback>host</torque.callback>
                    </systemPropertyVariables>
                    <!-- mockito daemon, cft. https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3-->
                    <argLine>-XX:+EnableDynamicAgentLoading</argLine>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <testIncludes>
                        <include>**/*Test.java</include>
                        <include>**/*TestCase.java</include>
                        <include>**/*Tools.java</include>
                        <include>**/*SchemaData.java</include>
                        <include>**/InheritanceClassnameTestChild*.java</include>
                        <include>**/${torque.test.include.beans}</include>
                        <include>**/${torque.test.include.managers}</include>
                        <include>**/junit5/extension/**</include>
                    </testIncludes>
                    <!-- TODO: remove testExcludes once SQLToAppDataRuntimeTest works -->
                    <testExcludes>
                        <exclude>**/SQLToAppDataRuntimeTest.java</exclude>
                    </testExcludes>
                    <!-- eclipse is working -->
                     <generatedSourcesDirectory>src/main/generated-java</generatedSourcesDirectory>
                     <generatedSourcesDirectory>${project.basedir}/target/generated-sources</generatedSourcesDirectory>
                     <useIncrementalCompilation>false</useIncrementalCompilation>
                     <!-- if target/generated-sources is cleaned: https://issues.apache.org/jira/browse/MCOMPILER-567 or use -Dmaven.compiler.useIncrementalCompilation=false -->
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <groupId>org.apache.maven.plugins</groupId>
                <configuration>
                     <!-- test project site is not needed and site->javadoc fails during the release build, so skip -->
                    <skip>true</skip>
                    <!--xdocDirectory>target/generated-xdocs</xdocDirectory-->
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <inputExcludes>
                        <exclude>velocity.log</exclude>
                        <exclude>README.md</exclude>
                        <exclude>.checkstyle</exclude>
                        <exclude>checkstyle-cache.ccf</exclude>
                        <exclude>derby.log</exclude>
                        <exclude>src/main/generated-java/**</exclude>
                        <exclude>docker-java.properties</exclude><!-- ignored, not template -->
                        <exclude>**/torque.usersettings.properties</exclude>
                        <exclude>torque-test/target/**</exclude><!-- old version generated derby -->
                        <exclude>torque/test/**</exclude><!-- generated derby -->
                   </inputExcludes>
                </configuration>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <configuration>
                    <configLocation>${basedir}/../src/main/checkstyle/checkstyle.xml</configLocation>
                    <headerLocation>${basedir}/../src/main/checkstyle/license-header.txt</headerLocation>
                    <suppressionsLocation>${basedir}/../src/main/checkstyle/checkstyle-suppressions.xml
                    </suppressionsLocation>
                    <suppressionsFileExpression>checkstyle.suppressions.file</suppressionsFileExpression>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <!-- test project javadoc is not needed in the main site and javadoc fails during the release build, so skip -->
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

    <profiles>
        <profile>
            <!--
              derby profile with default settings.
              To be run from the root directory of the test project using
              "mvn -PderbyEmbedded test".
              -->
            <id>derbyEmbedded</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>derbyEmbedded</torque.test.profileDirectory>
                <torque.test.idmethod>native</torque.test.idmethod>
                <torque.test.databaseSchema>bookstore</torque.test.databaseSchema>
                <torque.test.onUpdateCascade />
                <torque.test.onUpdateSetNull />
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BOOLEANINT
                </torque.test.bitDataType><!-- BIT if database supports BIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_DATE"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_TIME"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>org.apache.derby.jdbc.EmbeddedDriver</torque.driver>
                <torque.targetDatabase>derby</torque.targetDatabase>
                <torque.database.url>jdbc:derby:target/bookstore;create=true</torque.database.url>
                <torque.database.user />
                <torque.database.password />
                <torque.database.shutdown.url>jdbc:derby:target/bookstore;shutdown=true</torque.database.shutdown.url>
                <torque.database.shutdown.skip>false</torque.database.shutdown.skip>
            </properties>
            <dependencies>
                <dependency>
                    <artifactId>derby</artifactId>
                    <groupId>org.apache.derby</groupId>
                    <version>${derby.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.derby</groupId>
                    <artifactId>derbytools</artifactId>
                     <version>${derby.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>derby</artifactId>
                                <groupId>org.apache.derby</groupId>
                                <version>${derby.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.apache.derby</groupId>
                                <artifactId>derbyshared</artifactId>
                                <version>${derby.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.apache.derby</groupId>
                                <artifactId>derbytools</artifactId>
                                 <version>${derby.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>derby</artifactId>
                                <groupId>org.apache.derby</groupId>
                                <version>${derby.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.apache.derby</groupId>
                                <artifactId>derbytools</artifactId>
                                 <version>${derby.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>  

        <profile>
            <!--
              hsqldb profile with beans and managers.
              To be run from within the test project using "mvn -Phsqldb test".
              -->
            <id>hsqldb</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>hsqldb</torque.test.profileDirectory>
                <torque.test.idmethod>idbroker</torque.test.idmethod>
                <torque.test.databaseSchema>torque_schema</torque.test.databaseSchema>
                <torque.test.onUpdateCascade>onUpdate="cascade"</torque.test.onUpdateCascade>
                <torque.test.onUpdateSetNull>onUpdate="setnull"</torque.test.onUpdateSetNull>
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BIT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_DATE"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_TIME"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>org.hsqldb.jdbcDriver</torque.driver>
                <torque.targetDatabase>hsqldb</torque.targetDatabase>
                <torque.database.url>jdbc:hsqldb:target/sqltest;shutdown=true;hsqldb.lock_file=false
                </torque.database.url>
                <torque.database.user>sa</torque.database.user>
                <torque.database.password />
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
            </properties>
            <dependencies>
                <dependency>
                    <artifactId>hsqldb</artifactId>
                    <groupId>org.hsqldb</groupId>
                    <version>${torque.test.hsqldb.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>hsqldb</artifactId>
                                <groupId>org.hsqldb</groupId>
                                <version>${torque.test.hsqldb.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>hsqldb</artifactId>
                                <groupId>org.hsqldb</groupId>
                                <version>${torque.test.hsqldb.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>derby</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>derby</torque.test.profileDirectory>
                <torque.test.idmethod>native</torque.test.idmethod>
                <torque.test.databaseSchema>bookstore</torque.test.databaseSchema>
                <torque.test.onUpdateCascade />
                <torque.test.onUpdateSetNull />
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BOOLEANINT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_DATE"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_TIME"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>org.apache.derby.jdbc.ClientDriver</torque.driver>
                <torque.targetDatabase>derby</torque.targetDatabase>
                <torque.database.url>jdbc:derby://localhost:1527/bookstore;create=true</torque.database.url>
                <torque.database.user>SA</torque.database.user>
                <torque.database.password>SA</torque.database.password>
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
            </properties>
            <dependencies>
                <dependency>
                    <artifactId>derbyclient</artifactId>
                    <groupId>org.apache.derby</groupId>
                    <version>${derby.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>derbyclient</artifactId>
                                <groupId>org.apache.derby</groupId>
                                <version>${derby.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>derbyclient</artifactId>
                                <groupId>org.apache.derby</groupId>
                                <version>${derby.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>mysql</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>mysql</torque.test.profileDirectory>
                <torque.test.idmethod>native</torque.test.idmethod>
                <torque.test.databaseSchema>bookstore</torque.test.databaseSchema>
                <torque.test.onUpdateCascade>onUpdate="cascade"</torque.test.onUpdateCascade>
                <torque.test.onUpdateSetNull>onUpdate="setnull"</torque.test.onUpdateSetNull>
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BIT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault /><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault /><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault /><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>com.mysql.cj.jdbc.Driver
                </torque.driver><!-- 5.x com.mysql.jdbc.Driver, 8.x: com.mysql.cj.jdbc.Driver -->
                <torque.targetDatabase>mysql</torque.targetDatabase>
                <torque.database.url>jdbc:mysql://localhost:3306/bookstore?useSSL=false&amp;allowPublicKeyRetrieval=true</torque.database.url>
                <torque.database.user>torque</torque.database.user>
                <torque.database.password>torque</torque.database.password>
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
                <!-- docker properties are used in docker profile only -->
                <docker.database.port>3306</docker.database.port>
                <docker.image.name>mysql</docker.image.name>
                <docker.image.version>${torque.test.mysql.version}</docker.image.version>
                <docker.env.MYSQL_ROOT_PASSWORD>${torque.database.password}</docker.env.MYSQL_ROOT_PASSWORD>
                <docker.env.MYSQL_DATABASE>bookstore</docker.env.MYSQL_DATABASE>
                <docker.env.MYSQL_USER>${torque.database.user}</docker.env.MYSQL_USER>
                <docker.env.MYSQL_PASSWORD>${torque.database.password}</docker.env.MYSQL_PASSWORD>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.mysql</groupId>
                    <artifactId>mysql-connector-j</artifactId>
                    <version>${torque.test.mysql.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-slf4j-impl</artifactId>
                    <version>${log4j2.version}</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>org.testcontainers</groupId>
                    <artifactId>mysql</artifactId>
                    <version>${torque.test.testcontainer.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>mysql</groupId>
                                <artifactId>mysql-connector-java</artifactId>
                                <version>${torque.test.mysql.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>mysql</groupId>
                                <artifactId>mysql-connector-java</artifactId>
                                <version>${torque.test.mysql.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>mssql</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>mssql</torque.test.profileDirectory>
                <torque.test.idmethod>native</torque.test.idmethod>
                <torque.test.databaseSchema>torque_schema</torque.test.databaseSchema>
                <torque.test.onUpdateCascade>onUpdate="cascade"</torque.test.onUpdateCascade>
                <torque.test.onUpdateSetNull>onUpdate="setnull"</torque.test.onUpdateSetNull>
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BIT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>net.sourceforge.jtds.jdbc.Driver</torque.driver>
                <torque.targetDatabase>mssql</torque.targetDatabase>
                <torque.database.url>jdbc:jtds:sqlserver://localhost:1433/torque</torque.database.url>
                <torque.database.user>torque</torque.database.user>
                <torque.database.password />
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
            </properties>
            <dependencies>
                <dependency>
                    <artifactId>jtds</artifactId>
                    <groupId>net.sourceforge.jtds</groupId>
                    <version>${torque.test.mssql.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>jtds</artifactId>
                                <groupId>net.sourceforge.jtds</groupId>
                                <version>${torque.test.mssql.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>jtds</artifactId>
                                <groupId>net.sourceforge.jtds</groupId>
                                <version>${torque.test.mssql.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>oracle</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>oracle</torque.test.profileDirectory>
                <torque.test.idmethod>native</torque.test.idmethod>
                <torque.test.databaseSchema>torque</torque.test.databaseSchema>
                <torque.test.onUpdateCascade />
                <torque.test.onUpdateSetNull />
                <torque.test.onUpdateRestrict />
                <torque.test.onDeleteRestrict />
                <torque.test.bitDataType>BOOLEANINT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_DATE"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_DATE"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>oracle.jdbc.driver.OracleDriver</torque.driver>
                <torque.targetDatabase>oracle</torque.targetDatabase>
                <torque.database.url>jdbc:oracle:thin:@localhost:1521:XE</torque.database.url>
                <torque.database.user>torque</torque.database.user>
                <torque.database.password />
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
            </properties>
            <dependencies>
                <dependency>
                    <artifactId>ojdbc14</artifactId>
                    <groupId>com.oracle</groupId>
                    <version>${torque.test.oracle.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>ojdbc14</artifactId>
                                <groupId>com.oracle</groupId>
                                <version>${torque.test.oracle.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <artifactId>ojdbc14</artifactId>
                                <groupId>com.oracle</groupId>
                                <version>${torque.test.oracle.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>postgresql</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.test.profileDirectory>postgresql</torque.test.profileDirectory>
                <torque.test.idmethod>idbroker</torque.test.idmethod>
                <torque.test.databaseSchema>bookstore</torque.test.databaseSchema>
                <torque.test.onUpdateCascade>onUpdate="cascade"</torque.test.onUpdateCascade>
                <torque.test.onUpdateSetNull>onUpdate="setnull"</torque.test.onUpdateSetNull>
                <torque.test.onUpdateRestrict>onUpdate="restrict"</torque.test.onUpdateRestrict>
                <torque.test.onDeleteRestrict>onDelete="restrict"</torque.test.onDeleteRestrict>
                <torque.test.bitDataType>BIT
                </torque.test.bitDataType><!-- BIT if database supports bIT type, something else if not -->
                <torque.test.currentDateDefault>default="CURRENT_DATE"
                </torque.test.currentDateDefault><!-- default="CURRENT_DATE" if database supports it -->
                <torque.test.currentTimeDefault>default="CURRENT_TIME"
                </torque.test.currentTimeDefault><!-- default="CURRENT_TIME" if database supports it -->
                <torque.test.currentTimestampDefault>default="CURRENT_TIMESTAMP"
                </torque.test.currentTimestampDefault><!-- default="CURRENT_TIMESTAMP" if database supports it -->
                <torque.driver>org.postgresql.Driver</torque.driver>
                <torque.targetDatabase>postgresql</torque.targetDatabase>
                <torque.database.url>jdbc:postgresql://localhost:5432/bookstore</torque.database.url>
                <torque.database.user>torque</torque.database.user>
                <torque.database.password>torque</torque.database.password>
                <torque.database.shutdown.url>none</torque.database.shutdown.url>
                <torque.database.shutdown.skip>true</torque.database.shutdown.skip>
                <!-- docker properties are used in docker profile only -->
                <docker.database.port>5432</docker.database.port>
                <docker.image.name>postgres</docker.image.name>
                <docker.image.version>${torque.test.postgres.version}</docker.image.version>
                <docker.env.POSTGRES_DB>bookstore</docker.env.POSTGRES_DB>
                <docker.env.POSTGRES_USER>${torque.database.user}</docker.env.POSTGRES_USER>
                <docker.env.POSTGRES_PASSWORD>${torque.database.password}</docker.env.POSTGRES_PASSWORD>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>${torque.test.postgres.jdbc.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-slf4j-impl</artifactId>
                    <version>${log4j2.version}</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>org.testcontainers</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>${torque.test.testcontainer.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>org.postgresql</groupId>
                                <artifactId>postgresql</artifactId>
                                <version>${torque.test.postgres.jdbc.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>org.postgresql</groupId>
                                <artifactId>postgresql</artifactId>
                                <version>${torque.test.postgres.jdbc.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <!--

        todo: add docker profiles for more databases,...

        mvn -Pmysql,docker-testcontainer,managers,beans clean test

        be careful to run test with @DockerCallback:

        mvnDebug -Pmysql,docker-testcontainer,managers,beans clean test -Dtest=DataContainerTest#testLikeClauseEscaping

        The following test call will fail, although database will be generated  (prepare-..-database), but docker is not initialized in the unit test as second step:
        mvnDebug -Pmysql,docker-testcontainer,managers,beans clean test -Dtest=DataTest#testLikeClauseEscaping

        -->
        <profile>
            <id>docker-testcontainer</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <!--
                    Build image:
                    requires a started docker host - starts database for sql-maven-plugin.
                    caution: Cancelling the maven process before life cycle process-classes is reached, requires the docker to be stopped manually with docker stop <id>.
                    add -Ddocker.skip=true if image already downloaded and up-to-date to skip all plugin goals.
                    -->
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <version>0.45.0</version>
                        <configuration>
                            <filter>${docker.image.name}:${docker.image.version}</filter>
                        </configuration>
                        <executions>
                            <execution>
                                <id>prepare-${docker.image.name}-database</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>start</goal>
                                </goals>
                                <configuration>
                                    <!-- may set here environment variables: dockerhost, but .. -->
                                    <images>
                                        <image>
                                            <name>${docker.image.name}:${docker.image.version}</name>
                                            <alias>${docker.image.name}-generate-helper-database</alias>
                                            <run>
                                                <!-- setting env in database profiles  env.docker -->
                                                <!-- this is too late for reading GLOBAL env DOCKER_HOST -> issue of the plugin?  -->
                                                <!--envPropertyFile>${project.basedir}/src/test/profile/mysql/docker-resources/docker-java.properties</envPropertyFile-->
                                                <ports>
                                                    <port>${docker.database.port}:${docker.database.port}</port>
                                                </ports>
                                                <!--wait>
                                                    <log>database system is ready to accept connections.</log>
                                                    <time>20000</time>
                                                </wait-->
                                            </run><!-- target/classes/ -->
                                        </image>
                                    </images>
                                </configuration>
                            </execution>
                            <!-- close this init generate sources database outside tests, before starting tests -->
                            <execution>
                                <id>remove-docker-database</id>
                                <phase>process-classes</phase>
                                <goals>
                                    <goal>stop</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- skip and use testcontainers docker -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>execute-ext-ddl</id>
                                <configuration>
                                    <skip>true</skip>
                                </configuration>
                            </execution>
                            <execution>
                                <id>execute-ddl</id>
                                <configuration>
                                    <skip>true</skip>
                                </configuration>
                            </execution>
                            <execution>
                                <id>execute-idtable-sql</id>
                                <configuration>
                                    <skip>true</skip>
                                </configuration>
                            </execution>
                            <execution>
                                <id>shutdown-db-after-ddl</id>
                                <configuration>
                                    <skip>true</skip>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- skip database test or do it in a later phase.. -->
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>test-database-filled</id>
                                <phase>generate-sources</phase>
                                <configuration>
                                    <skip>true</skip>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.3.1</version>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${basedir}/target</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>
                                                src/test/profile/${torque.test.profileDirectory}/docker-resources/db
                                            </directory>
                                            <filtering>false</filtering>
                                            <includes>
                                                <include>Dockerfile</include>
                                                <include>.dockerignore</include>
                                            </includes>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                            <execution>
                                <id>copy-resources-2</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${basedir}/target/test-classes</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>
                                                src/test/profile/${torque.test.profileDirectory}/docker-resources
                                            </directory>
                                            <filtering>false</filtering>
                                            <includes>
                                                <include>docker-java.properties</include>
                                                <include>testcontainers.properties</include>
                                            </includes>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <torque.wrapper.configuration.file>
                                    src/test/profile/${torque.test.profileDirectory}/Torque4Test.xml
                                </torque.wrapper.configuration.file>
                                <torque.callback>docker</torque.callback>
                            </systemPropertyVariables>
                            <excludes>
                                <exclude>**/Base*.java</exclude>
                                <exclude>**/junit5/extension/**</exclude>
                            </excludes>
                            <includes>
                                <include>**/testcontainer/${torque.test.profileDirectory}/**</include>
                            </includes>
                            <!--groups>DockerCallback</groups-->
                            <!-- forkCount zero is required, as otherwise no tests will be launcehd by testcontainers -->
                            <forkCount>0</forkCount>
                            <reuseForks>false</reuseForks>
                        </configuration>
                        <executions>
                            <execution>
                                <id>default-test</id>
                                <configuration>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            <dependencies>
                <!-- docker testcontainer:  mvn test -Pmysql,docker-testcontainer  -->
                <dependency>
                    <groupId>org.testcontainers</groupId>
                    <artifactId>testcontainers</artifactId>
                    <version>${torque.test.testcontainer.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.testcontainers</groupId>
                    <artifactId>junit-jupiter</artifactId>
                    <version>${torque.test.testcontainer.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>beans</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.generateBeans>true</torque.generateBeans>
                <torque.test.include.beans>BeanTestConditional.java</torque.test.include.beans>
            </properties>
        </profile>

        <profile>
            <id>managers</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <torque.useManagers>true</torque.useManagers>
                <torque.test.include.managers>ManagerTestConditional.java</torque.test.include.managers>
            </properties>
        </profile>

    </profiles>
</project>
