<!--
  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:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>2.1</version>
        <relativePath>../../../pom/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>org.apache.felix.ipojo.runtime.composite-it</artifactId>
    <version>1.9.0-SNAPSHOT</version>
    <name>Apache Felix iPOJO Runtime Project ~ Composite Integration Tests</name>
    <packaging>pom</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.servicemix.tooling</groupId>
                <artifactId>depends-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>generate-config</id>
                        <goals>
                            <goal>generate-depends-file</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- check src only (except remote resources additions) -->
                    <includes>
                        <include>src/**</include>
                    </includes>
                    <excludes>
                        <exclude>src/main/appended-resources/**</exclude>
                        <exclude>**/*.iml</exclude>
                        <!-- Exclude iml files -->
                        <!-- Exclude target folders that may have been created during
                         the integration-tests -->
                        <exclude>src/it/**/target/**/*</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <properties>
        <!-- a new barrier check was pushed in the 3.0.1 -->
        <exam.version>3.0.1</exam.version>
        <url.version>1.5.1</url.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-native</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit4</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-link-mvn</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.url</groupId>
            <artifactId>pax-url-aether</artifactId>
            <version>${url.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>0.9.6</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>0.9.6</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.9.5</version>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.tinybundles</groupId>
            <artifactId>tinybundles</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo</artifactId>
            <version>1.9.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.composite</artifactId>
            <version>1.9.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
            <version>1.9.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.configadmin</artifactId>
            <version>1.6.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>osgi-helpers</artifactId>
            <version>0.6.1-SNAPSHOT</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>tinybundles-ipojo</artifactId>
            <version>0.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.handler.eventadmin</artifactId>
            <!--
            We use the released version as we don't really have to do any behavioral test on the handler in the core
            test.
            -->
            <version>1.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.log</artifactId>
            <version>1.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.url</groupId>
            <artifactId>pax-url-wrap</artifactId>
            <version>1.5.2</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <descriptorRefs>
                                        <descriptorRef>project</descriptorRef>
                                    </descriptorRefs>
                                    <!-- we don't want to attach all the assemblies, such as bz2 -->
                                    <attach>false</attach>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <!-- only attach the project and bin assemblies, in tar.gz and zip flavors -->
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-assemblies</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>attach-artifact</goal>
                                </goals>
                                <configuration>
                                    <artifacts>
                                        <artifact>
                                            <file>
                                                ${project.build.directory}/${project.artifactId}-${project.version}-project.tar.gz
                                            </file>
                                            <classifier>project</classifier>
                                            <type>tar.gz</type>
                                        </artifact>
                                        <artifact>
                                            <file>
                                                ${project.build.directory}/${project.artifactId}-${project.version}-project.zip
                                            </file>
                                            <classifier>project</classifier>
                                            <type>zip</type>
                                        </artifact>
                                    </artifacts>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>knopflerfish</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>knopflerfish</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>knopflerfish</pax.exam.framework>
            </properties>
            <repositories>
                <repository>
                    <id>knopflerfish-releases</id>
                    <url>http://www.knopflerfish.org/maven2</url>
                </repository>
            </repositories>
            <dependencies>
                <dependency>
                    <groupId>org.knopflerfish</groupId>
                    <artifactId>framework</artifactId>
                    <version>5.2.0</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                    <version>4.3.1</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>equinox</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>equinox</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>equinox</pax.exam.framework>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.eclipse.tycho</groupId>
                    <artifactId>org.eclipse.osgi</artifactId>
                    <version>3.8.1.v20120830-144521</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                    <version>4.3.1</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>felix</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>felix</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>felix</pax.exam.framework>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.framework</artifactId>
                    <version>4.2.0</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                    <version>4.3.1</version>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <!--
                avoid using the invoker and use a regular reactor instead.
                it must be coupled with another profile to select the right OSGi framework implementation

                * mvn clean install -Preactor,felix
                * mvn clean install -Preactor,equinox
                * mvn clean install -Preactor,knopflerfish
             -->
            <id>reactor</id>

            <modules>
                <module>src/it/ipojo-composite-runtime-test</module>
                <module>src/it/ipojo-composite-import-export-test</module>
                <module>src/it/ipojo-composite-instance-test</module>
                <module>src/it/ipojo-composite-service-providing-test</module>
            </modules>

            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.14.1</version>
                            <configuration>
                                <systemPropertyVariables>
                                    <!-- TIME_FACTOR can be set from the command line with -DTIME_FACTOR=9-->
                                    <TIME_FACTOR>${TIME_FACTOR}</TIME_FACTOR>
                                </systemPropertyVariables>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>

        </profile>

        <profile>
            <id>test</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-invoker-plugin</artifactId>
                        <version>1.8</version>
                        <configuration>
                            <streamLogs>true</streamLogs>
                            <goals>
                                <goal>clean</goal>
                                <goal>test</goal>
                            </goals>
                            <cloneClean>true</cloneClean>
                        </configuration>
                        <executions>
                            <execution>
                                <id>regular</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <profiles>
                                        <profile>felix</profile>
                                    </profiles>
                                    <cloneProjectsTo>${project.build.directory}/regular</cloneProjectsTo>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>test-all</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-invoker-plugin</artifactId>
                        <version>1.8</version>
                        <configuration>
                            <streamLogs>true</streamLogs>
                            <goals>
                                <goal>clean</goal>
                                <goal>test</goal>
                            </goals>
                            <cloneClean>true</cloneClean>
                        </configuration>
                        <executions>
                            <execution>
                                <id>equinox-native</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <profiles>
                                        <profile>equinox</profile>
                                    </profiles>
                                    <cloneProjectsTo>${project.build.directory}/equinox-native</cloneProjectsTo>

                                </configuration>
                            </execution>
                            <execution>
                                <id>felix-native</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <profiles>
                                        <profile>felix</profile>
                                    </profiles>
                                    <cloneProjectsTo>${project.build.directory}/felix-native</cloneProjectsTo>
                                </configuration>
                            </execution>
                            <execution>
                                <id>knopflerfish-native</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <profiles>
                                        <profile>knopflerfish</profile>
                                    </profiles>
                                    <cloneProjectsTo>${project.build.directory}/knopflerfish-native</cloneProjectsTo>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <repositories>
        <!-- Temporal addition of this repository until the osgi-helper are released -->
        <!-- TODO remove this before the release -->
        <repository>
            <id>ow2.snapshots</id>
            <url>http://repository.ow2.org/nexus/content/repositories/snapshots/</url>
        </repository>
    </repositories>
</project>
