<?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>33</version>
        <relativePath />
    </parent>

    <artifactId>org.apache.sling.sample.slingshot</artifactId>
    <version>0.8.1-SNAPSHOT</version>
    <packaging>bundle</packaging>

    <name>Apache Sling Sample Slingshot</name>

    <!-- Properties -->
    <properties>
      <!-- If you set this to true, the scripts are mounted through the file resource provider! -->
      <fileMount>false</fileMount>
    </properties>
    
    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-samples.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-samples.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=sling-samples.git</url>
    </scm>

    <build>
        <plugins>
            <!-- Bundling the sample project -->
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <!-- Configure extra execution of 'manifest' in process-classes phase to make sure SCR metadata is generated before unit test runs -->
                    <execution>
                        <id>scr-metadata</id>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                        <configuration>
                            <supportIncrementalBuild>true</supportIncrementalBuild>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <instructions>
                        <!-- initial content to be loaded on bundle installation -->
                        <Sling-Initial-Content>
                            SLING-INF/content/slingshot;overwrite:=true;path:=/slingshot;maven:mount:=false,
                            SLING-INF/content/libs/slingshot;overwrite:=true;path:=/libs/slingshot;maven:mount:=true
                        </Sling-Initial-Content>
                    </instructions>
                    <!-- Export SCR metadata to classpath to have them available in unit tests -->
                    <exportScr>true</exportScr>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.sling</groupId>
                <artifactId>slingstart-maven-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>attach-prov-model</id>
                        <goals>
                            <goal>attach-slingfeature</goal>
                            <goal>attach-modelarchive</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <setFeatureVersions>true</setFeatureVersions>
                    <attach>
                        <type>jar</type>
                    </attach>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>src/main/resources/SLING-INF/content/**/*.json</exclude>
                        <exclude>src/main/resources/SLING-INF/content/slingshot/resources/css/*.css</exclude>
                        <exclude>src/main/resources/SLING-INF/content/slingshot/resources/js/*.js</exclude>
                        <exclude>src/main/resources/SLING-INF/content/slingshot/resources/fonts/*.svg</exclude>
                        <exclude>src/test/resources/**.json</exclude>
                        <exclude>**/*.woff2</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <!-- 
                <configuration>
                    <testSourceDirectory>src/main/it</testSourceDirectory>
                </configuration>
                 -->
                <executions>
                  <execution>
                    <goals>
                      <goal>integration-test</goal>
                      <goal>verify</goal>
                    </goals>
                  </execution>
                </executions>                
            </plugin>
        </plugins>
        
    </build>

    <profiles>
        <profile>
            <!--
                Use this profile to install the OSGi bundle
                automatically, during development
            -->
            <id>autoInstallBundle</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.sling</groupId>
                        <artifactId>maven-sling-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-bundle</id>
                                <goals>
                                    <goal>validate</goal>
                                    <goal>install</goal>
                                </goals>
                                <configuration>
                                    <mountByFS>${fileMount}</mountByFS>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <dependencies>
        <!-- OSGi -->
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.annotation.versioning</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- Apache Sling -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.api</artifactId>
            <version>2.11.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
            <version>2.0.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.jcr.base</artifactId>
            <version>2.2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-api</artifactId>
            <version>2.13.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
        	<groupId>javax.jcr</groupId>
        	<artifactId>jcr</artifactId>
        </dependency>
        <dependency>
        	<groupId>org.slf4j</groupId>
        	<artifactId>slf4j-api</artifactId>
        </dependency>
        
        <!-- test dependencies -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.sling-mock-oak</artifactId>
            <version>2.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
            <version>2.0.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.sling-mock</artifactId>
            <version>2.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
        </dependency>
    </dependencies>
</project>
