<project>
  <groupId>ipojo.tests</groupId>
  <version>1.3.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>1.3.0-SNAPSHOT</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>1.3.0-SNAPSHOT</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/1.1.0-SNAPSHOT/core.xsd 
	 					org.apache.felix.ipojo.whiteboard http://felix.apache.org/ipojo/schemas/1.1.0-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>
