<?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-sca</artifactId>
        <version>2.0-M5.1</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>sample-helloworld-webapp</artifactId>
    <name>Apache Tuscany SCA Sample Helloworld</name>
    <packaging>war</packaging>

    <dependencies>

        <dependency>
            <groupId>org.apache.tuscany.sca.shades</groupId>
            <artifactId>tuscany-base-nodep</artifactId>
            <version>2.0-M5.1</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
       <finalName>helloworld</finalName>
       <plugins>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>copy</id>
                <phase>compile</phase>
                <goals>
                  <goal>copy</goal>
                </goals>
                <configuration>
                   <artifactItems>
                     <artifactItem>
                       <groupId>org.apache.tuscany.sca</groupId>
                       <artifactId>sample-helloworld</artifactId>
                       <version>${pom.version}</version>
                       <!-- should really go in the target folder but i can't get jetty:run to work using that -->
                       <outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>
                     </artifactItem>
                   </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>maven-jetty-plugin</artifactId>
             <version>6.1.18</version>
             <configuration>
                <contextPath>helloworld</contextPath>
                <stopKey>foo</stopKey>
                <stopPort>9999</stopPort>
             </configuration>
             <executions>
                <execution>
                   <id>start-jetty</id>
                   <phase>process-test-classes</phase>
                   <goals>
                       <goal>run</goal>
                   </goals>
                   <configuration>
                       <overrideWebXml>src/test/resources/test-web.xml</overrideWebXml>
                       <scanIntervalSeconds>0</scanIntervalSeconds>
                       <daemon>true</daemon>
                       <connectors>
                          <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                             <port>8085</port>
                          </connector>
                       </connectors>
                   </configuration>
                </execution>
                <execution>
                   <id>stop-jetty</id>
                   <phase>prepare-package</phase>
                   <goals>
                       <goal>stop</goal>
                   </goals>
                </execution>
             </executions>
          </plugin>
       </plugins>
    </build>

</project>
