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

    <maven-scm-publish-plugin.serverId>apache.releases.https</maven-scm-publish-plugin.serverId>
    <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>
    <dependency>
      <groupId>${project.groupId}.knights</groupId>
      <artifactId>jsch-knight</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- NEEDS_WINEGROWER_RELEASE deactivated until the release
    <dependency>
      <groupId>${project.groupId}.knights</groupId>
      <artifactId>winegrower-knight</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </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-asm7-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>
      <scope>compile</scope>
    </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.9.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>
            <systemProperty>
              <key>org.slf4j.simpleLogger.logFile</key>
              <value>System.out</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>3.0.0</version>
        <executions>
          <execution>
            <id>scm-publish</id>
            <phase>site-deploy</phase>
            <goals>
              <goal>publish-scm</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <serverId>${maven-scm-publish-plugin.serverId}</serverId>
          <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>
