<?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>
            <resource>
                <targetPath>#var("project.build.directory")/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("basedir")/src/main/torque-schema</schemaDir>
                    <useClasspath>true</useClasspath>
                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
                    <targetDatabase>mysql</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("basedir")/src/main/torque-schema</sourceDir>
                      <loglevel>error</loglevel>
                      <options>
                        <torque.database>mysql</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-${turbine_database_adapter}</id>
                    <phase>package</phase>
                    <goals>
                      <goal>generate</goal>
                    </goals>
                    <configuration>
                      <packaging>classpath</packaging>
                      <configPackage>org.apache.torque.templates.sql</configPackage>
                      <sourceDir>#var("basedir")/src/main/torque-schema</sourceDir>
                      <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/${turbine_database_adapter}</defaultOutputDir>
                      <defaultOutputDirUsage>none</defaultOutputDirUsage>
                      <loglevel>error</loglevel>
                      <options>
                        <torque.database>${turbine_database_adapter}</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>
            
            <!-- 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>
        <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.0</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>
