<?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.9.0-preview1</version>
    <relativePath>..</relativePath>
  </parent>

  <groupId>org.apache.zeppelin</groupId>
  <artifactId>zeppelin-web</artifactId>
  <packaging>war</packaging>
  <version>0.9.0-preview1</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>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>
        <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 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>
        <version>${plugin.resource.version}</version>
      </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>
