<?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.M4-SNAPSHOT</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>jspwiki-war</artifactId>
  <name>Apache JSPWiki Main War</name>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>jspwiki-main</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>jspwiki-markdown</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>JSPWiki</finalName>
    <plugins>
      <plugin>
        <groupId>io.leonard.maven.plugins</groupId>
        <artifactId>jspc-maven-plugin</artifactId>
        <dependencies>
          <dependency> <!-- so jspwiki custom taglibs can be seen by the jsp compiler -->
            <groupId>${project.groupId}</groupId>
            <artifactId>jspwiki-main</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </plugin>

      <!-- wro4j Web Resource Optimizer for Java (http://http://code.google.com/p/wro4j/)
        Merge and compress CSS and JS files using the WRO4J.
        - use UglifyJS for JS compression
        - use Less as advanced CSS preprocessor
      -->
      <plugin>
        <groupId>ro.isdc.wro4j</groupId>
        <artifactId>wro4j-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>buildDefaultJsAndCss</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
              <!--<goal>jshint</goal>-->
            </goals>
            <configuration>
              <!--
              <targetGroups>all</targetGroups>
              <minimize>true</minimize>
              <cssDestinationFolder>d:/static/css/</cssDestinationFolder>
              <jsDestinationFolder>d:/static/js/</jsDestinationFolder>
              <ignoreMissingResources>false</ignoreMissingResources>
              -->
              <cssDestinationFolder>${project.build.directory}/generated-sources/wro/templates/210/</cssDestinationFolder>
              <wroFile>src/main/config/wro/wro.xml</wroFile>
            </configuration>
          </execution>

          <!-- HADDOCK template -->
          <execution>
            <id>buildHaddockJsAndCss</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <cssDestinationFolder>${project.build.directory}/generated-sources/wro/templates/default/</cssDestinationFolder>
              <wroFile>src/main/config/wro/wro-haddock.xml</wroFile>
            </configuration>
          </execution>
        </executions>
        <dependencies><!-- https://github.com/wro4j/wro4j/issues/1039#issuecomment-382474533 -->
          <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.18.0</version>
          </dependency>
        </dependencies>
      </plugin>

      <!-- Compress certain CSS and JS files using the YUICompressor
         (http://alchim.sourceforge.net/yuicompressor-maven-plugin/)
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>yuicompressor-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>compressJSfiles</id>
            <goals>
              <goal>compress</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <excludeResources>true</excludeResources>
          <nosuffix>true</nosuffix>
          <webappDirectory>${project.build.directory}/generated-sources/yuicompress</webappDirectory>
          *** relying on jslint-maven-plugin instead, which allows
               better customization ***
          <jswarn>false</jswarn>
        </configuration>
      </plugin>
      -->

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jslint-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>checkJSPWikiFiles</id>
            <goals>
              <goal>jslint</goal>
            </goals>
            <configuration>
              <sourceJsFolder>src/main/webapp/scripts</sourceJsFolder>
              <failOnIssues>false</failOnIssues>
              <excludes>
                <exclude>prettify.js</exclude>
              </excludes>
            </configuration>
          </execution>
          <!-- Some third party JSs have many multiple number of VARs per function
               block, are outside of our control so suppressing such messages -->
          <execution>
            <id>checkThirdParty</id>
            <goals>
              <goal>jslint</goal>
            </goals>
            <configuration>
              <sourceJsFolder>src/main/webapp/scripts</sourceJsFolder>
              <failOnIssues>false</failOnIssues>
              <includes>
                 <include>prettify.js</include>
              </includes>
              <allowOneVarStatementPerFunction>false</allowOneVarStatementPerFunction>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <webResources>
            <!-- Output directory configured above with the YUICompressor Maven plugin
            <resource>
              <directory>${project.build.directory}/generated-sources/yuicompress</directory>
            </resource>
            -->
            <resource>
              <directory>${project.build.directory}/generated-sources/wro</directory>
            </resource>
            <resource>
              <directory>src/main/styles/static</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <!-- Unpack the JSP Wiki Pages -->
          <execution>
            <id>unpack-wikipages-private</id>
            <phase>package</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.jspwiki.wikipages</groupId>
                  <artifactId>jspwiki-wikipages-en</artifactId>
                  <version>${project.version}</version>
                </artifactItem>
              </artifactItems>
              <excludes>META-INF/**</excludes>
              <outputDirectory>${project.build.directory}/jspwiki/data/jspwiki-files</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
