<?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>
    <artifactId>zeppelin</artifactId>
    <groupId>org.apache.zeppelin</groupId>
    <version>0.8.3-SNAPSHOT</version>
    <relativePath>..</relativePath>
  </parent>

  <groupId>org.apache.zeppelin</groupId>
  <artifactId>zeppelin-web</artifactId>
  <packaging>war</packaging>
  <version>0.8.3-SNAPSHOT</version>
  <name>Zeppelin: web Application</name>

  <!-- See https://github.com/eirslett/frontend-maven-plugin/issues/229 -->
  <prerequisites>
    <maven>3.1.0</maven>
  </prerequisites>

  <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>http://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>
        <version>${plugin.frontend.version}</version>
        <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 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
          http://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>
    </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>
