<?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>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tuscany.sca.samples</groupId>
        <artifactId>tuscany-samples</artifactId>
        <version>2.0-SNAPSHOT</version>
        <relativePath>../../../pom.xml</relativePath>
    </parent>

    <artifactId>sample-calculator-bundle</artifactId>
    <name>Apache Tuscany SCA Sample OSGi Remote Services Calculator</name>

    <dependencies>
       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-feature-ejava</artifactId>
            <version>2.0-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-feature-webservice</artifactId>
            <version>2.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>runtime</scope>
        </dependency>
       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-node-launcher-equinox</artifactId>
            <version>2.0-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-node-impl-osgi</artifactId>
            <version>2.0-SNAPSHOT</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.osgi</groupId>
            <artifactId>services</artifactId>
            <version>3.2.0-v20090520-1800</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- Equinox Declarative Services -->
        <dependency>
            <groupId>org.eclipse.equinox</groupId>
            <artifactId>ds</artifactId>
            <version>1.1.0-v20090601</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.equinox</groupId>
            <artifactId>util</artifactId>
            <version>1.0.100-v20090520-1800</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <buildcommands>
                        <buildcommand>org.eclipse.pde.ManifestBuilder</buildcommand>
                        <buildcommand>org.eclipse.jdt.core.javabuilder</buildcommand>
                    </buildcommands>
                    <projectnatures>
                        <projectnature>org.eclipse.jdt.core.javanature</projectnature>
                        <projectnature>org.eclipse.pde.PluginNature</projectnature>
                    </projectnatures>
                    <classpathContainers>
                        <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER
                        </classpathContainer>
                    </classpathContainers>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>${basedir}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.tuscany.maven.plugins</groupId>
                <artifactId>maven-osgi-junit-plugin</artifactId>
                <version>1.0</version>
                <dependencies>
                   <dependency>
                      <groupId>org.apache.tuscany.sca</groupId>
                      <artifactId>tuscany-node-launcher-equinox</artifactId>
                      <version>${project.version}</version>
                   </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>osgi-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <systemProperties>
                                <property>
                                    <name>osgi.configuration.area</name>
                                    <value>${project.build.directory}/equinox</value>
                                </property>
                            </systemProperties>                        
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
