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

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.freemarker.generator</groupId>
        <artifactId>freemarker-generator</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>freemarker-generator-website</artifactId>
    <name>Website</name>
    <description>Apache FreeMarker Generator Website</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        
        <websiteOutputDirectory>${project.build.directory}/website</websiteOutputDirectory>
        <freemarkerGeneratorAppHome>${project.basedir}/../freemarker-generator-cli/target/appassembler</freemarkerGeneratorAppHome>
        <docgenInsertedExampleTemplatesDirectory>${freemarkerGeneratorAppHome}/examples/templates</docgenInsertedExampleTemplatesDirectory>
        <docgenInsertedExampleOutputDirectory>${freemarkerGeneratorAppHome}/target/out</docgenInsertedExampleOutputDirectory>
        <docgenInsertedTemplatesDirectory>${freemarkerGeneratorAppHome}/templates</docgenInsertedTemplatesDirectory>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.freemarker.generator</groupId>
            <artifactId>freemarker-generator-cli</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.freemarker.docgen</groupId>
                <artifactId>freemarker-docgen-maven</artifactId>
                <version>0.0.2-SNAPSHOT</version>
                <executions>
                    <execution>
                        <id>docgen-transform</id>
                        <phase>package</phase>
                        <goals>
                            <goal>transform</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <sourceDirectory>src/main/docgen</sourceDirectory>
                    <outputDirectory>${websiteOutputDirectory}</outputDirectory>
                    <insertableFiles>
                        <templates>${docgenInsertedTemplatesDirectory}/**</templates>
                        <exampleTemplates>${docgenInsertedExampleTemplatesDirectory}/**</exampleTemplates>
                    </insertableFiles>
                    <customVariables>
                        <version>${project.version}</version>
                        <freemarkerGeneratorAppHome>${freemarkerGeneratorAppHome}</freemarkerGeneratorAppHome>
                    </customVariables>
                    <!-- TODO set it back to false before release -->
                    <offline>true</offline>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.freemarker.generator</groupId>
                        <artifactId>freemarker-generator-cli</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
    
    <repositories>
        <!-- This is need this only when we have freemarker-docgen-maven SNAPSHOT dependency -->
        <repository>
            <id>apache-snapshot-repository</id>
            <url>https://repository.apache.org/content/repositories/snapshots/</url>
            <releases><enabled>false</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
    </repositories>
</project>
