<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->
<project 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>org.apache.sling</groupId>
        <artifactId>sling</artifactId>
        <version>34</version>
        <relativePath/>
    </parent>

    <artifactId>org.apache.sling.adapter.annotations.it</artifactId>
    <version>2.0.0</version>

    <name>Apache Sling Adapter Annotations IT</name>
    <description>
        Integration tests for OSGi DS 1.4 component property type annotations for Sling adapters
    </description>

    <properties>
        <sling.java.version>8</sling.java.version>
        <http.host>localhost</http.host>
        <!-- start with -DkeepITServerRunning=true to allow to rerun ITs or inspect the server after the ITs have been executed there -->
        <keepITServerRunning>false</keepITServerRunning>
        <annotations.bundle.version>MUST_BE_SET_BY_INVOKER</annotations.bundle.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.0.0-M5</version>
            </plugin>
            <plugin>
                <groupId>biz.aQute.bnd</groupId>
                <artifactId>bnd-maven-plugin</artifactId>
                <version>5.0.0</version>
            </plugin>
            <plugin>
                <!-- Find free ports to run our server -->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>reserve-server-port</id>
                        <goals>
                            <goal>reserve-network-port</goal>
                        </goals>
                        <phase>pre-integration-test</phase>
                        <configuration>
                            <portNames>
                                <!-- used port name must be stored in property because it must be used for the base url -->
                                <portName>http.port</portName>
                            </portNames>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!-- the Sling instance is provisioned from the model in src/main/provisioning/it-model.txt -->
                <groupId>org.apache.sling</groupId>
                <artifactId>slingstart-maven-plugin</artifactId>
                <!-- for https://issues.apache.org/jira/browse/SLING-7662 -->
                <version>1.8.2</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>customise-starter</id>
                        <goals>
                            <goal>prepare-package</goal>
                        </goals>
                        <configuration>
                            <modelDirectory>${project.basedir}/src/test/provisioning</modelDirectory>
                            <usePomDependencies>true</usePomDependencies>
                        </configuration>
                    </execution>
                    <execution>
                        <id>package-starter</id>
                        <goals>
                            <goal>package</goal>
                        </goals>
                        <configuration>
                            <attachArtifact>false</attachArtifact>
                            <modelDirectory>${project.basedir}/src/test/provisioning</modelDirectory>
                            <usePomDependencies>true</usePomDependencies>
                        </configuration>
                    </execution>
                    <execution>
                        <id>start-container-before-IT</id>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop-container-after-IT</id>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                        <configuration>
                            <shouldBlockUntilKeyIsPressed>${keepITServerRunning}</shouldBlockUntilKeyIsPressed>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <servers>
                        <!-- this configuration applies to both 'start' and 'stop' -->
                        <server>
                            <id>singleinstance</id>
                            <port>${http.port}</port>
                            <vmOpts>${sling.vm.options}</vmOpts>
                            <stdOutFile>sling/logs/stdout.log</stdOutFile>
                        </server>
                    </servers>
                    <!-- this configuration only applies to 'prepare-package' and 'package' -->
                    <disableExtendingMavenClasspath>true</disableExtendingMavenClasspath>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <baseUrl>http://${http.host}:${http.port}/</baseUrl>
                        <bundleFile>${project.build.directory}/${project.build.finalName}.jar</bundleFile>
                        <bundleSymbolicName>${project.artifactId}</bundleSymbolicName>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- The bundle under test -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.adapter.annotations</artifactId>
            <version>${annotations.bundle.version}</version>
        </dependency>

        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.component.annotations</artifactId>
            <version>1.3.0</version><!-- to be compliant with DS 1.3 -->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.api</artifactId>
            <!-- keep the version in sync with it-model-txt (SLING-8080) -->
            <version>2.20.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.adapter</artifactId>
            <version>2.1.10</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- testing dependencies -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.servlets.resolver</artifactId>
            <!-- keep the version in sync with it-model-txt (SLING-8080) -->
            <version>2.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.clients</artifactId>
            <version>2.0.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.rules</artifactId>
            <version>2.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>