<?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">

  <parent>
    <groupId>org.apache.felix.karaf</groupId>
    <artifactId>karaf</artifactId>
    <version>1.1.0-SNAPSHOT</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.felix.karaf</groupId>
  <artifactId>manual</artifactId>
  <version>1.1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Karaf :: Manual</name>
  <description>The Karaf Manual which generates a HTML and PDF representation of the manual.</description>

  <properties>
      <must-succeed>false</must-succeed>
  </properties>

  <build>
    <plugins>
        
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <configuration>
                    <tasks>
                        <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" classpathref="maven.plugin.classpath"/>
                        <taskdef name="for" classname="net.sf.antcontrib.logic.ForTask" classpathref="maven.plugin.classpath"/>
                        <taskdef name="trycatch" classname="net.sf.antcontrib.logic.TryCatchTask" classpathref="maven.plugin.classpath"/>
                        <property name="ant.regexp.regexpimpl" value="org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp" />
                        <property name="manual.dir" value="target/site/manual" />
                        <property name="manual" value="${manual.dir}/manual-${project.version}.html" />
                        <mkdir dir="${manual.dir}"/>
                        <trycatch property="error">
                            <try>
                                <get src="http://cwiki.apache.org/confluence/display/FELIX/Karaf+Users%27+Guide+in+one+page"
                                     dest="${manual}" />
                                <for list="1,2,3,4,5,6,7,8,9,10" param="letter">
                                    <sequential>
                                        <replaceregexp
                                            file="${manual}"
                                            flags="g"
                                            match='"/confluence/display/FELIX/([^"]*)\+([^"+]*)"'
                                            replace='"/confluence/display/FELIX/\1\2"' />
                                    </sequential>
                                </for>
                                <replaceregexp
                                    file="${manual}"
                                    flags="g"
                                    match='"/confluence/display/FELIX/([^"]*)"'
                                    replace='"#KarafUsers%27Guideinonepage-\1"' />
                                <replaceregexp
                                    file="${manual}"
                                    flags="g"
                                    match='"/confluence/([^"]*)"'
                                    replace='"http://cwiki.apache.org/confluence/\1"' />
                            </try>
                            <catch>
                                <if>
                                    <equals arg1="${must-succeed}" arg2="true"/>
                                    <then>
                                        <fail>${error}</fail>
                                    </then>
                                    <else>
                                        <copy file="src/fallback/manual.html" tofile="${manual}" />
                                    </else>
                                </if>
                            </catch>
                        </trycatch>
                    </tasks>
                </configuration>
                <goals>
                    <goal>run</goal>
                </goals>
                <phase>generate-resources</phase>
            </execution>
         </executions>
          <dependencies>
              <dependency>
                  <groupId>ant-contrib</groupId>
                  <artifactId>ant-contrib</artifactId>
                  <version>1.0b3</version>
              </dependency>
              <dependency>
                  <groupId>ant</groupId>
                  <artifactId>ant-optional</artifactId>
                  <version>1.5.3-1</version>
              </dependency>
         </dependencies>
    </plugin>

     <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>maven-html-to-pdf</artifactId>
        <version>2.0.0</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
            <phase>compile</phase>
          </execution>
        </executions>    
        <configuration>
          <page>file://${basedir}/target/site/manual/manual-${project.version}.html</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 Felix Karaf ${pom.version} Developer's Manual";
                  }
                }
              </style>
          ]]></head>
          <replaceToken><![CDATA[
              >top</a>
          ]]></replaceToken>
          <replaceValue><![CDATA[
              ></a>
          ]]></replaceValue>
          <errorOnConverionFailure>${must-succeed}</errorOnConverionFailure>
          <errorOnDownloadFailure>${must-succeed}</errorOnDownloadFailure>
        </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/manual-${project.version}.html</file>
                  <type>html</type>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>      
    </plugins>
  </build>

  <profiles>
      <profile>
          <id>release</id>
          <properties>
              <must-succeed>true</must-succeed>
          </properties>
      </profile>
  </profiles>

</project>
