<?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</groupId>
    <artifactId>apache</artifactId>
    <version>20</version><!-- like turbine parent -->
  </parent>
  <groupId>org.apache.turbine</groupId>
  <artifactId>turbine-webapp-5.1-docker</artifactId>
  <version>2.0.0-SNAPSHOT</version>
  <packaging>maven-archetype</packaging>

  <name>Archetype - Turbine 5.0 WebApp</name>
  <description>This archetype sets up a web application project based on Apache Turbine 5.1 and torque 4.1 with docker compose</description>
  <url>https://turbine.apache.org</url>

  <inceptionYear>2011</inceptionYear>

  <scm>
    <connection>scm:git:https://github.com/apache/turbine-archetypes</connection>
    <developerConnection>scm:git:https://github.com/apache/turbine-archetypes</developerConnection>
    <url>scm:git:https://github.com/apache/turbine-archetypes</url>
  </scm>
  <properties>
	<turbine_database_url>jdbc:mysql://localhost:3306/</turbine_database_url>
    <docker>false</docker>
    <app_volume_local_repo>not_used</app_volume_local_repo>
  </properties>
  
 <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.archetype</groupId>
        <artifactId>archetype-packaging</artifactId>
        <version>3.0.1</version>
      </extension>
    </extensions>
	
	<plugins>
	<!-- filtering for docker -->
	<plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/test-classes</outputDirectory>
			  <resources>          
                <resource>
                  <directory>src/test/resources</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>
	</plugins>

    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-archetype-plugin</artifactId>
          <version>3.0.1</version>
           <!-- skip tests in generated archetype's pom, here the integration-test would be skipped -->
          <!--configuration>
            <skip>true</skip>
          </configuration-->   
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  
  <profiles>
		<!-- to test in integration-test -->
        <profile>
            <id>docker</id>
            <activation>
              <property>
                <name>docker</name>
              </property>
             </activation>
             <properties>
				<turbine_database_url>jdbc:mysql://db:3306/</turbine_database_url>
				<!-- to provide your locale maven repo, required if you need local snapshot builds -->
				<app_volume_local_repo>${settings.localRepository}</app_volume_local_repo>
                <docker>true</docker>
            </properties>
        </profile>
    </profiles>

</project>
