<!--
  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/maven-v4_0_0.xsd">
    <parent>
        <groupId>ipojo.tests</groupId>
        <artifactId>ipojo.tests</artifactId>
        <version>1.5.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <groupId>ipojo.tests</groupId>
    <version>${ipojo.wbp.snapshot}</version>
    <modelVersion>4.0.0</modelVersion>
    <packaging>bundle</packaging>
    <name>iPOJO White Board Pattern Handler Test Suite</name>
    <artifactId>tests.whiteboard</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
             <version>${ipojo.wbp.snapshot}</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
            <version>1.1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>4.0.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Private-Package>org.apache.felix.ipojo.test,
                            org.apache.felix.ipojo.test.scenarios.util</Private-Package>
                        <Test-Suite>org.apache.felix.ipojo.test.WbpTests</Test-Suite>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-ipojo-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>ipojo-bundle</goal>
                        </goals>
                        <configuration>
                            <ignoreAnnotations>true</ignoreAnnotations>
                            <metadata>
             <![CDATA[
             <ipojo
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
            xmlns="org.apache.felix.ipojo"
            xmlns:wbp="org.apache.felix.ipojo.whiteboard">
            <component classname="org.apache.felix.ipojo.test.FooProvider" name="fooprovider">
              <provides>
                <property field="foo" value="foo"/>
              </provides>
            </component>

            <component classname="org.apache.felix.ipojo.test.FooWhiteBoardPattern" name="under-providers">
                <wbp:wbp
                  filter="(objectclass=org.apache.felix.ipojo.test.FooService)"
                  onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
                />
                <provides/>
            </component>

            <component classname="org.apache.felix.ipojo.test.FooWhiteBoardPattern" name="under-properties">
                <wbp:wbp filter="(foo=foo)" onArrival="onArrival" onDeparture="onDeparture"
                  onModification="onModification"
                />
                <provides/>
            </component>

            <component classname="org.apache.felix.ipojo.test.FooWhiteBoardPattern" name="under-providers-2">
                <wbp:whiteboards>
                  <wbp:wbp
                    filter="(objectclass=org.apache.felix.ipojo.test.FooService)"
                    onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
                  />
                </wbp:whiteboards>
                <provides/>
            </component>

            <component classname="org.apache.felix.ipojo.test.FooWhiteBoardPattern" name="under-providers-lifecycle">
                <wbp:wbp
                  filter="(objectclass=org.apache.felix.ipojo.test.FooService)"
                  onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
                />
                <provides/>
                <callback transition="validate" method="start"/>
                <callback transition="invalidate" method="stop"/>
            </component>
          </ipojo>
          ]]>
                            </metadata>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-junit4osgi-plugin</artifactId>
                <version>1.1.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <configuration>
                                <org.osgi.http.port>8083</org.osgi.http.port>
                            </configuration>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
