<?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>
	<artifactId>preflight</artifactId>

	<name>Apache Preflight</name>
	<description>
      The Apache Preflight library is an open source Java tool that implements 
      a parser compliant with the ISO-19005 (PDF/A) specification. Preflight is a 
      subproject of Apache PDFBox.
  </description>

	<packaging>bundle</packaging>

	<parent>
		<groupId>org.apache.pdfbox</groupId>
		<artifactId>pdfbox-parent</artifactId>
		<version>1.8.9</version>
		<relativePath>../parent/pom.xml</relativePath>
	</parent>

	<properties>
		<compileSource>1.5</compileSource>
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
				<executions>
					<execution>
						<id>surefire-test</id>
						<phase>test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>false</skip>
							<excludes>
								<exclude>**/integration/**</exclude>
							</excludes>
						</configuration>
					</execution>
					<execution>
						<id>surefire-itest</id>
						<phase>integration-test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>${skipITs}</skip>
							<includes>
								<include>**/integration/*</include>
							</includes>
							<systemPropertyVariables>
								<isartor.files>${isartor.files}</isartor.files>
								<isartor.errors>${isartor.errors}</isartor.errors>
								<invalid.files>${invalid.files}</invalid.files>
								<invalid.errors>${invalid.errors}</invalid.errors>
								<valid.files>${valid.files}</valid.files>
							</systemPropertyVariables>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<!-- <Export-Package>org.apache.padaf.preflight.javacc|org.apache.padaf.preflight.javacc.*</Export-Package> 
							TODO The above seems wrong, but the default should probably be refined. -->
					</instructions>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>javacc-maven-plugin</artifactId>
				<version>2.6</version>
				<executions>
					<execution>
						<id>javacc</id>
						<goals>
							<goal>javacc</goal>
						</goals>
						<configuration />
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>cobertura-maven-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<instrumentation>
						<ignores>
							<ignore>org.apache.pdfbox.preflight.javacc.*</ignore>
							<ignore>org.apache.pdfbox.preflight.javacc.extractor.*</ignore>
						</ignores>
						<excludes>
							<exclude>org/apache/pdfbox/preflight/javacc/**/*.class</exclude>
						</excludes>
					</instrumentation>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>clean</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>src/test/resources/org/apache/padaf/preflight/font/*.font</exclude>
						<exclude>src/main/resources/project.version</exclude>
						<exclude>release.properties</exclude>
					</excludes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-checkstyle-plugin</artifactId>
				<version>2.10</version>
				<configuration>
					<configLocation>../pdfbox-checkstyle-5.xml</configLocation>
				</configuration>
			</plugin>

		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>pdfbox</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>xmpbox</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!-- TODO add or automatic ? -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.12</version>
			<scope>compile</scope>
		</dependency>
		<!-- TODO find a suitable place to store the isator test pdfs <dependency> 
			<groupId>org.pdfa</groupId> <artifactId>isartor</artifactId> <version>1.0-20080813</version> 
			<scope>test</scope> </dependency> -->
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcmail-jdk15</artifactId>
			<version>1.44</version>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk15</artifactId>
			<version>1.44</version>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>activation</artifactId>
			<version>1.1.1</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>

	</dependencies>

	<reporting>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>taglist-maven-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<encoding>UTF-8</encoding>
					<sourceFileLocale>en</sourceFileLocale>
					<emptyComments>false</emptyComments>
					<tagListOptions>
						<tagClasses>
							<tagClass>
								<displayName>TODO List</displayName>
								<tags>
									<tag>
										<matchString>TODO</matchString>
										<matchType>exact</matchType>
									</tag>
									<tag>
										<matchString>FIXME</matchString>
										<matchType>exact</matchType>
									</tag>
								</tags>
							</tagClass>
						</tagClasses>
					</tagListOptions>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>cobertura-maven-plugin</artifactId>
				<version>2.3</version>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-report-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<showSuccess>true</showSuccess>
					<aggregate>true</aggregate>
					<outputDirectory>${project.reporting.outputDirectory}/surefire-report</outputDirectory>
				</configuration>
				<reportSets>
					<reportSet>
						<id />
					</reportSet>
				</reportSets>
			</plugin>

		</plugins>
	</reporting>
</project>
