<?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">
    <parent>
        <artifactId>cayenne-asciidoc-parent</artifactId>
        <groupId>org.apache.cayenne.docs</groupId>
        <version>4.1.B1</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>getting-started-db-first</artifactId>

    <packaging>jar</packaging>
    <name>getting-started-db-first: AsciiDoc - Cayenne Database First tutorial</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <dependencies>
                    <!-- Using own extension to inject custom headers -->
                    <dependency>
                        <groupId>org.apache.cayenne.docs</groupId>
                        <artifactId>cayenne-asciidoc-extension</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>

                <executions>
                    <!-- generate "embeddable" html content with front matter and without header/footer/styles -->
                    <execution>
                        <id>asciidoctor-html-web</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html5</backend>
                            <headerFooter>false</headerFooter> <!-- do not generate header and footer -->
                            <outputDirectory>${project.build.directory}/tmp/</outputDirectory>
                            <!-- this will inject header with "front-matter" markup -->
                            <extensions>
                                <extension>
                                    <className>org.apache.cayenne.asciidoc.CayennePostProcessor</className>
                                </extension>
                            </extensions>
                            <attributes>
                                <toc>auto</toc>
                            </attributes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>assembly</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctor-maven-plugin</artifactId>
                        <executions>
                            <!-- generate standalone html help -->
                            <execution>
                                <id>asciidoctor-html-standalone</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>process-asciidoc</goal>
                                </goals>
                                <configuration>
                                    <backend>html5</backend>
                                    <sourceHighlighter>coderay</sourceHighlighter>
                                    <embedAssets>true</embedAssets>
                                    <attributes>
                                        <toc>left</toc>
                                    </attributes>
                                </configuration>
                            </execution>

                            <!-- generate PDF -->
                            <execution>
                                <id>generate-pdf-doc</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>process-asciidoc</goal>
                                </goals>
                                <configuration>
                                    <backend>pdf</backend>
                                    <sourceHighlighter>coderay</sourceHighlighter>
                                    <attributes>
                                        <pagenums />
                                        <toc />
                                    </attributes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>