<?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>3.0.0-SNAPSHOT</version>
		<relativePath>../parent/pom.xml</relativePath>
	</parent>
        
        <!-- enable the Bavaria tests with -Dskip-bavaria=false  -->
        <properties>
            <skip-bavaria>true</skip-bavaria>
        </properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
                                        <argLine>${addmod} @{surefireArgLine}</argLine>
				</configuration>
				<executions>
					<execution>
						<id>surefire-test</id>
						<phase>test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>false</skip>
							<excludes>
								<exclude>**/integration/**</exclude>
							</excludes>
                                                        <argLine>${addmod} @{surefireArgLine}</argLine>
						</configuration>
					</execution>
					<execution>
						<id>surefire-itest</id>
						<phase>integration-test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>${skipITs}</skip>
                                                        <argLine>${addmod} @{surefireArgLine}</argLine>
							<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>
			</plugin>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<configuration>
					<excludes>
						<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.17</version>
				<configuration>
					<configLocation>../pdfbox-checkstyle-5.xml</configLocation>
				</configuration>
			</plugin>
            <plugin>
                <groupId>com.googlecode.maven-download-plugin</groupId>
                <artifactId>download-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>get-isartor</id>
                        <phase>generate-test-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://www.pdfa.org/wp-content/until2016_uploads/2011/08/isartor-pdfa-2008-08-13.zip</url>
                            <unpack>true</unpack>
                            <outputDirectory>${project.build.directory}/pdfs</outputDirectory>
                            <sha512>66bf4ad470b36079c1e0ceca4438053f32649f964fb1de5cd88babce36c5afc0ba6fa7880bc1c9aac791df872cdfc8dc9851bfd3c75ae96786edd8fac61193ae</sha512>
                        </configuration>
                    </execution>
                    <execution>
                        <id>get-bavaria</id>
                        <phase>generate-test-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <skip>${skip-bavaria}</skip>
                            <url>https://web.archive.org/web/20160305185745if_/http://www.pdflib.com/fileadmin/pdflib/Bavaria/2009-04-03-Bavaria-pdfa.zip</url>
                            <unpack>true</unpack>
                            <outputDirectory>${project.build.directory}/pdfs</outputDirectory>
                            <sha512>a6efe70574dcde3628271fc1d7aa32cc00095334aa9415e5ebfb96cc20e0f79edd040c0290d5a76b4ced4c6a4343ba4af9567bf12eb7cfe3ec70f1a43202c231</sha512>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<scope>test</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>
	    <dependency>
	      <groupId>org.junit.jupiter</groupId>
	      <artifactId>junit-jupiter</artifactId>
	    </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-jdk15on</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk15on</artifactId>
			<optional>true</optional>
		</dependency>
                <dependency>
                    <groupId>org.apache.pdfbox</groupId>
                    <artifactId>jbig2-imageio</artifactId>
                    <scope>test</scope>
                </dependency>

	</dependencies>

</project>
