<?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.camel</groupId>
    <artifactId>camel-parent</artifactId>
    <version>1.6.4</version>
  </parent>

  <artifactId>camel-manual</artifactId>
  <packaging>pom</packaging>
  <name>Camel :: Manual</name>
  <description>The Camel Manual which generates a HTML and PDF representation of the manual.</description>

  <build>
    <plugins>

     <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>maven-html-to-pdf</artifactId>
        <version>${project.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
            <phase>compile</phase>
          </execution>
        </executions>    
        <configuration>
          <page>https://cwiki.apache.org/confluence/display/CAMEL/Book+In+One+Page</page>
          <head><![CDATA[ 
              <link href="file:${basedir}/src/styles/print.css" rel="stylesheet" type="text/css" />
              <style type="text/css">
                @page :left {
                  @top-left {
                    content: "Apache Camel ${pom.version} Developer's Manual";
                  }
                }
              </style>
          ]]></head>
          <replaceToken><![CDATA[
              <h3 id="replaceme">.*</h3>
          ]]></replaceToken>
          <replaceValue><![CDATA[
              <h3>Version ${pom.version}</h3>
          ]]></replaceValue>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <configuration>
              <artifacts>
                <!-- Don't need to attach PDF here because the html-to-pdf plugin did that already -->
                <artifact>
                  <file>${project.build.directory}/site/manual/camel-manual-${project.version}.html</file>
                  <type>html</type>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>      
    </plugins>
  </build>


</project>
