<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (c) 2019, 2021 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0 which is available at
    http://www.eclipse.org/legal/epl-2.0,
    or the Eclipse Distribution License v. 1.0 which is available at
    http://www.eclipse.org/org/documents/edl-v10.php.

    SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause

-->

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <name>EclipseLink Test Server Parent</name>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.test.server.parent</artifactId>
    <packaging>pom</packaging>

    <parent>
        <artifactId>org.eclipse.persistence.parent</artifactId>
        <groupId>org.eclipse.persistence</groupId>
        <version>3.1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <properties>
        <spotbugs.skip>true</spotbugs.skip>
    </properties>

    <build>
        <plugins>
            <!--Download and unpack JEE server automatically if property skip.jee.server.installation=false-->
            <plugin>
                <groupId>com.googlecode.maven-download-plugin</groupId>
                <artifactId>download-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install-jee-server</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <skip>${skip.jee.server.installation}</skip>
                            <url>${installation.url}</url>
                            <unpack>true</unpack>
                            <outputDirectory>${test.directory}</outputDirectory>
                            <md5>${installation.checksum.md5}</md5>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--Skip WildFly configuration if server binaries are not available.-->
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <configuration>
                    <source>
                        <![CDATA[
                        project.properties.setProperty("skip.wildfly.configuration", "true")
                        if (properties["cargo.container.installation.home"] == null) {
                            return
                        }
                        def wildFlyHomeDir = new File(properties["cargo.container.installation.home"])
                        log.info "WildFlyHomeDir exists:" + wildFlyHomeDir.exists()
                        if (wildFlyHomeDir.exists() && properties["server.name"] == "jboss") {
                            project.properties.setProperty("skip.wildfly.configuration", "false")
                        }
                        log.info "Skip WildFly configuration: " + project.properties.getProperty("skip.wildfly.configuration")
                        ]]>
                    </source>
                </configuration>
            </plugin>
            <!--Set current EclipseLink JARs into JBoss/WildFly org.eclipse.persistence system module-->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xml-maven-plugin</artifactId>
                <configuration>
                    <skip>${skip.wildfly.configuration}</skip>
                    <transformationSets>
                        <transformationSet>
                            <dir>${cargo.container.installation.home}/modules/system/layers/base/org/eclipse/persistence/main</dir>
                            <includes>
                                <include>module.xml</include>
                            </includes>
                            <stylesheet>${project.build.testOutputDirectory}/wildfly/eclipselink-wildfly-module.xsl</stylesheet>
                            <outputDir>${cargo.container.installation.home}/modules/system/layers/base/org/eclipse/persistence/main</outputDir>
                        </transformationSet>
                    </transformationSets>
                </configuration>
            </plugin>
            <!--Copy current EclipseLink JARs into GlassFish modules directory-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>configure-glassfish-modules</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <skip>${skip.glassfish.configuration}</skip>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.asm</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.asm_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.core</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.core_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.dbws</artifactId>
                                    <destFileName>org.eclipse.persistence.dbws_DEV.jar</destFileName>
                                    <version>${project.version}</version>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.jpa</artifactId>
                                    <destFileName>org.eclipse.persistence.jpa_DEV.jar</destFileName>
                                    <version>${project.version}</version>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.jpa.jpql</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.jpa.jpql_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.jpa.modelgen.processor_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.moxy</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.moxy_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.nosql</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.nosql_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.oracle</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.oracle_DEV.jar</destFileName>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>org.eclipse.persistence</groupId>
                                    <artifactId>org.eclipse.persistence.sdo</artifactId>
                                    <version>${project.version}</version>
                                    <destFileName>org.eclipse.persistence.sdo_DEV.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>${cargo.container.installation.home}/glassfish/modules</outputDirectory>
                            <overWriteReleases>true</overWriteReleases>
                            <overWriteSnapshots>true</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <configuration>
                    <container>
                        <dependencies>
                            <dependency>
                                <groupId>${db.driver.groupId}</groupId>
                                <artifactId>${db.driver.artifactId}</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.eclipse.persistence</groupId>
                                <artifactId>org.eclipse.persistence.asm</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.eclipse.persistence</groupId>
                                <artifactId>org.eclipse.persistence.jpa.jpql</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.eclipse.persistence</groupId>
                                <artifactId>org.eclipse.persistence.core</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.eclipse.persistence</groupId>
                                <artifactId>org.eclipse.persistence.jpa</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.eclipse.persistence</groupId>
                                <artifactId>org.eclipse.persistence.moxy</artifactId>
                            </dependency>
                        </dependencies>
                        <!--<append>false</append>-->
                        <containerId>${server.containerId}</containerId>
                        <home>${cargo.container.installation.home}</home>
                        <log>${project.build.directory}/logs/${server.containerId}.log</log>
                        <output>${project.build.directory}/logs/${server.containerId}.out</output>
                        <systemProperties>
                            <!--Required due troubles with Docker-->
                            <java.net.preferIPv4Stack>true</java.net.preferIPv4Stack>
                        </systemProperties>
                        <timeout>1800000</timeout>
                    </container>
                    <configuration>
                        <!--<type>standalone</type>-->
                        <properties>
                            <cargo.servlet.port>${server.http.port}</cargo.servlet.port>
                            <!--<cargo.jboss.configuration>default</cargo.jboss.configuration>-->
                            <cargo.rmi.port>${server.rmi.port}</cargo.rmi.port>
                            <cargo.logging>high</cargo.logging>
                            <cargo.datasource.datasource1>
                                cargo.datasource.driver=${db.xa.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name}|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}|
                                cargo.datasource.type=${datasource.type}|
                                cargo.datasource.transactionsupport=${datasource.transactionsupport}|
                                cargo.datasource.properties=${db.properties}
                            </cargo.datasource.datasource1>
                            <cargo.datasource.datasource2>
                                cargo.datasource.driver=${db.xa.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name}2|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}|
                                cargo.datasource.type=${datasource.type}|
                                cargo.datasource.transactionsupport=${datasource.transactionsupport}|
                                cargo.datasource.properties=${db.properties}
                            </cargo.datasource.datasource2>
                            <cargo.datasource.datasource3>
                                cargo.datasource.driver=${db.xa.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name}3|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}|
                                cargo.datasource.type=${datasource.type}|
                                cargo.datasource.transactionsupport=${datasource.transactionsupport}|
                                cargo.datasource.properties=${db.properties}
                            </cargo.datasource.datasource3>
                            <cargo.datasource.datasource4>
                                cargo.datasource.driver=${db.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name-non-jta}|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}
                            </cargo.datasource.datasource4>
                            <cargo.datasource.datasource5>
                                cargo.datasource.driver=${db.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name-non-jta}2|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}
                            </cargo.datasource.datasource5>
                            <cargo.datasource.datasource6>
                                cargo.datasource.driver=${db.driver}|
                                cargo.datasource.url=${db.url}|
                                cargo.datasource.jndi=${data-source-name-non-jta}3|
                                cargo.datasource.username=${db.user}|
                                cargo.datasource.password=${db.pwd}
                            </cargo.datasource.datasource6>
                        </properties>
                    </configuration>
                    <!--<wait>false</wait>-->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
