<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>23</version>

        <!-- Required in our case as per http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent -->
        <relativePath></relativePath>
    </parent>

    <groupId>org.apache.training</groupId>
    <artifactId>content-master-pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>Training: Tools: Content Master Pom</name>
    <description>Parent pom containing all the configuration for building presentations with the training template.</description>

    <properties>
        <project.main.contentfile>index</project.main.contentfile>
        <!-- Put your custom theme files in src/main/theme and reference the name (without ".css") here. -->
        <project.main.theme>apache</project.main.theme>
        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
        <asciidoctorj.version>2.2.0</asciidoctorj.version>
        <asciidoctorj.diagram.version>2.0.0</asciidoctorj.diagram.version>
        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
        <revealjs.version>3.8.0</revealjs.version>
        <asciidoctor-revealjs.version>3.0.0</asciidoctor-revealjs.version>

        <copy-rename-maven-plugin.version>1.0.1</copy-rename-maven-plugin.version>
        <download-maven-plugin.version>1.4.2</download-maven-plugin.version>
        <jetty-maven-plugin.version>9.4.14.v20181114</jetty-maven-plugin.version>
        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
        <maven-war-plugin.version>3.2.2</maven-war-plugin.version>
    </properties>

    <dependencies>
        <!-- Just to ensure this is built first as we need this to exist in order to unpack it -->
        <dependency>
            <groupId>org.apache.training</groupId>
            <artifactId>content-master-resources</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Check if all source files have the required apache license headers -->
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <executions>
                    <execution>
                        <id>license-check</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <consoleOutput>true</consoleOutput>
                    <excludes>
                        <!-- TODO: This is a modified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
                        <!-- Exclude everything downloaded by the install-deps scripts -->
                        <exclude>libs/third-party/**</exclude>
                        <!-- Maven related files -->
                        <exclude>**/target/**</exclude>

                        <!-- Eclipse related files -->
                        <exclude>**/.project</exclude>
                        <exclude>**/.settings/**</exclude>
                        <exclude>**/.classpath</exclude>

                        <!-- IntelliJ related files -->
                        <exclude>**/.idea/**</exclude>
                        <exclude>**/*.iml</exclude>

                        <!-- Asciidoctor generated files -->
                        <exclude>**/.asciidoctor/**</exclude>

                        <!-- JSON doesn't like comments -->
                        <exclude>**/*.json</exclude>
                        <!-- Mermaid does't like comments -->
                        <exclude>**/*.mmd</exclude>

                        <!-- Output of the profiler maven extension -->
                        <exclude>**/.profiler/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- Download all the tools needed to generate the output -->
            <plugin>
                <groupId>com.googlecode.maven-download-plugin</groupId>
                <artifactId>download-maven-plugin</artifactId>
                <version>${download-maven-plugin.version}</version>
                <executions>
                    <!-- Get the asciidoctor revealjs module -->
                    <execution>
                        <id>install-asciidoctor-revealjs</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
                            <unpack>true</unpack>
                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                        </configuration>
                    </execution>
                    <!-- Get the reveal js sources -->
                    <execution>
                        <id>install-revealjs</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
                            <unpack>true</unpack>
                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
                            <outputDirectory>${project.slides.directory}</outputDirectory>
                        </configuration>
                    </execution>
                    <!-- Download the C3 and D3 libraries -->
                    <execution>
                        <id>download-c3-css</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>download-c3-js</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>download-d3-js</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>wget</goal>
                        </goals>
                        <configuration>
                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!--
                Make sure the filtered resources are output to the slides directory and
                theme content is output to the themes directory of reveal js.
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>${maven-resources-plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <resources>
                                <!-- Copy the normal resources into the root of the slides directory -->
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <targetPath>${project.slides.directory}</targetPath>
                                </resource>
                                <!-- Copy our css-theme to the reveal.js theme directory -->
                                <resource>
                                    <directory>src/main/theme</directory>
                                    <filtering>true</filtering>
                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Get some static Apache resources shared throughout all presentations -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-training-asciidoc-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.apache.training</groupId>
                                    <artifactId>content-master-resources</artifactId>
                                    <version>1.0.0-SNAPSHOT</version>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>
                                    <outputDirectory>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</outputDirectory>
                                    <includes>*.slim</includes>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-training-presentation-themes</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.apache.training</groupId>
                                    <artifactId>content-master-resources</artifactId>
                                    <version>1.0.0-SNAPSHOT</version>
                                    <type>jar</type>
                                    <outputDirectory>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</outputDirectory>
                                    <includes>*.css</includes>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-training-presentation-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.apache.training</groupId>
                                    <artifactId>content-master-resources</artifactId>
                                    <version>1.0.0-SNAPSHOT</version>
                                    <type>jar</type>
                                    <outputDirectory>${project.slides.directory}/images</outputDirectory>
                                    <excludes>*.slim,*.css,META-INF/**</excludes>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Configure the asciidoctor generation -->
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <version>${asciidoctor.maven.plugin.version}</version>
                <executions>
                    <execution>
                        <id>generate-slides</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
                            <backend>revealjs</backend>
                            <!-- Configure where are all the asciidoc source files located -->
                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
                            <!-- Configure the target director to where will the output be generated -->
                            <outputDirectory>${project.slides.directory}</outputDirectory>
                            <!-- Enable optional modules for generating diagrams and charts -->
                            <requires>
                                <require>asciidoctor-diagram</require>
                                <!--require>chart-block-macro</require-->
                            </requires>
                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
                            <attributes>
                                <!--imagesdir></imagesdir-->
                                <!--
                                    Tell the system the relative path to the reveal.js files
                                    inside the generated-slides directory.
                                -->
                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
                                <!--
                                    Use our custom theme, which is defined by src/main/theme/apache.css
                                    and copied inside the reveal.js installation by the resources plugin a few lines
                                    up inside this pom.
                                -->
                                <revealjs_theme>${project.main.theme}</revealjs_theme>
                                <!-- Some basic settings -->
                                <revealjs_transition>linear</revealjs_transition>
                                <project-version>${project.version}</project-version>
                                <source-highlighter>highlightjs</source-highlighter>
                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
                                <svgbob>${basedir}/libs/third-party/svgbob/bin/svgbob</svgbob>
                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
                            </attributes>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctorj</artifactId>
                        <version>${asciidoctorj.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctorj-diagram</artifactId>
                        <version>${asciidoctorj.diagram.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

            <!--
                As it's the "revealjs" output, asciidoctor will name the file with an ending "revealjs".
                Here we rename that file back to "html".
            -->
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <!-- Set some dynamic variables which are useful for the site generation -->
                    <execution>
                        <id>rename-revealjs-files</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>
                                import static groovy.io.FileType.FILES
                                println "\nRenaming output files:"
                                def baseDirectory = project.model.pomFile.parent
                                def slideOutputDirectory = new File(baseDirectory, "target/generated-slides")
                                if(slideOutputDirectory.exists()) {
                                    slideOutputDirectory.eachFileRecurse(FILES) {
                                        if(it.name.endsWith('.revealjs')) {
                                            def oldFileName = it.name
                                            def newFileName = oldFileName.substring(0, oldFileName.lastIndexOf(".")) + ".html"
                                            it.renameTo(new File(it.parent, newFileName))
                                            println "Renaming " + oldFileName + " to " + newFileName
                                        }
                                    }
                                    println ""
                                }
                            </source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- If the packaging is se to "war", pack the slides into a war file -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
