<?xml version="1.0"?>

<!--
  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.odftoolkit</groupId>
    <artifactId>schema2template-pom</artifactId>
    <version>0.9.0-incubating-SNAPSHOT</version>
  </parent>
  
	<!-- The Basics -->
	<artifactId>schema2template</artifactId>
	<version>0.9.0-incubating-SNAPSHOT</version>
	<packaging>jar</packaging>
	<dependencies>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
		<dependency>
			<groupId>xerces</groupId>
			<artifactId>xercesImpl</artifactId>
		</dependency>        
		<dependency>
			<groupId>net.java.dev.msv</groupId>
			<artifactId>msv-core</artifactId>
            <version>2013.6.1</version>
		</dependency>
        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss</maven.build.timestamp.format>
    </properties>
	
	<!-- Build Settings -->
	<build>
		<extensions>
			<extension>
				<groupId>org.apache.maven.wagon</groupId>
				<artifactId>wagon-webdav-jackrabbit</artifactId>
				<version>1.0</version>
			</extension>
		</extensions>
		<plugins>
			<plugin>
				<artifactId>maven-jar-plugin</artifactId>
				<version>3.0.2</version>
				<configuration>
					<archive>
						<index>true</index>
						<manifest>
							<mainClass>schema2template.example.odf.OdfHelper</mainClass>
						</manifest>
						<manifestEntries>
							<version>${project.version}</version>
						</manifestEntries>
						<manifestSections>
							<manifestSection>
								<name>schema2template</name>
								<manifestEntries>
									<Application-Name>schema2template</Application-Name>
									<Application-Version>${project.version}</Application-Version>
									<Application-Website>http://incubator.apache.org/odftoolkit/</Application-Website>
									<Built-By>${user.name}</Built-By>
									<Built-Date>${build.timestamp}</Built-Date>
								</manifestEntries>
							</manifestSection>
						</manifestSections>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<!-- Explizit version required for fix on systemPropertyVariables -->
				<version>2.19.1</version>
				<configuration>
					<systemPropertyVariables>
						<odfdom.version>${project.version}</odfdom.version>
						<odfdom.timestamp>${build.timestamp}</odfdom.timestamp>
					</systemPropertyVariables>
					<excludes>
						<exclude>**/integrationtest/**</exclude>
					</excludes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<configuration>
                    <!-- defined in the parent pom.xml -->
					<source>${jdk.version}</source>
					<target>${jdk.version}</target>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes>
                    	<exclude>src/test/resources/examples/odf/*.ref</exclude>
						<exclude>src/main/resources/examples/odf/odfdom-python/OdfTextDocument.odt</exclude>
						<exclude>src/main/resources/examples/odf/odf-schemas/*.rng</exclude>
                    </excludes>
                </configuration>
            </plugin><!--
            <plugin>
      			<groupId>org.codehaus.mojo</groupId>
      			<artifactId>wagon-maven-plugin</artifactId>
      			<version>1.0-beta-3</version>
      			<executions>
        			<execution>
          				<id>download-odf-schema-v1.2</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://docs.oasis-open.org/office/v1.2</url>
            				<fromFile>os/OpenDocument-v1.2-os-schema.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
        			<execution>
          				<id>download-odf-manifest-schema-v1.2</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://docs.oasis-open.org/office/v1.2</url>
            				<fromFile>os/OpenDocument-v1.2-os-manifest-schema.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
        			<execution>
          				<id>download-odf-dsig-schema-v1.2</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://docs.oasis-open.org/office/v1.2</url>
            				<fromFile>os/OpenDocument-v1.2-os-dsig-schema.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
        			<execution>
          				<id>download-odf-schema-v1.1</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://docs.oasis-open.org/office/v1.1</url>
            				<fromFile>OS/OpenDocument-schema-v1.1.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
        			<execution>
          				<id>download-odf-strict-schema-v1.1</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://docs.oasis-open.org/office/v1.1</url>
            				<fromFile>OS/OpenDocument-strict-schema-v1.1.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
                    <!- Disabled due to a security exception on Apache servers, when downloading from that OASIS host
                    Error handling resource: sun.security.validator.ValidatorException: 
                        PKIX path building failed: 
                            sun.security.provider.certpath.SunCertPathBuilderException: 
                                unable to find valid certification path to requested target
        			<execution>
          				<id>download-odf-schema-v1.0</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://www.oasis-open.org/committees/download.php/12571</url>
            				<fromFile>OpenDocument-schema-v1.0-os.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
        			<execution>
          				<id>download-odf-strict-schema-v1.0</id>
          				<phase>process-resources</phase>
          				<goals>
            				<goal>download-single</goal>
          				</goals>
          				<configuration>
            				<url>dav:http://www.oasis-open.org/committees/download.php/12569</url>
            				<fromFile>OpenDocument-strict-schema-v1.0-os.rng</fromFile>
            				<toDir>${project.build.directory}/odf-schemas</toDir>
          				</configuration>
        			</execution>
      			</executions>
    		</plugin>-->
		</plugins>
	</build>
	<!-- <distributionManagement>
		<site>
			<id>odfdom</id>
			<name>ODFDOM Java Toolkit Project</name>
			<url>dav:https://odftoolkit.org/website/odfdom/${project.version}/codegeneration/schema2template</url>
		</site>
	</distributionManagement> -->
	<reporting>
		<plugins>
			<plugin>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>2.10.4</version>
				<configuration>
					<doctitle>Schema2template</doctitle>
					<links>
						<link>http://docs.oracle.com/javase/8/docs/api/</link>
					</links>
					<splitindex>true</splitindex>
					<windowtitle>Schema2template v${project.version} - http://incubator.apache.org/odftoolkit/</windowtitle>
                    <additionalparam>${javadoc.opts}</additionalparam>                        
				</configuration>
			</plugin>

			<!-- Code Coverage Testing generated by Cobertura -->
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>cobertura-maven-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<instrumentation>
						<excludes>
							<exclude>org/odftoolkit/**/*Test.class</exclude>
						</excludes>
					</instrumentation>
				</configuration>
			</plugin>
		</plugins>
	</reporting>
    <profiles>
        <profile>
            <id>doclint-java8-disable</id>
            <activation>
                <jdk>[1.8,)</jdk>
            </activation>
            <properties>
                <javadoc.opts>-Xdoclint:none</javadoc.opts>
            </properties>
        </profile>
	</profiles>
	<!-- More Project Information -->
	<name>XML Schema to Template Mapping Tool: Library</name>
	<description>XML Schema to Template Mapping Tool: Library</description>
	<organization>
        <name>The Apache Software Foundation</name>
        <url>http://www.apache.org/</url>
    </organization>
</project>
