<!--
   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.tez</groupId>
    <artifactId>tez</artifactId>
    <version>0.10.0</version>
  </parent>
  <artifactId>tez-ui</artifactId>
  <packaging>war</packaging>

  <properties>
    <webappDir>src/main/webapp</webappDir>

    <nodeVersion>v5.12.0</nodeVersion>
    <nodeExecutable>${basedir}/src/main/webapp/node/node</nodeExecutable>

    <packageManagerScript>node/yarn/dist/bin/yarn.js</packageManagerScript>

    <allow-root-build>--allow-root=false</allow-root-build>

    <skipTests>false</skipTests>
  </properties>

  <profiles>
    <!-- Clear temporary directories -->
    <profile>
      <id>cleanUICache</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <configuration>
              <filesets>
                <fileset>
                  <directory>${webappDir}/dist</directory>
                </fileset>
                <fileset>
                  <directory>${webappDir}/tmp</directory>
                </fileset>
                <fileset>
                  <directory>${webappDir}/node</directory>
                </fileset>
                <fileset>
                  <directory>${webappDir}/node_modules</directory>
                </fileset>
                <fileset>
                  <directory>${webappDir}/bower_components</directory>
                </fileset>
              </filesets>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>allowRootBuild</id>
      <activation>
        <property>
          <name>allow.root.build</name>
          <value>true</value>
        </property>
      </activation>
      <properties>
        <allow-root-build>--allow-root=true</allow-root-build>
      </properties>
    </profile>
  </profiles>

  <build>
    <plugins>

      <!-- Apache RAT check -->
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>src/main/webapp/node/**/*</exclude>
            <exclude>src/main/webapp/node_modules/**/*</exclude>
            <exclude>src/main/webapp/bower_components/**/*</exclude>
            <exclude>src/main/webapp/.tmp/**/*</exclude>
            <exclude>src/main/webapp/dist/**/*</exclude>
            <exclude>src/main/webapp/tmp/**/*</exclude>
            <exclude>src/main/webapp/.bowerrc</exclude>
            <exclude>src/main/webapp/.editorconfig</exclude>
            <exclude>src/main/webapp/.ember-cli</exclude>
            <exclude>src/main/webapp/.gitignore</exclude>
            <exclude>src/main/webapp/.jshintrc</exclude>
            <exclude>src/main/webapp/tests/.jshintrc</exclude>
            <exclude>src/main/webapp/blueprints/.jshintrc</exclude>
            <exclude>src/main/webapp/.watchmanconfig</exclude>
            <exclude>src/main/webapp/bower.json</exclude>
            <exclude>src/main/webapp/bower-shrinkwrap.json</exclude>
            <exclude>src/main/webapp/ember-cli-build.js</exclude>
            <exclude>src/main/webapp/package.json</exclude>
            <exclude>src/main/webapp/yarn.lock</exclude>
            <exclude>src/main/webapp/testem.json</exclude>
            <exclude>src/main/webapp/public/assets/images/*</exclude>
            <exclude>src/main/webapp/WEB-INF/wro.xml</exclude>
          </excludes>
        </configuration>
      </plugin>

      <!-- Install Node, Yarn, Bower & dependencies -->
      <plugin>
        <groupId>com.github.eirslett</groupId>
        <artifactId>frontend-maven-plugin</artifactId>
        <configuration>
          <workingDirectory>${webappDir}</workingDirectory>
        </configuration>
        <executions>

          <!-- Install all dependencies -->
          <execution>
            <phase>generate-resources</phase>
            <id>install node and yarn</id>
            <goals>
              <goal>install-node-and-yarn</goal>
            </goals>
            <configuration>
              <nodeVersion>${nodeVersion}</nodeVersion>
              <yarnVersion>v0.21.3</yarnVersion>
            </configuration>
          </execution>
          <execution>
            <phase>generate-resources</phase>
            <id>yarn install</id>
            <goals>
              <goal>yarn</goal>
            </goals>
            <configuration>
              <arguments>install</arguments>
            </configuration>
          </execution>
          <execution>
            <phase>generate-resources</phase>
            <id>bower install</id>
            <configuration>
              <arguments>install ${allow-root-build}</arguments>
            </configuration>
            <goals>
              <goal>bower</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>exec-maven-plugin</artifactId>
        <groupId>org.codehaus.mojo</groupId>
        <executions>

          <!-- Build -->
          <execution>
            <id>ember build</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <workingDirectory>${webappDir}</workingDirectory>
              <executable>${nodeExecutable}</executable>
              <arguments>
                <argument>${packageManagerScript}</argument>
                <argument>run</argument>
                <argument>build:mvn</argument>
              </arguments>
            </configuration>
          </execution>

          <!-- Test if enabled-->
          <execution>
            <id>ember test</id>
            <phase>test</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <skip>${skipTests}</skip>
              <workingDirectory>${webappDir}</workingDirectory>
              <executable>${nodeExecutable}</executable>
              <arguments>
                <argument>${packageManagerScript}</argument>
                <argument>run</argument>
                <argument>test:mvn</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Asset minifier -->
      <plugin>
        <groupId>ro.isdc.wro4j</groupId>
        <artifactId>wro4j-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <minimize>true</minimize>
          <targetGroups>tez-ui,vendor</targetGroups>
          <destinationFolder>${basedir}/target/minified-resources/assets</destinationFolder>
          <contextFolder>${basedir}/src/main/webapp/dist/assets</contextFolder>
          <wroFile>${basedir}/src/main/webapp/WEB-INF/wro.xml</wroFile>
        </configuration>
      </plugin>

      <!-- Package into war -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
          </execution>
        </executions>
        <configuration>
          <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>
          <warSourceDirectory>${webappDir}/dist</warSourceDirectory>
          <webResources>
            <resource>
              <filtering>false</filtering>
              <directory>${basedir}/src/main/resources/</directory>
            </resource>
            <resource>
              <filtering>false</filtering>
              <directory>${basedir}/target/minified-resources</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <skipIfEmpty>true</skipIfEmpty>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
