<?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</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-beta-7</version>
			</extension>
		</extensions>
		<plugins>
			<plugin>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</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.6</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>2.3.2</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.7</version>
				<configuration>
					<doctitle>Schema2template</doctitle>
					<minmemory>512m</minmemory>
					<maxmemory>1024m</maxmemory>
					<links>
						<link>http://download.oracle.com/javase/6/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.4</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>
