<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <parent>
      <groupId>org.apache.tuscany.sca.samples</groupId>
      <artifactId>tuscany-samples</artifactId>
      <version>2.0-Beta4</version>
      <relativePath />
   </parent>

   <artifactId>helloworld-webapp</artifactId>
   <version>2.0-Beta4</version>

   <name>Apache Tuscany SCA Samples Helloworld WebApp</name>
   <packaging>war</packaging>

   <properties>
      <tuscany.version>${project.version}</tuscany.version>
   </properties>

   <!-- ASF repositories so sample can be built from SVN without building trunk-->
   <repositories><repository>
       <id>apache.snapshots</id>
       <name>Apache Snapshot Repository</name>
       <url>http://repository.apache.org/snapshots</url>
       <releases><enabled>false</enabled></releases>
   </repository></repositories>
   <pluginRepositories><pluginRepository>
       <id>apache.snapshots</id>
       <name>Apache Snapshot Repository</name>
       <url>http://repository.apache.org/snapshots</url>
       <releases><enabled>false</enabled></releases>
   </pluginRepository></pluginRepositories>

   <dependencies>

      <dependency>
         <groupId>org.apache.tuscany.sca</groupId>
         <artifactId>tuscany-base-runtime</artifactId>
         <version>${tuscany.version}</version>
      </dependency>         

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

      <dependency>
         <groupId>net.sourceforge.htmlunit</groupId>
         <artifactId>htmlunit</artifactId>
         <version>2.6</version>
         <scope>test</scope>
         <exclusions>
             <exclusion>
                 <groupId>xalan</groupId>
                 <artifactId>xalan</artifactId>
             </exclusion> 
         </exclusions>        
      </dependency>

      <!-- replace HTMLUnit dependency with verstion that Tuscany is using -->
      <dependency>
          <groupId>xalan</groupId>
          <artifactId>xalan</artifactId>
          <version>2.7.0</version>
          <scope>test</scope>
          <exclusions>
             <exclusion>
                 <groupId>xml-apis</groupId>
                 <artifactId>xml-apis</artifactId>
             </exclusion>                              
          </exclusions>            
      </dependency>  

   </dependencies>

    <build>
       <plugins>

          <!-- this copies the SCA contribution from the helloworld sample into this webapp -->
          <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.samples</groupId>
                       <artifactId>helloworld</artifactId>
                       <version>${project.version}</version>
                       <!-- should really go in the target folder but i can't get jetty:run or tomcat:run to work using that -->
                       <outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>
                     </artifactItem>
                   </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <!-- to support running thw webapp with mvn tuscany:run -->
         <plugin>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-maven-plugin</artifactId>
            <version>${tuscany.version}</version>
         </plugin>

          <!-- to support using mvn jetty:run and also to run the webapp for the integration test -->
          <plugin>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>maven-jetty-plugin</artifactId>
             <version>6.1.26</version>
             <configuration>
                <contextPath>helloworld-webapp</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>
                       <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>

          <!-- to support using mvn tomcat:run -->
          <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>tomcat-maven-plugin</artifactId>
             <version>1.1</version>
          </plugin>

       </plugins>
    </build>
</project>
