<?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>
                <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>3.3</version>
                <configuration>
                    <schemaDir>#var("project.build.directory")/torque/schema</schemaDir>

                    <!-- Define the Override directory location -->
                    <!-- templatePath>#var("project.build.directory")/torque/templates</templatePath -->
                    <useClasspath>true</useClasspath>
                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
                </configuration>
                <executions>
                    <execution>
                        <id>om</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>om</goal>
                        </goals>
                        <configuration>
                            <!-- These settings will allow you to customize 
                                the way your Peer-based object model is created. -->
                            <targetPackage>${package}.om</targetPackage>
                            <outputDir>#var("project.build.sourceDirectory")</outputDir>
                            <baseOutputDir>#var("project.build.directory")/generated-sources/torque</baseOutputDir>
                            <baseReportFile>report.#var("project.artifact.artifactId").om.base.generation</baseReportFile>
                            <reportFile>report.#var("project.artifact.artifactId").om.generation</reportFile>

                            <addGetByNameMethod>true</addGetByNameMethod>
                            <addIntakeRetrievable>true</addIntakeRetrievable>
                            <addSaveMethod>true</addSaveMethod>
                            <addTimeStamp>true</addTimeStamp>
                            <basePrefix>Base</basePrefix>
                            <complexObjectModel>true</complexObjectModel>
                            <correctGetters>true</correctGetters>
                            <useManagers>false</useManagers>
                            <objectIsCaching>true</objectIsCaching>
                            <saveException>TorqueException</saveException>
                            <enableJava5Features>true</enableJava5Features>
                            <runOnlyOnSchemaChange>true</runOnlyOnSchemaChange>
                        </configuration>
                    </execution>
                    <execution>
                        <id>datadtd torque security</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>datadtd</goal>
                        </goals>
                        <configuration>
                            <projectName>torque-security</projectName>
                            <xmlFile>#var("project.build.directory")/torque/schema/torque-security-schema.xml</xmlFile>
                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
                        </configuration>
                    </execution>
                    <execution>
                        <id>datadtd application specific</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>datadtd</goal>
                        </goals>
                        <configuration>
                            <projectName>application</projectName>
                            <xmlFile>#var("project.build.directory")/torque/schema/application-schema.xml</xmlFile>
                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
                        </configuration>
                    </execution>
                    <execution>
                        <id>schema sql</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>sql</goal>
                            <goal>id-table-init-sql</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>datasql torque security</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>datasql</goal>
                        </goals>
                        <configuration>
                            <dataXmlFile>#var("project.build.directory")/torque/schema/torque-security-data.xml</dataXmlFile>
                            <dataDtd>#var("project.build.directory")/torque/schema/torque-security-data.dtd</dataDtd>

                            <reportFile>torque-security-data.sql</reportFile>
                            <schemaIncludes>torque-security-schema.xml</schemaIncludes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>datasql application specific</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>datasql</goal>
                        </goals>
                        <configuration>
                            <dataXmlFile>#var("project.build.directory")/torque/schema/application-data.xml</dataXmlFile>
                            <dataDtd>#var("project.build.directory")/torque/schema/application-data.dtd</dataDtd>
                            <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>

                            <reportFile>application-data.sql</reportFile>
                            <schemaIncludes>application-schema.xml</schemaIncludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <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>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.torque</groupId>
            <artifactId>village</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.turbine</groupId>
            <artifactId>turbine</artifactId>
            <version>4.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.fulcrum</groupId>
            <artifactId>fulcrum-yaafi</artifactId>
            <version>1.0.6</version>
        </dependency>
        <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>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</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>
