<project>
  <groupId>ipojo.tests</groupId>
  <version>1.5.0-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>
      <version>${pom.version}</version>
    </dependency>
	<dependency>
		<groupId>org.apache.felix</groupId>
		<artifactId>org.osgi.core</artifactId>
		<version>1.0.1</version>
	</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>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.4.3</version>
        <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>
		<version>${pom.version}</version>
		<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
	 					org.apache.felix.ipojo.whiteboard http://felix.apache.org/ipojo/schemas/SNAPSHOT/whiteboard-pattern.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>
					</ipojo>
					]]>
					</metadata>
				</configuration>
			</execution>
		</executions>
	</plugin>
    </plugins>
  </build>
</project>
