<?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-parent</artifactId>
		<groupId>org.apache.cayenne</groupId>
		<version>4.0.2</version>
	</parent>
	<artifactId>cayenne-crypto</artifactId>
	<name>cayenne-crypto: Cayenne Cryptography Extensions</name>
	<packaging>jar</packaging>
	<dependencies>

		<!-- Compile dependencies -->
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!--
		Include jaxb-api to support Base64 encoding,
		can't use new encoder from java 8 as we need to support java 7
		-->
		<dependency>
			<groupId>javax.xml.bind</groupId>
			<artifactId>jaxb-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>

		<!-- Test dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne.build-tools</groupId>
			<artifactId>cayenne-test-utilities</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hsqldb</groupId>
			<artifactId>hsqldb</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
    		<groupId>org.slf4j</groupId>
    		<artifactId>slf4j-simple</artifactId>
    		<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
            <plugin>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
			<plugin>
				<groupId>org.apache.cayenne.plugins</groupId>
				<artifactId>cayenne-maven-plugin</artifactId>
				<version>${project.version}</version>
				<configuration>
					<map>${project.basedir}/src/test/resources/datamap.map.xml</map>
					<destDir>${project.basedir}/src/test/java</destDir>
					<defaultPackage>org.apache.cayenne.crypto.db</defaultPackage>
					<superPkg>org.apache.cayenne.crypto.db.auto</superPkg>
				</configuration>
				<executions>
					<execution>
						<id>default-cli</id>
						<goals>
							<goal>cgen</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
        </plugins>
	</build>

    <profiles>
        <profile>
            <id>code-quality</id>

            <activation>
                <property>
                    <name>!fast-and-dirty</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <!--<configuration>
                            <suppressionsLocation>${project.basedir}/cayenne-checkstyle-suppression.xml</suppressionsLocation>
                        </configuration>-->
                    </plugin>
                    <plugin>
                        <artifactId>maven-pmd-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
