<?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.oracle.test.server.parent</artifactId>
    <packaging>pom</packaging>

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

    <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>
