<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.atlassian.activeobjects</groupId>
        <artifactId>activeobjects-plugin-parent-pom</artifactId>
        <version>3.2.5</version>
    </parent>

    <artifactId>activeobjects-plugin</artifactId>
    <packaging>atlassian-plugin</packaging>

    <name>ActiveObjects Plugin - OSGi Bundle</name>
    <description>An OSGi bundle that provides a service that allows plugins to persist objects using the ActiveObjects
        framework
    </description>

    <properties>
        <db.skip>false</db.skip>
        <db.host>localhost</db.host>
        <db.name>ao_test</db.name>
        <db.username>ao_user</db.username>
        <db.password>ao_password</db.password>
        <db.schema>ao_schema</db.schema>
        <h2.version>1.4.196</h2.version>
        <mysql.version>8.0.19</mysql.version>
        <postgres.version>42.2.6</postgres.version>
        <oracle.driver.group>com.oracle.ojdbc</oracle.driver.group>
        <oracle.driver.artifact>ojdbc8</oracle.driver.artifact>
        <oracle.driver.version>19.3.0.0</oracle.driver.version>
        <jtds.version>1.2.4</jtds.version>
        <sqljdbc.version>7.4.1.jre8</sqljdbc.version>
        <sqljdbc.artifactId>mssql-jdbc</sqljdbc.artifactId>
        <ao.spi.compatibility.version>0.26.0</ao.spi.compatibility.version>
        <c3p0.version>0.9.5.5</c3p0.version>
        <docker.skip>true</docker.skip>

        <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/../${jacoco.report.file}</sonar.coverage.jacoco.xmlReportPaths>
    </properties>

    <!--
        this is just because of a bug 'somewhere' where exclusions are not taken in account
        properly, so also making sure to mark them provided
     -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-core</artifactId>
                <version>2.9.4</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-queries</artifactId>
                <version>2.9.4</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>net.java.dev.activeobjects</groupId>
            <artifactId>activeobjects</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.google.errorprone</groupId>
                    <artifactId>error_prone_annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.j2objc</groupId>
                    <artifactId>j2objc-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.lucene</groupId>
                    <artifactId>lucene-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.lucene</groupId>
                    <artifactId>lucene-queries</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.checkerframework</groupId>
                    <artifactId>checker-qual</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>animal-sniffer-annotations</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.atlassian.activeobjects</groupId>
            <artifactId>activeobjects-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atlassian.activeobjects</groupId>
            <artifactId>activeobjects-dbex</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atlassian.activeobjects</groupId>
            <artifactId>activeobjects-spi</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.beehive</groupId>
            <artifactId>beehive-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.sal</groupId>
            <artifactId>sal-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugins</groupId>
            <artifactId>atlassian-plugins-osgi</artifactId>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>com.google.collections</groupId>
                    <artifactId>google-collections</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugins</groupId>
            <artifactId>atlassian-plugins-osgi-bridge</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugins</groupId>
            <artifactId>atlassian-plugins-webresource</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugins</groupId>
            <artifactId>atlassian-plugins-webfragment</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.templaterenderer</groupId>
            <artifactId>atlassian-template-renderer-api</artifactId>
            <version>2.0.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.tenancy</groupId>
            <artifactId>atlassian-tenancy-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.atlassian.util.concurrent</groupId>
            <artifactId>atlassian-util-concurrent</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>1.7.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.osgi</groupId>
            <artifactId>spring-osgi-core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.security</groupId>
            <artifactId>atlassian-secure-random</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.3</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>${hsqldb.groupid}</groupId>
            <artifactId>hsqldb</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>net.java.dev.activeobjects</groupId>
            <artifactId>activeobjects-test</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.activeobjects</groupId>
            <artifactId>activeobjects-test-model</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugins.test</groupId>
            <artifactId>atlassian-plugins-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.sal</groupId>
            <artifactId>sal-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>amps-maven-plugin</artifactId>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <Atlassian-Plugin-Key>${project.groupId}.${project.artifactId}</Atlassian-Plugin-Key>
                        <Import-Package>
                            !javax.servlet.jsp*,
                            !org.apache.velocity.tools*,
                            com.atlassian.activeobjects.spi;version="${ao.spi.compatibility.version}",
                            com.atlassian.event.api*;version="2.0",
                            com.atlassian.sal.api*;version="${sal.api.compatibility.version}",
                            com.atlassian.plugin;version="${plugins.osgi.version}",
                            com.atlassian.plugin.descriptors;version="${plugins.osgi.version}",
                            com.atlassian.plugin.event.events;version="${plugins.osgi.version}",
                            com.atlassian.plugin.hostcontainer;version="${plugins.osgi.version}",
                            com.atlassian.plugin.module;version="${plugins.osgi.version}",
                            com.atlassian.plugin.osgi.bridge.external;version="${plugins.osgi.version}",
                            com.atlassian.plugin.osgi.external;version="${plugins.osgi.version}",
                            com.atlassian.plugin.osgi.factory;version="${plugins.osgi.version}",
                            com.atlassian.plugin.osgi.util;version="${plugins.osgi.version}",
                            com.atlassian.plugin.predicate;version="${plugins.osgi.version}",
                            com.atlassian.plugin.web;version="${webfragments.osgi.version}",
                            com.atlassian.plugin.webresource;version="${webresource.osgi.version}",
                            com.atlassian.templaterenderer,
                            com.atlassian.tenancy.api*;version="${tenancy.api.compatibility.version}",
                            com.atlassian.security.random;version="1.0",
                            com.atlassian.beehive*;version="${atlassian.beehive.version}",
                            com.google.common*,
                            com.mchange.v2.c3p0;resolution:=optional;version="0.8",
                            io.atlassian.util.concurrent;version="4",
                            javax.naming;version="0.0.0",
                            javax.servlet*;version="3",
                            javax.sql,
                            javax.xml.namespace*,
                            javax.xml.stream*,
                            javax.xml.transform*,
                            net.java.ao*;version="${project.version}",
                            org.apache.commons.codec*;version="1.3",
                            org.apache.commons.dbcp;resolution:=optional;version="1.2",
                            org.apache.commons.lang3;version="3.0",
                            org.apache.commons.lang3.builder;version="3.0",
                            org.apache.commons.logging;version="1.1.1",
                            org.apache.lucene.*;version="2.0";resolution:=optional,
                            org.dom4j*,
                            org.hsqldb;version="1.8.0";resolution:=optional,
                            org.logicalcobwebs.proxool;version="0.9";resolution:=optional,
                            org.osgi.framework;version="1.4",
                            org.osgi.util.tracker;version="1.3",
                            org.slf4j;version="1.6",
                            org.springframework.*;version="${spring.osgi.version}",
                            snaq.db;resolution:=optional;version="4.9",
                            org.xml.sax
                        </Import-Package>
                        <Private-Package>
                            com.atlassian.activeobjects*,
                            com.ctc.wstx*,
                            org.codehaus.stax2*,
                        </Private-Package>
                        <Export-Package>
                            com.atlassian.activeobjects.config;version="${project.version}",
                            com.atlassian.activeobjects.external*;version="${project.version}",
                            com.atlassian.activeobjects.tx*;version="${project.version}",
                            net.java.ao;version="${project.version}",
                            net.java.ao.builder;version="${project.version}",
                            net.java.ao.db;version="${project.version}",
                            net.java.ao.event;version="${project.version}",
                            net.java.ao.types;version="${project.version}",
                            net.java.ao.schema;version="${project.version}",
                            net.java.ao.schema.ddl;version="${project.version}",
                        </Export-Package>
                        <!-- Ensure plugin is spring powered - see https://extranet.atlassian.com/x/xBS9hQ -->
                        <Spring-Context>*</Spring-Context>
                    </instructions>
                    <noWebapp>true</noWebapp>
                    <log4jProperties>src/test/resources/log4j.properties</log4jProperties>
                </configuration>
            </plugin>

            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>start</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.4</version>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/*Test*.java</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>createDB</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.leberrigaud.maven.plugins</groupId>
                        <artifactId>database-maven-plugin</artifactId>
                        <version>0.10</version>
                        <configuration>
                            <!--These comes from the individual database profiles-->
                            <skip>${db.skip}</skip>
                            <database>${ao.test.database}</database>
                            <schema>${db.schema}</schema>
                            <name>${db.name}</name>
                            <host>${db.host}</host>
                            <username>${db.username}</username>
                            <password>${db.password}</password>
                            <rootUsername>${db.system.username}</rootUsername>
                            <rootPassword>${db.system.password}</rootPassword>
                        </configuration>
                        <executions>
                            <execution>
                                <id>create-db</id>
                                <goals>
                                    <goal>create</goal>
                                </goals>
                                <phase>pre-integration-test</phase>
                            </execution>
                            <execution>
                                <id>drop-db</id>
                                <goals>
                                    <goal>drop</goal>
                                </goals>
                                <phase>post-integration-test</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>hsql</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <ao.test.database>hsql</ao.test.database>
                <db.url>jdbc:hsqldb:mem:ao_test</db.url>
                <db.username>sa</db.username>
                <db.password />
                <db.skip>true</db.skip>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                            </systemPropertyVariables>
                            <excludedGroups>
                                com.atlassian.activeobjects.junit.H2Test,
                                <!--com.atlassian.activeobjects.junit.HsqlTest,-->
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>h2-memory</id>
            <properties>
                <ao.test.database>h2-memory</ao.test.database>
                <db.skip>true</db.skip>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <version>${h2.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                    <version>${c3p0.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                            </systemPropertyVariables>
                            <excludedGroups>
                                <!--com.atlassian.activeobjects.junit.H2Test,-->
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>h2-file</id>
            <properties>
                <ao.test.database>h2-file</ao.test.database>
                <db.skip>true</db.skip>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <version>${h2.version}</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                            </systemPropertyVariables>
                            <excludedGroups>
                                <!--com.atlassian.activeobjects.junit.H2Test,-->
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>h2-server</id>
            <properties>
                <ao.test.database>h2-server</ao.test.database>
                <db.skip>true</db.skip>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <version>${h2.version}</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                            </systemPropertyVariables>
                            <excludedGroups>
                                <!--com.atlassian.activeobjects.junit.H2Test,-->
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>mysql</id>
            <properties>
                <db.host>localhost</db.host>
                <db.name>ao_test</db.name>
                <db.username>ao_user</db.username>
                <db.password>ao_password</db.password>
                <db.schema>ao_schema</db.schema>
                <db.port>3306</db.port>
                <db.url>jdbc:mysql://localhost:${db.port}/${db.name}?autoReconnect=true</db.url>
                <ao.test.database>mysql</ao.test.database>
                <docker.wait.log>(?s)starting as process 1\b.*ready for connections</docker.wait.log>
                <docker.image>mysql:5.5</docker.image>
                <docker.skip>false</docker.skip>
                <db.system.username>root</db.system.username>
                <db.system.password>root</db.system.password>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <configuration>
                            <images>
                                <image>
                                    <name>${docker.image}</name>
                                    <run>
                                        <ports>
                                            <port>db.port:3306</port>
                                        </ports>
                                        <cmd>--character-set-server=utf8 --collation-server=utf8_bin --bind-address=0.0.0.0</cmd>
                                        <env>
                                            <MYSQL_DATABASE>${db.name}</MYSQL_DATABASE>
                                            <MYSQL_USER>${db.username}</MYSQL_USER>
                                            <MYSQL_PASSWORD>${db.password}</MYSQL_PASSWORD>
                                            <MYSQL_ROOT_PASSWORD>${db.system.password}</MYSQL_ROOT_PASSWORD>
                                        </env>
                                        <wait>
                                            <log>${docker.wait.log}</log>
                                            <time>120000</time>
                                            <tcp>
                                                <host>localhost</host>
                                                <ports>
                                                    <port>3306</port>
                                                </ports>
                                            </tcp>
                                        </wait>
                                        <log>
                                            <prefix>mysql</prefix>
                                        </log>
                                    </run>
                                </image>
                            </images>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                                <db.username>${db.username}</db.username>
                                <db.password>${db.password}</db.password>
                                <db.url>${db.url}</db.url>
                                <db.schema>${db.schema}</db.schema>
                            </systemPropertyVariables>
                            <excludedGroups>
                                com.atlassian.activeobjects.junit.H2Test,
                                com.atlassian.activeobjects.junit.HsqlTest,
                                <!--com.atlassian.activeobjects.junit.MySqlTest,-->
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>postgres</id>
            <properties>
                <ao.test.database>postgres</ao.test.database>
                <db.schema>public</db.schema>
                <db.url>jdbc:postgresql://localhost:${db.port}/${db.name}</db.url>

                <docker.image>postgres:9.2</docker.image>
                <docker.skip>false</docker.skip>
                <docker.wait.log>PostgreSQL init process complete</docker.wait.log>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>${postgres.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin
                                </plugin.root.directories>
                                <db.username>${db.username}</db.username>
                                <db.password>${db.password}</db.password>
                                <db.url>${db.url}</db.url>
                                <db.schema>${db.schema}</db.schema>
                            </systemPropertyVariables>
                            <excludedGroups>
                                com.atlassian.activeobjects.junit.H2Test,
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                <!--com.atlassian.activeobjects.junit.PostgresTest,-->
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <configuration>
                            <images>
                                <image>
                                    <name>${docker.image}</name>

                                    <run>
                                        <ports>
                                            <port>db.port:5432</port>
                                        </ports>
                                        <env>
                                            <POSTGRES_DB>${db.name}</POSTGRES_DB>
                                            <POSTGRES_USER>${db.username}</POSTGRES_USER>
                                            <POSTGRES_PASSWORD>${db.password}</POSTGRES_PASSWORD>
                                        </env>
                                        <wait>
                                            <log>${docker.wait.log}</log>
                                            <time>1200000</time>
                                        </wait>
                                        <log>
                                            <prefix>postgres</prefix>
                                        </log>
                                    </run>
                                </image>
                            </images>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>oracle</id>
            <properties>
                <ao.test.database>oracle</ao.test.database>
                <db.sid>JIRADB</db.sid>
                <db.port>1521</db.port>
                <db.schema>ao_user</db.schema>
                <db.url>jdbc:oracle:thin:@localhost:${db.port}:${db.sid}</db.url>
                <docker.image>docker.atl-paas.net/atlassian/jira/server/oracle-database:19.3.0-se2-1.2.0-warm-1.1.0</docker.image>
                <docker.wait.log>(?s).*DATABASE IS READY TO USE.*</docker.wait.log>
                <docker.skip>false</docker.skip>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>${oracle.driver.group}</groupId>
                    <artifactId>${oracle.driver.artifact}</artifactId>
                    <version>${oracle.driver.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                                <db.username>${db.username}</db.username>
                                <db.password>${db.password}</db.password>
                                <db.url>${db.url}</db.url>
                                <db.schema>${db.schema}</db.schema>
                            </systemPropertyVariables>
                            <excludedGroups>
                                com.atlassian.activeobjects.junit.H2Test,
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                <!--com.atlassian.activeobjects.junit.OracleTest,-->
                                com.atlassian.activeobjects.junit.PostgresTest,
                                com.atlassian.activeobjects.junit.SqlServerTest
                            </excludedGroups>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <configuration>
                            <images>
                                <image>
                                    <name>${docker.image}</name>
                                    <alias>oracle</alias>
                                    <run>
                                        <ports>
                                            <port>db.port:1521</port>
                                        </ports>
                                        <wait>
                                            <log>${docker.wait.log}</log>
                                            <time>1000000</time>
                                        </wait>
                                        <log>
                                            <prefix>oracle:</prefix>
                                        </log>
                                    </run>
                                </image>
                            </images>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>${oracle.driver.group}</groupId>
                                <artifactId>${oracle.driver.artifact}</artifactId>
                                <version>${oracle.driver.version}</version>
                            </dependency>
                        </dependencies>

                        <configuration>
                            <username>SYS AS SYSDBA</username>
                            <password>oracle</password>
                            <url>${db.url}</url>
                            <driver>oracle.jdbc.OracleDriver</driver>
                            <skip>${skipTests}</skip>
                        </configuration>

                        <executions>
                            <execution>
                                <id>create-db</id>
                                <phase>pre-integration-test</phase>

                                <goals>
                                    <goal>execute</goal>
                                </goals>

                                <configuration>
                                    <autocommit>true</autocommit>
                                    <sqlCommand>
                                        DROP USER ao_user CASCADE;
                                        CREATE USER ao_user IDENTIFIED BY ao_password DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
                                        GRANT ALL PRIVILEGES TO ao_user WITH ADMIN OPTION;
                                        GRANT CONNECT TO ao_user;
                                    </sqlCommand>
                                    <onError>continue</onError>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>sqlserver</id>
            <properties>
                <!-- Default sql server port. -->
                <db.port>1433</db.port>
                
                <!-- Docker configuration section -->
                <docker.tag>2019-RC1</docker.tag><!-- Current latest version. Override in bamboo-specs -->
                <docker.image>mcr.microsoft.com/mssql/server:${docker.tag}</docker.image>
                <docker.wait.log>.*Recovery is complete. This is an informational message only. No user action is required..*</docker.wait.log><!-- Ready for connection != ready -->
                <docker.skip>false</docker.skip><!-- It is normally set to true for non docker dbs like H2 -->
                
                <!-- This is used for creating database and schema in maven by sql-maven-plugin -->
                <db.url.no.db>jdbc:sqlserver://${db.host}:${db.port}</db.url.no.db>

                <!-- These are used by DynamicJdbcConfiguration.buildJdbcConfiguration to build connection -->
                <db.username>sa</db.username>
                <db.password>AO_password12</db.password><!-- SQL Server requires complex password -->
                <db.system.username>sa</db.system.username>
                <db.system.password>AO_password12</db.system.password><!-- SQL Server requires complex password -->
                <db.url>${db.url.no.db};databaseName=${db.name}</db.url>
                <db.schema>ao_schema</db.schema>
                <ao.test.database>sqlserver</ao.test.database>
            </properties>
            
            <!-- From now on sqljdbc is default driver as jtds is outdated -->
            <dependencies>
                <dependency>
                    <groupId>com.microsoft.sqlserver</groupId>
                    <artifactId>${sqljdbc.artifactId}</artifactId>
                    <version>${sqljdbc.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <inherited>false</inherited>
                        <configuration>
                            <images>
                                <image>
                                    <name>${docker.image}</name>
                                    <run>
                                        <ports>
                                            <port>${db.port}:${db.port}</port>
                                        </ports>
                                        <env>
                                            <SA_PASSWORD>${db.password}</SA_PASSWORD>
                                            <ACCEPT_EULA>Y</ACCEPT_EULA>
                                            <MSSQL_PID>Express</MSSQL_PID>
                                        </env>
                                        <wait>
                                            <log>${docker.wait.log}</log>
                                            <time>120000</time>
                                        </wait>
                                        <log>
                                            <prefix>mssql</prefix>
                                        </log>
                                    </run>
                                </image>
                            </images>
                        </configuration>
                    </plugin>
                    
                    <!-- leberrigaud plugin doesn't work somehow, don't know why. -->
                    <!-- This will create testing database with default schema    -->
                    <!-- It is more verbose. Be verbose.                          -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>sql-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>com.microsoft.sqlserver</groupId>
                                <artifactId>${sqljdbc.artifactId}</artifactId>
                                <version>${sqljdbc.version}</version>
                            </dependency>
                        </dependencies>

                        <configuration>
                            <username>${db.system.username}</username>
                            <password>${db.system.password}</password>
                            <url>${db.url.no.db}</url>
                            <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
                            <skip>${docker.skip}</skip>
                        </configuration>

                        <executions>
                            <execution>
                                <id>create-db</id>
                                <phase>pre-integration-test</phase>

                                <goals>
                                    <goal>execute</goal>
                                </goals>

                                <configuration>
                                    <autocommit>true</autocommit>
                                    <sqlCommand>
                                        CREATE DATABASE ${db.name};
                                        USE ${db.name};
                                        CREATE SCHEMA ${db.schema};
                                    </sqlCommand>
                                    <onError>abort</onError>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <ao.test.database>${ao.test.database}</ao.test.database>
                                <plugin.root.directories>${basedir}/../activeobjects-test-plugin</plugin.root.directories>
                                <db.username>${db.username}</db.username>
                                <db.password>${db.password}</db.password>
                                <db.url>${db.url}</db.url>
                                <db.schema>${db.schema}</db.schema>
                            </systemPropertyVariables>
                            <excludedGroups>
                                com.atlassian.activeobjects.junit.H2Test,
                                com.atlassian.activeobjects.junit.HsqlTest,
                                com.atlassian.activeobjects.junit.MySqlTest,
                                com.atlassian.activeobjects.junit.OracleTest,
                                com.atlassian.activeobjects.junit.PostgresTest
                                <!--com.atlassian.activeobjects.junit.SqlServerTest-->
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>c3p0</id>
            <dependencies>
                <dependency>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                    <version>${c3p0.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <!-- This is the release profile that maven will activate for us when releasing -->
            <id>release</id>
            <dependencies>
                <!-- using hsql for the release -->
                <dependency>
                    <groupId>${hsqldb.groupid}</groupId>
                    <artifactId>hsqldb</artifactId>
                    <version>${hsqldb.version}</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>

            <properties>
                <ao.test.database>hsql</ao.test.database>
                <db.skip>true</db.skip>
            </properties>
        </profile>
    </profiles>
</project>
