<?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>
		<groupId>org.apache.isis.core</groupId>
		<artifactId>isis</artifactId>
		<version>2.0.0-M3</version>
		<relativePath>../core/pom.xml</relativePath>
	</parent>

	<groupId>org.apache.isis.valuetypes</groupId>
	<artifactId>isis-valuetypes</artifactId>

	<name>Apache Isis Value types</name>
	<description>
        Value types for use within Apache Isis applications.
    </description>

	<packaging>pom</packaging>

	<properties>
		<jar-plugin.automaticModuleName>org.apache.isis.valuetypes</jar-plugin.automaticModuleName>
		<git-plugin.propertiesDir>org/apache/isis/valuetypes</git-plugin.propertiesDir>
	</properties>

	<build>
		<resources>
			<resource>
				<filtering>true</filtering>
				<directory>src/main/resources</directory>
				<includes>
					<include>**</include>
				</includes>
			</resource>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
	</build>

	<dependencyManagement>
		<dependencies>

			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-asciidoc-applib</artifactId>
				<version>2.0.0-M3</version>
			</dependency>
			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-asciidoc-ui</artifactId>
				<version>2.0.0-M3</version>
			</dependency>

			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-markdown-applib</artifactId>
				<version>2.0.0-M3</version>
			</dependency>
			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-markdown-ui</artifactId>
				<version>2.0.0-M3</version>
			</dependency>

			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-sse-applib</artifactId>
				<version>2.0.0-M3</version>
			</dependency>
			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-sse-metamodel</artifactId>
				<version>2.0.0-M3</version>
			</dependency>
			<dependency>
				<groupId>org.apache.isis.valuetypes</groupId>
				<artifactId>isis-valuetypes-sse-ui</artifactId>
				<version>2.0.0-M3</version>
			</dependency>

			<!-- testing -->

			<dependency>
				<groupId>org.apache.isis.testing</groupId>
				<artifactId>isis-testing-fixtures-applib</artifactId>
				<version>2.0.0-M3</version>
			</dependency>

		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<modules>
		<module>asciidoc</module>
		<module>markdown</module>
		<module>sse</module>
	</modules>

	<profiles>
		<profile>
			<id>isis-app-starter-datanucleusenhance</id>
			<activation>
				<file>
					<exists>${basedir}/logging-dn-enhance.properties</exists>
				</file>
			</activation>
			<properties>

				<!-- keep in sync with versions used in Apache Isis -->
				<datanucleus-api-jdo.version>5.2.2</datanucleus-api-jdo.version>
				<datanucleus-core.version>5.2.2</datanucleus-core.version>
				<datanucleus-jodatime.version>5.2.0-release</datanucleus-jodatime.version>
				<datanucleus-maven-plugin.version>5.2.1</datanucleus-maven-plugin.version>

				<datanucleus-maven-plugin.log4jConfiguration>${basedir}/logging-dn-enhance.properties</datanucleus-maven-plugin.log4jConfiguration>
				<datanucleus-maven-plugin.verbose>true</datanucleus-maven-plugin.verbose>
				<datanucleus-maven-plugin.fork>false</datanucleus-maven-plugin.fork>

			</properties>
			<build>
				<plugins>
					<plugin>
						<groupId>org.datanucleus</groupId>
						<artifactId>datanucleus-maven-plugin</artifactId>
						<version>${datanucleus-maven-plugin.version}</version>
						<configuration>
							<fork>${datanucleus-maven-plugin.fork}</fork>
							<log4jConfiguration>${datanucleus-maven-plugin.log4jConfiguration}</log4jConfiguration>
							<verbose>${datanucleus-maven-plugin.verbose}</verbose>
						</configuration>
						<executions>
							<execution>
								<id>process-classes</id>
								<phase>process-classes</phase>
								<goals>
									<goal>enhance</goal>
								</goals>
							</execution>
							<execution>
								<id>process-test-classes</id>
								<phase>process-test-classes</phase>
								<goals>
									<goal>test-enhance</goal>
								</goals>
								<configuration>
									<metadataDirectory>${project.build.testOutputDirectory}</metadataDirectory>
								</configuration>
							</execution>
						</executions>
						<dependencies>
							<dependency>
								<groupId>org.datanucleus</groupId>
								<artifactId>datanucleus-core</artifactId>
								<version>${datanucleus-core.version}</version>
							</dependency>
							<dependency>
								<groupId>org.datanucleus</groupId>
								<artifactId>datanucleus-api-jdo</artifactId>
								<version>${datanucleus-api-jdo.version}</version>
							</dependency>
							<dependency>
								<groupId>org.datanucleus</groupId>
								<artifactId>datanucleus-jodatime</artifactId>
								<version>${datanucleus-jodatime.version}</version>
							</dependency>
						</dependencies>
					</plugin>
				</plugins>
			</build>
		</profile>

	</profiles>

</project>


