<?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>
        <artifactId>cayenne-maven-plugins-parent</artifactId>
        <groupId>org.apache.cayenne.plugins</groupId>
        <version>4.1.RC1</version>
    </parent>

	<description>Integration Tests - Cayenne Tools</description>
	<artifactId>cayenne-tools-itest</artifactId>
	<name>cayenne-tools-itest: Tools integration tests</name>
	<packaging>jar</packaging>
	
	<properties>
		<testResourceDir>${project.build.testSourceDirectory}/../resources</testResourceDir>
		<generatedClassesDir>${project.build.directory}/generated-tests</generatedClassesDir>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne.build-tools</groupId>
			<artifactId>cayenne-test-utilities</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-di</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
			<plugin>
				<groupId>org.apache.cayenne.plugins</groupId>
				<artifactId>cayenne-maven-plugin</artifactId>
				<version>${project.version}</version>
				<executions>
				    <execution>
				        <id>single-classes-cust-template</id>
				        <goals>
                            <goal>cgen</goal>
                        </goals>
		                <configuration>
		                  <map>${testResourceDir}/testmap.map.xml</map>
		                  <destDir>${generatedClassesDir}/single-classes-cust-template</destDir>
		                  <makePairs>false</makePairs>
		                  <usePkgPath>true</usePkgPath>
		                  <template>${testResourceDir}/org/apache/cayenne/tools/velotemplate.vm</template>
		                </configuration>
				    </execution>
				    <execution>
                        <id>single-classes1</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap.map.xml</map>
                          <destDir>${generatedClassesDir}/single-classes1</destDir>
                          <makePairs>false</makePairs>
                          <usePkgPath>true</usePkgPath>
                        </configuration>
                    </execution>
                    <execution>
                        <id>single-classes2</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap.map.xml</map>
                          <destDir>${generatedClassesDir}/single-classes2</destDir>
                          <makePairs>false</makePairs>
                          <usePkgPath>false</usePkgPath>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pairs1</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap.map.xml</map>
                          <destDir>${generatedClassesDir}/pairs1</destDir>
                          <makePairs>true</makePairs>
                          <usePkgPath>true</usePkgPath>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pairs2</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap.map.xml</map>
                          <destDir>${generatedClassesDir}/pairs2</destDir>
                          <makePairs>true</makePairs>
                          <usePkgPath>false</usePkgPath>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pairs3</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap.map.xml</map>
                          <destDir>${generatedClassesDir}/pairs3</destDir>
                          <makePairs>true</makePairs>
                          <usePkgPath>true</usePkgPath>
                          <superPkg>org.apache.cayenne.testdo.testmap.superart</superPkg>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pairs1-client</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/testmap-client.map.xml</map>
                          <destDir>${generatedClassesDir}/pairs1-client</destDir>
                          <client>true</client>
                          <makePairs>true</makePairs>
                          <usePkgPath>true</usePkgPath>
                          <superPkg>org.apache.cayenne.testdo.testmap.client.superart</superPkg>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pairs-embeddables3</id>
                        <goals>
                            <goal>cgen</goal>
                        </goals>
                        <configuration>
                          <map>${testResourceDir}/embeddable.map.xml</map>
                          <destDir>${generatedClassesDir}/pairs-embeddables3</destDir>
                          <makePairs>true</makePairs>
                          <usePkgPath>true</usePkgPath>
                          <superPkg>org.apache.cayenne.testdo.embeddable.auto</superPkg>
                        </configuration>
                    </execution>
				</executions>
            </plugin>
		</plugins>
	</build>
</project>
