<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>zeppelin</artifactId>
    <groupId>org.apache.zeppelin</groupId>
    <version>0.10.1</version>
  </parent>

  <artifactId>zeppelin-web</artifactId>
  <packaging>war</packaging>
  <name>Zeppelin: web Application</name>

  <properties>
    <web.e2e.disabled>true</web.e2e.disabled>
    <web.e2e.enabled>false</web.e2e.enabled>
    <zeppelin.daemon.package.base>../bin</zeppelin.daemon.package.base>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!--plugin versions-->
    <plugin.frontend.nodeDownloadRoot>https://nodejs.org/dist/</plugin.frontend.nodeDownloadRoot>
    <plugin.frontend.npmDownloadRoot>https://registry.npmjs.org/npm/-/</plugin.frontend.npmDownloadRoot>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <warSourceDirectory>dist</warSourceDirectory>
          <webXml>dist\WEB-INF\web.xml</webXml>
        </configuration>
      </plugin>

      <plugin>
        <groupId>com.github.eirslett</groupId>
        <artifactId>frontend-maven-plugin</artifactId>
        <configuration>
          <nodeDownloadRoot>${plugin.frontend.nodeDownloadRoot}</nodeDownloadRoot>
          <npmDownloadRoot>${plugin.frontend.npmDownloadRoot}</npmDownloadRoot>
        </configuration>

        <executions>

          <execution>
            <id>install node</id>
            <goals>
              <goal>install-node-and-npm</goal>
            </goals>
            <configuration>
              <nodeVersion>${node.version}</nodeVersion>
              <npmVersion>${npm.version}</npmVersion>
            </configuration>
          </execution>

          <execution>
            <id>npm install</id>
            <goals>
              <goal>npm</goal>
            </goals>
            <configuration>
              <skip>${web.e2e.enabled}</skip>
              <arguments>install --no-lockfile</arguments>
            </configuration>
          </execution>

          <execution>
            <id>npm build</id>
            <goals>
              <goal>npm</goal>
            </goals>
            <configuration>
              <skip>${web.e2e.enabled}</skip>
              <arguments>${web.build.command}</arguments>
            </configuration>
          </execution>

          <execution>
            <id>npm test</id>
            <goals>
              <goal>npm</goal>
            </goals>
            <phase>test</phase>
            <configuration>
              <skip>${web.e2e.disabled}</skip>
              <arguments>run karma-test</arguments>
            </configuration>
          </execution>

            <execution>
              <id>npm e2e</id>
              <goals>
                <goal>npm</goal>
              </goals>
              <phase>integration-test</phase>
              <configuration>
                <skip>${web.e2e.disabled}</skip>
                <arguments>run e2e</arguments>
              </configuration>
            </execution>

        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>start-zeppelin</id>
            <phase>pre-integration-test</phase>
            <configuration>
              <skip>${web.e2e.disabled}</skip>
              <target unless="skipTests">
                <exec executable="./zeppelin-daemon.sh" dir="${zeppelin.daemon.package.base}" spawn="false">
                  <arg value="start" />
                </exec>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>

          <execution>
            <id>stop-zeppelin</id>
            <phase>post-integration-test</phase>
            <configuration>
              <skip>${web.e2e.disabled}</skip>
              <target unless="skipTests">
                <exec executable="./zeppelin-daemon.sh" dir="${zeppelin.daemon.package.base}" spawn="false">
                  <arg value="stop" />
                </exec>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!--
          Disabling test report generation as it forks the lifecycle
          and results in https://issues.apache.org/jira/browse/ZEPPELIN-69

          There is no better way to do it, as per
          https://jira.codehaus.org/browse/MCOBERTURA-154
      -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>cobertura</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
      </plugin>

      <plugin>
        <!-- clean task will be executed by front-end-maven plugin -->
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>bower_components</directory>
            </fileset>
            <fileset>
              <directory>node</directory>
            </fileset>
            <fileset>
              <directory>node_modules</directory>
            </fileset>
          </filesets>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
      </plugin>

    </plugins>
  </build>

  <profiles>
    <profile>
      <id>web-dist</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <web.build.command>run build:dist</web.build.command>
      </properties>
    </profile>
    <profile>
      <id>web-ci</id>
      <properties>
        <web.build.command>run build:ci</web.build.command>
      </properties>
    </profile>

    <profile>
      <id>web-e2e</id>
      <properties>
        <web.e2e.disabled>false</web.e2e.disabled>
        <web.e2e.enabled>true</web.e2e.enabled>
      </properties>
    </profile>
  </profiles>

</project>
