<?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>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>${maven.compile.source}</source>
                    <target>${maven.compile.target}</target>
                    <encoding>${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>
              <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>2.3</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>
          <!-- this is mysql specific -->
          <fileset>
              <basedir>${project.build.directory}/generated-sql/torque/mysql</basedir>
              <!-- basedir>${basedir}/target/generated-sql</basedir -->
              <includes>
                <include>*.sql</include>
              </includes>
           </fileset>
           <srcFiles>
              <srcFile>${basedir}/docs/sample-mysql-data/_application-data.sql</srcFile>
              <srcFile>${basedir}/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
           </srcFiles>
        </configuration>
        
        <!-- update with your database driver dependency -->
        
        <dependencies>
          <dependency>
            <artifactId>mysql-connector-java</artifactId>
            <groupId>mysql</groupId>
            <version>5.1.40</version>
          </dependency>
        </dependencies>
      </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>
                <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.40</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>4.0-M2</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>1.2.2</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>1.1.0</version>
        </dependency>
         <dependency>             
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-security-torque</artifactId>
            <version>1.1.0</version>
        </dependency>	
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</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>
    </properties>
    
</project>
