<?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.1-SNAPSHOT</version>
        <relativePath>../../../pom.xml</relativePath>
    </parent>

    <artifactId>sample-calculator-bundle-dynamic</artifactId>
    <name>Apache Tuscany SCA Sample OSGi Remote Services Dynamic Calculator</name>

    <dependencies>
       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-feature-ejava</artifactId>
            <version>2.0.1-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-feature-webservice</artifactId>
            <version>2.0.1-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.1-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-node-impl-osgi</artifactId>
            <version>2.0.1-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>
