<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-tools-examples</artifactId>
    <version>3.0-SNAPSHOT</version>
  </parent>

  <artifactId>velocity-tools-examples-showcase</artifactId>
  <packaging>war</packaging>

  <name>Apache Velocity Tools Examples - Showcase</name>
  <description>Showcase of features in Velocity Tools.</description>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity-tools-view</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.httpunit</groupId>
      <artifactId>httpunit</artifactId>
      <version>1.7.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <executions>
          <execution>
            <id>integration-test</id>
            <goals>
              <goal>integration-test</goal>
            </goals>
          </execution>
          <execution>
            <id>verify</id>
            <goals>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.6.8</version>
        <configuration>
          <container>
            <containerId>jetty9x</containerId>
          </container>
          <configuration>
            <files>
              <copy>
                <file>${project.basedir}/src/main/policy/showcase.policy</file>
                <todir>/</todir>
                <configfile>true</configfile>
              </copy>
            </files>
            <properties>
              <!-- variables referenced in the showcase policy file -->
              <!-- commented since broken on windows due to a cargo bug like MNG-6386
              <cargo.container>${project.build.directory}/cargo/installs</cargo.container>
              <cargo.repository>${settings.localRepository}</cargo.repository>
              <cargo.webapp>${project.build.directory}/${project.artifactId}</cargo.webapp>
              <cargo.velocity-engine.version>${velocity.engine.version}</cargo.velocity-engine.version>
              <cargo.velocity-tools.version>${project.version}</cargo.velocity-tools.version>
              <cargo.slf4j.version>${slf4j.version}</cargo.slf4j.version>
              <cargo.webapp-slf4j-logger.version>${webapp-slf4j-logger.version}</cargo.webapp-slf4j-logger.version>
              -->
              <cargo.jvmargs>
                <!-- enable remote debugging
                -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006
                -->

                <!-- enable Jetty debug log
                -Dorg.eclipse.jetty.LEVEL=DEBUG
                -->

                <!-- enable security manager
                   (disabled for now, see above note about policy file)
                -Djava.security.manager
                -Djava.security.policy=${project.build.directory}/cargo/configurations/jetty9x/showcase.policy
                 -->
              </cargo.jvmargs>
            </properties>
          </configuration>
        </configuration>
        <executions>
          <execution>
            <configuration>
              <wait>false</wait>
            </configuration>
            <id>start-server</id>
            <goals>
              <goal>start</goal>
            </goals>
            <phase>pre-integration-test</phase>
          </execution>
          <execution>
            <id>stop-server</id>
            <goals>
              <goal>stop</goal>
            </goals>
            <phase>post-integration-test</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
