<?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</groupId>
        <artifactId>tuscany-itest</artifactId>
        <version>1.7-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <artifactId>itest-osgi-tuscany-test-bundles</artifactId>
    <name>Apache Tuscany OSGi-Based Tuscany Runtime Test Bundles</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-sca-api</artifactId>
            <version>1.7-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-host-embedded</artifactId>
            <version>1.7-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.main</artifactId>
            <version>1.0.4</version>
        </dependency>


    </dependencies>

    <build>
        <finalName>itest-osgi-tuscany-test-bundles</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>

                <dependencies>
                    <dependency>
                        <groupId>ant</groupId>
                        <artifactId>ant-trax</artifactId>
                        <version>1.6.5</version>
                    </dependency>
                </dependencies>

                <executions>
                    <execution>
                        <id>create-bundles</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <ant antfile="./build-bundles.xml" target="create-bundles">
                                    <property name="jar.dir" value="target" />
                                    <property name="files.dir" value="target/classes" />
                                    <property name="jar.file.name" value="SupplyChain.jar" />
                                    <property name="manifest.file.name" value="META-INF/SupplyChain.mf" />
                                    <property name="files.list"
                                        value="supplychain/customer/*
                                               supplychain/retailer/*
                                               supplychain/warehouse/*
                                               supplychain/shipper/*
                                               supplychain/supplychain.composite
                                               META-INF/sca-contribution.xml" />

                                </ant>
                                <ant antfile="./build-bundles.xml" target="create-bundles">
                                    <property name="jar.dir" value="target" />
                                    <property name="files.dir" value="target/classes" />
                                    <property name="jar.file.name" value="SupplyChainClient.jar" />
                                    <property name="manifest.file.name" value="META-INF/SupplyChainClient.mf" />
                                    <property name="files.list"
                                        value="supplychain/client/*" />
                                </ant>
                                <ant antfile="./build-bundles.xml" target="create-bundles">
                                    <property name="jar.dir" value="target" />
                                    <property name="files.dir" value="target/classes" />
                                    <property name="jar.file.name" value="SupplyChainWS.jar" />
                                    <property name="manifest.file.name" value="META-INF/SupplyChain.mf" />
                                    <property name="files.list"
                                        value="supplychain/customer/*
                                               supplychain/retailer/*
                                               supplychain/warehouse/*
                                               supplychain/shipper/*
                                               supplychain/ws/supplychain.composite
                                               supplychain/ws/Customer.wsdl
                                               META-INF/sca-contribution.xml" />

                                </ant>

                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
