<?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.training</groupId>
        <artifactId>training-tools</artifactId>
        <version>1.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>content-parent-pom</artifactId>
    <version>1.1.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>

        <java.version>1.8</java.version>

        <asciidoctorj.version>2.2.0</asciidoctorj.version>
        <asciidoctorj-revealjs.version>4.0.1</asciidoctorj-revealjs.version>
        <asciidoctorj.diagram.version>2.1.0</asciidoctorj.diagram.version>
        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>

        <!-- Reveal.JS 4.x doesn't seem to work yet -->
        <revealjs.version>3.9.2</revealjs.version>

        <asciidoctor-maven-plugin.version>2.1.0</asciidoctor-maven-plugin.version>
        <copy-rename-maven-plugin.version>1.0.1</copy-rename-maven-plugin.version>
        <download-maven-plugin.version>1.6.1</download-maven-plugin.version>
        <groovy-maven-plugin.version>2.1.1</groovy-maven-plugin.version>
        <jetty-maven-plugin.version>9.4.30.v20200611</jetty-maven-plugin.version>
        <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
        <maven-war-plugin.version>3.2.2</maven-war-plugin.version>
        <maven-dependency-plugin.version>3.1.2</maven-dependency-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-parent-resources</artifactId>
            <version>1.1.0-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-revealjs</artifactId>
            <version>${asciidoctorj-revealjs.version}</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>

                        <exclude>licenses/**</exclude>
                        <exclude>README.md</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 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>${maven-dependency-plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-asciidoctor-revealjs-remplates</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.asciidoctor</groupId>
                                    <artifactId>asciidoctorj-revealjs</artifactId>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>
                                    <outputDirectory>${project.build.directory}/asciidoctorj-revealjs-${asciidoctorj-revealjs.version}</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                    <!-- Update the document.html.slim with an updated one as currently the docinfo part seems to not work -->
                    <execution>
                        <id>copy-asciidoctor-apache-training-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.apache.training</groupId>
                                    <artifactId>content-parent-resources</artifactId>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>
                                    <outputDirectory>${project.build.directory}/asciidoctorj-revealjs-${asciidoctorj-revealjs.version}/gems/asciidoctor-revealjs-${asciidoctorj-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-parent-resources</artifactId>
                                    <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-parent-resources</artifactId>
                                    <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>
                            <backend>revealjs</backend>
                            <requires>
                                <require>asciidoctor-revealjs</require>
                                <require>asciidoctor-diagram</require>
                            </requires>
                            <!-- 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>
                            <templateDirs>
                                <templateDir>${project.build.directory}/asciidoctorj-revealjs-${asciidoctorj-revealjs.version}/gems/asciidoctor-revealjs-${asciidoctorj-revealjs.version}/templates</templateDir>
                            </templateDirs>
                            <attributes>
                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
                                <!-- All image resources will be located in this directory -->
                                <imagesdir>images</imagesdir>
                                <docinfodir>${project.basedir}/src/main/asciidoc</docinfodir>
                                <!--
                                    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-revealjs</artifactId>
                        <version>${asciidoctorj-revealjs.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>${groovy-maven-plugin.version}</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>${maven-war-plugin.version}</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warSourceDirectory>${project.slides.directory}</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <testSource>${java.version}</testSource>
                        <testTarget>${java.version}</testTarget>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>${jetty-maven-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
