<?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>arthur</artifactId>
    <groupId>org.apache.geronimo.arthur</groupId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>documentation</artifactId>
  <name>Arthur :: Documentation</name>

  <properties>
    <geronimo-arthur.shortname>documentation</geronimo-arthur.shortname>

    <doc.mojo.basedir>
      ${project.parent.basedir}/arthur-maven-plugin/src/main/java/org/apache/geronimo/arthur/maven/mojo
    </doc.mojo.basedir>
  </properties>

  <dependencies>
    <!-- we want to be last in the reactor to be able to rely on relative paths if we generate doc -->
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>arthur-maven-plugin</artifactId>
      <version>${project.version}</version>
    </dependency>

    <!-- generation dependencies -->
    <dependency>
      <groupId>org.tomitribe</groupId>
      <artifactId>tomitribe-crest</artifactId>
      <version>0.11</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.xbean</groupId>
          <artifactId>xbean-asm5-shaded</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.xbean</groupId>
          <artifactId>xbean-finder-shaded</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.asciidoctor</groupId>
      <artifactId>asciidoctorj</artifactId>
      <version>2.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.asciidoctor</groupId>
      <artifactId>asciidoctorj-diagram</artifactId>
      <version>1.5.18</version>
    </dependency>
    <dependency>
      <groupId>org.jruby</groupId>
      <artifactId>jruby-complete</artifactId>
      <version>9.2.8.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <phase />
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
          <execution>
            <id>generate</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>org.apache.geronimo.arthur.documentation.DocumentationGeneratorLauncher</mainClass>
          <arguments>
            <argument>generate</argument>
            <argument>--work-directory=${project.build.directory}/generated_documentation</argument>
            <argument>--content-location=${project.basedir}/src/content</argument>
            <argument>--static-location=${project.basedir}/src/static</argument>
            <argument>--output=${project.build.directory}/documentation</argument>
            <argument>--template-header=${project.basedir}/src/template/header.html</argument>
            <argument>--template-footer=${project.basedir}/src/template/footer.html</argument>
            <argument>--mojo=${doc.mojo.basedir}/DockerMojo.java</argument>
            <argument>--mojo=${doc.mojo.basedir}/ImageMojo.java</argument>
            <argument>--mojo=${doc.mojo.basedir}/NativeImageMojo.java</argument>
          </arguments>
          <systemProperties>
            <systemProperty>
              <key>org.slf4j.simpleLogger.showThreadName</key>
              <value>false</value>
            </systemProperty>
            <systemProperty>
              <key>org.slf4j.simpleLogger.levelInBrackets</key>
              <value>true</value>
            </systemProperty>
            <systemProperty>
              <key>org.slf4j.simpleLogger.showShortLogName</key>
              <value>false</value>
            </systemProperty>
          </systemProperties>
        </configuration>
      </plugin>
      <plugin> <!-- "mvn meecrowave:bake" to check out the generated website -->
        <groupId>org.apache.meecrowave</groupId>
        <artifactId>meecrowave-maven-plugin</artifactId>
        <version>1.2.9</version>
        <configuration>
          <webapp>${project.build.directory}/documentation</webapp>
          <webResourceCached>true</webResourceCached>
          <reloadGoals>prepare-package</reloadGoals> <!-- mvn meecrowave:bake -DskipTests, then "r" to reload -->
          <scanningExcludes>a,b,c,d,i,j,m,n,o,t</scanningExcludes>
        </configuration>
      </plugin>
      <plugin> <!-- "mvn clean prepare-package scm-publish:publish-scm -DskipTests" to publish the website -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-publish-plugin</artifactId>
        <version>1.0-beta-2</version>
        <executions>
          <execution>
            <id>scm-publish</id>
            <phase>site-deploy</phase>
            <goals>
              <goal>publish-scm</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <content>${project.build.directory}/documentation</content>
          <pubScmUrl>scm:svn:https://svn.apache.org/repos/infra/websites/production/geronimo/content/arthur</pubScmUrl>
          <tryUpdate>true</tryUpdate>
          <checkoutDirectory>${project.parent.basedir}/.site-content</checkoutDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <distributionManagement>
    <repository>
      <id>localhost</id>
      <url>file://${project.basedir}/target/deploy/</url>
    </repository>
    <snapshotRepository>
      <id>localhost</id>
      <url>file://${project.basedir}/target/deploy/</url>
    </snapshotRepository>
  </distributionManagement>
</project>
