<?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.
*#
#set($dollar = '$')
#macro (var $label)${dollar}{${label}}#end
<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>
    <groupId>${package}</groupId>
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    <packaging>war</packaging>

    <name>${turbine_app_name}</name>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!-- (target) resource and filtering is not used  at all ? 
            at least removed setting absolute path e.g. with #var("project.build.directory"), 
            which does thrown an exception with mvn eclipse:eclipse - path is then incorrectly relativized.
                --> 
            <resource> 
                <targetPath>../torque/schema</targetPath>
                <filtering>true</filtering>
                <directory>src/main/torque-schema</directory>
                <includes>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <includes>
                    <include>*.xml</include>
                    <include>*.properties</include>
                </includes>
            </testResource>
        </testResources>
        <plugins>
            <!-- test will not fail in turbine 4.0.1 -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
              <configuration>
                <skipTests>#var("skipTests")</skipTests>
              </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>#var("maven.compile.source")</source>
                    <target>#var("maven.compile.target")</target>
                    <encoding>#var("project.build.sourceEncoding")</encoding>
                </configuration>
            </plugin>
             <plugin>
                <groupId>org.apache.torque</groupId>
                <artifactId>torque-maven-plugin</artifactId>
                <version>4.0</version>
                <configuration>
                    <schemaDir>#var("project.basedir")/src/main/torque-schema</schemaDir>
                    <useClasspath>true</useClasspath>
                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
                </configuration>
                <executions>
                  <execution>
                    <id>torque-om</id>
                    <phase>generate-sources</phase>
                    <goals>
                      <goal>generate</goal>
                    </goals>
                    <configuration>
                      <packaging>classpath</packaging>
                      <configPackage>org.apache.torque.templates.om</configPackage>
                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
                      <loglevel>error</loglevel>
                      <options>
                        <torque.database>${turbine_database_adapter}</torque.database>
                        <torque.om.package>${package}.om</torque.om.package>
                        <torque.om.addGetByNameMethods>false</torque.om.addGetByNameMethods>
                        <torque.om.save.saveException>TorqueException</torque.om.save.saveException>
                        <torque.om.useIsForBooleanGetters>true</torque.om.useIsForBooleanGetters>
                        <torque.om.useManagers>false</torque.om.useManagers>
                        <torque.om.addTimeStamp>true</torque.om.addTimeStamp>
                        <torque.om.objectIsCaching>true</torque.om.objectIsCaching>
                        <torque.om.save.addSaveMethods>true</torque.om.save.addSaveMethods>
                        <torque.om.addGetByNameMethods>true</torque.om.addGetByNameMethods>
                        <torque.om.complexObjectModel>true</torque.om.complexObjectModel>
                      </options>
                      <!-- keeping defaultOutputDir in default ${project.build.directory}/generated-sources will havee the base classes there -->
                      <!-- we want the classes, which may be custumoized in the source directory. Ignore the warning about generated-java -->
                      <outputDirMap>
                        <modifiable>#var("project.build.sourceDirectory")</modifiable>
                      </outputDirMap>
                    </configuration>
                  </execution>
                  <execution>
                    <id>torque-sql-mysql</id><!-- ${turbine_database_adapter} -->
                    <phase>generate-sources</phase>
                    <goals>
                      <goal>generate</goal>
                    </goals>
                    <configuration>
                      <packaging>classpath</packaging>
                      <configPackage>org.apache.torque.templates.sql</configPackage>
                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
                      <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/mysql</defaultOutputDir>
                      <defaultOutputDirUsage>none</defaultOutputDirUsage>
                      <loglevel>error</loglevel>
                      <options>
                        <torque.database>mysql</torque.database>
                      </options>
                    </configuration>
                  </execution>
              </executions>
              <dependencies>
                 <dependency>
                    <groupId>org.apache.torque</groupId>
                    <artifactId>torque-templates</artifactId>
                    <version>4.0</version>
                  </dependency>
              </dependencies>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifestEntries>
                        <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
                        <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
                    </manifestEntries>
                </archive>
                <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
            </configuration>
          </plugin>
        <!-- Required to execute torque database build -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>sql-maven-plugin</artifactId>
          <version>1.5</version>
          <configuration>
            <!-- Please update with your database configuration -->
            <driver>${turbine_database_driver}</driver>
            <url>${turbine_database_url}${turbine_database_name}</url>
            <username>${turbine_database_user}</username>
            <password>${turbine_database_password}</password>
            <onError>continue</onError>
            <autocommit>true</autocommit>
            <orderFile>descending</orderFile>
          </configuration>
          <!-- update with your database driver dependency -->
          <!-- this is mysql specific -->
          <dependencies>
            <dependency>
              <artifactId>mysql-connector-java</artifactId>
              <groupId>mysql</groupId>
              <version>5.1.44</version>
            </dependency>
          </dependencies>
          <!-- this is mysql specific -->
          <executions>
            <execution>
                <id>create-db</id>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <orderFile>ascending</orderFile>
                  <fileset>
                    <basedir>#var("project.build.directory")/generated-sql/torque/mysql</basedir>
                    <!-- basedir>${basedir}/target/generated-sql</basedir -->
                    <includes>
                      <include>*.sql</include>
                    </includes>
                  </fileset>
              </configuration>
            </execution>
            <execution>
              <id>create-data</id>
              <phase>pre-integration-test</phase>
              <goals>
                <goal>execute</goal>
              </goals>
              <configuration>
                <orderFile>ascending</orderFile>
                <srcFiles>
                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_application-data.sql</srcFile>
                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
                </srcFiles>              
              </configuration>
            </execution>
          </executions>
        </plugin>
        <!-- jetty:run checks deployed war http://localhost:8081/app/ 
           Using jetty 8 as supporting java 6. Other specs cft. http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/what-jetty-version.html  -->
        <plugin>
           <groupId>org.mortbay.jetty</groupId>
           <artifactId>jetty-maven-plugin</artifactId>
           <version>8.1.16.v20140903</version>
          <configuration>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <dumpOnStart>true</dumpOnStart>
            <reload>manual</reload>
            <connectors>
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
              <port>8081</port>
            </connector>
            </connectors>
            <!--webApp>
              <contextPath>/app</contextPath>
            </webApp-->
          </configuration>
        </plugin>
      </plugins>
    </build>

    <dependencies>
    
    <!-- update with the database driver of your choice -->
    <dependency>
      <artifactId>mysql-connector-java</artifactId>
      <groupId>mysql</groupId>
      <version>5.1.44</version>
    </dependency>    
      <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>activation</artifactId>
          <version>1.1.1</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
          <version>1.4.5</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.turbine</groupId>
          <artifactId>turbine</artifactId>
          <version>#var("turbine.core")</version>
      </dependency>
      <!-- slf4j still optional in 4.0 -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
       <dependency>     <!-- delegate slf4j to log4j -->
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
       </dependency>
       <dependency>     <!-- redirect JCL to slf4j -->
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <!-- yaafi is optional. NOTICE: 1.0.7 has group org.apache.turbine not org.apache.fulcrum  -->
      <dependency>
        <groupId>org.apache.turbine</groupId>
        <artifactId>fulcrum-yaafi</artifactId>
        <version>1.0.7</version>
      </dependency>
      <!-- if using intake -->
      <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-intake</artifactId>
        <version>#var("fulcrum.intake")</version>
       </dependency>
       <!-- include some optional dependencies required in example componentConfiguration.xml -->
      <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-cache</artifactId>
        <version>1.1.0</version>
      </dependency>
       <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-upload</artifactId>
        <version>1.0.5</version>
      </dependency>
      <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-security-memory</artifactId>
        <version>#var("fulcrum.security")</version>
      </dependency>
       <dependency>             
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-security-torque</artifactId>
        <version>#var("fulcrum.security")</version>
      </dependency>
      <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-security-api</artifactId>
        <version>#var("fulcrum.security")</version>
      </dependency>
      <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-json-jackson2</artifactId>
        <version>#var("fulcrum.json")</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-json-org</artifactId>
        <!-- version>$dollar{jackson.version}</version-->
        <!--  2.7.x has Java 7 baseline, but not compiled with Java 6 support (version 51 error:), cft. https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7 Changes: compatibility: ..  should still be possible to use Jackson 2.7 on Java 6, but not compile, build. With Jackson 2.8, Java 7 languages features will be allowed -->
        <version>2.6.6</version>
      </dependency>
      <!-- if activating useJsonPath include jayway dependency  -->
      <!-- dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.3.0</version>
            <exclusions>
              <exclusion>
                <groupId>net.minidev</groupId>
                <artifactId>json-smart</artifactId>
              </exclusion>
            </exclusions>
        </dependency-->
        
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.apache.fulcrum</groupId>
          <artifactId>fulcrum-testcontainer</artifactId>
          <version>1.0.7</version>
          <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <maven.compile.source>1.6</maven.compile.source>
        <maven.compile.target>1.6</maven.compile.target>
        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
        <fulcrum.json>1.1.1</fulcrum.json>
        <fulcrum.intake>1.2.3</fulcrum.intake>
        <fulcrum.security>1.1.2</fulcrum.security>
        <turbine.core>4.0.1</turbine.core>
        <slf4j.version>1.7.25</slf4j.version>
        <skipTests>true</skipTests>
    </properties>
    
    
    <profiles>
        <profile>
            <id>jetty</id>
            <build>
                <defaultGoal>jetty:run</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>maven-jetty-plugin</artifactId>
                        <configuration>
                            <connectors>
                                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                    <port>15000</port>
                                    <maxIdleTime>60000</maxIdleTime>
                                </connector>
                            </connectors>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
       <profile>
            <id>tomcat</id>
            <build>
                <defaultGoal>tomcat:run</defaultGoal>
                <finalName>#var("project.artifactId")</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>tomcat-maven-plugin</artifactId>
                        <configuration>
                            <port>15000</port>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    
</project>
