<?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">

  <parent>
    <groupId>org.apache.jspwiki</groupId>
    <artifactId>jspwiki-builder</artifactId>
    <version>2.11.0.M5</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>jspwiki-portable</artifactId>
  <name>Apache JSPWiki portable</name>

  <properties>
    <jspwiki.woas.language>en</jspwiki.woas.language>
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>${basedir}/logs</directory>
            </fileset>
          </filesets>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-tomcat-launcher</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <appendAssemblyId>false</appendAssemblyId>
              <archive>
                <manifest>
                  <mainClass>org.apache.catalina.startup.Bootstrap</mainClass>
                </manifest>
              </archive>
              <descriptors>
                <descriptor>${basedir}/src/main/assembly/tomcat-launcher.xml</descriptor>
              </descriptors>
              <finalName>tomcat-launcher-${tomcat.version}</finalName>
              <outputDirectory>./target/launchers</outputDirectory>
              <!-- 
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                  </excludes>
                </filter>
              </filters> -->
            </configuration>
          </execution>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <tarLongFileMode>gnu</tarLongFileMode>
              <descriptors>
                <descriptor>${basedir}/src/main/assembly/woas-dist.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>woas:copy-woas</id>
            <phase>process-resources</phase>
            <configuration>
              <target>
                <property name="jspwiki.woas.version" value="${project.version}" />
                <property name="jspwiki.tomcat.version" value="${tomcat.version}" />
                <ant antfile="${basedir}/build.xml" target="woas:info" />
                <ant antfile="${basedir}/build.xml" target="woas:copy-woas" />
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>          
          <execution>
            <id>woas:copy-tomcat</id>
            <phase>prepare-package</phase>
            <configuration>
              <target>
                <property name="jspwiki.woas.version" value="${project.version}" />
                <property name="jspwiki.tomcat.version" value="${tomcat.version}" />
                <ant antfile="${basedir}/build.xml" target="woas:copy-tomcat" />
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
          <execution>
            <id>woas:copy-launchers</id>
            <phase>prepare-package</phase>
            <configuration>
              <target>
                <property name="jspwiki.woas.version" value="${project.version}" />
                <property name="jspwiki.tomcat.version" value="${tomcat.version}" />
                <ant antfile="${basedir}/build.xml" target="woas:info" />
                <ant antfile="${basedir}/build.xml" target="woas:copy-tomcat-launchers" />
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <!-- Unpack the JSP Wiki web archive -->
          <execution>
            <id>unpack-jspwiki-war</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.jspwiki</groupId>
                  <artifactId>jspwiki-war</artifactId>
                  <version>${project.version}</version>
                  <type>war</type>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/unpack/jspwiki-war</outputDirectory>
            </configuration>
          </execution>
          <!-- Unpack the JSP Wiki Pages for the "personal" wiki -->
          <execution>
            <id>unpack-wikipages-personal</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.jspwiki.wikipages</groupId>
                  <artifactId>jspwiki-wikipages-${jspwiki.woas.language}</artifactId>
                  <version>${project.version}</version>
                </artifactItem>
              </artifactItems>
              <excludes>META-INF/**</excludes>
              <outputDirectory>${project.build.directory}/woas/data/personal</outputDirectory>
            </configuration>
          </execution>
          <!-- Unpack the JSP Wiki Pages for the "department" wiki -->
          <execution>
            <id>unpack-wikipages-department</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.jspwiki.wikipages</groupId>
                  <artifactId>jspwiki-wikipages-${jspwiki.woas.language}</artifactId>
                  <version>${project.version}</version>
                </artifactItem>
              </artifactItems>
              <excludes>META-INF/**</excludes>
              <outputDirectory>${project.build.directory}/woas/data/department</outputDirectory>
            </configuration>
          </execution>
          <!-- Unpack the tomcat distribution -->
          <execution>
            <id>unpack-tomcat-zip</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.tomcat</groupId>
                  <artifactId>tomcat</artifactId>
                  <version>${tomcat.version}</version>
                  <type>zip</type>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/unpack/tomcat</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-core</artifactId>
      <version>${tomcat.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jsp-api</artifactId>
      <version>${tomcat.version}</version>
    </dependency>
  </dependencies>
</project>
