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

  <parent>
    <artifactId>interpreter-parent</artifactId>
    <groupId>org.apache.zeppelin</groupId>
    <version>0.8.2</version>
    <relativePath>../interpreter-parent</relativePath>
  </parent>

  <groupId>org.apache.zeppelin</groupId>
  <artifactId>zeppelin-flink_2.10</artifactId>
  <packaging>jar</packaging>
  <version>0.8.2</version>
  <name>Zeppelin: Flink</name>
  <description>Zeppelin flink support</description>

  <properties>
    <!--library versions-->
    <interpreter.name>flink</interpreter.name>
    <flink.version>1.1.3</flink.version>
    <flink.akka.version>2.3.7</flink.akka.version>
    <scala.macros.version>2.0.1</scala.macros.version>

    <!--plugin versions-->
    <plugin.scalamaven.version>3.2.2</plugin.scalamaven.version>
    <plugin.eclipse.version>2.8</plugin.eclipse.version>
    <plugin.buildhelper.version>1.7</plugin.buildhelper.version>
    <plugin.scalastyle.version>0.5.0</plugin.scalastyle.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>zeppelin-interpreter</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-core</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients_${scala.binary.version}</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-runtime_${scala.binary.version}</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-scala_${scala.binary.version}</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-scala-shell_${scala.binary.version}</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-actor_${scala.binary.version}</artifactId>
      <version>${flink.akka.version}</version>
    </dependency>

    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-remote_${scala.binary.version}</artifactId>
      <version>${flink.akka.version}</version>
    </dependency>

    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-slf4j_${scala.binary.version}</artifactId>
      <version>${flink.akka.version}</version>
    </dependency>

    <dependency>
      <groupId>com.typesafe.akka</groupId>
      <artifactId>akka-testkit_${scala.binary.version}</artifactId>
      <version>${flink.akka.version}</version>
    </dependency>

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-compiler</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-reflect</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <!-- Scala Compiler -->
      <plugin>
	<groupId>net.alchim31.maven</groupId>
	<artifactId>scala-maven-plugin</artifactId>
	<version>${plugin.scalamaven.version}</version>
	<executions>
	  <!-- Run scala compiler in the process-resources phase, so that dependencies on
	       scala classes can be resolved later in the (Java) compile phase -->
	  <execution>
	    <id>scala-compile-first</id>
	    <phase>process-resources</phase>
	    <goals>
	      <goal>compile</goal>
	    </goals>
	  </execution>
          
	  <!-- Run scala compiler in the process-test-resources phase, so that dependencies on
	       scala classes can be resolved later in the (Java) test-compile phase -->
	  <execution>
	    <id>scala-test-compile</id>
	    <phase>process-test-resources</phase>
	    <goals>
	      <goal>testCompile</goal>
	    </goals>
	  </execution>
	</executions>
	<configuration>
	  <jvmArgs>
	    <jvmArg>-Xms128m</jvmArg>
	    <jvmArg>-Xmx512m</jvmArg>
	  </jvmArgs>
	  <compilerPlugins combine.children="append">
	    <compilerPlugin>
	      <groupId>org.scalamacros</groupId>
	      <artifactId>paradise_${scala.version}</artifactId>
	      <version>${scala.macros.version}</version>
	    </compilerPlugin>
	  </compilerPlugins>
	</configuration>
      </plugin>

      <!-- Eclipse Integration -->
      <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-eclipse-plugin</artifactId>
	<version>${plugin.eclipse.version}</version>
	<configuration>
	  <downloadSources>true</downloadSources>
	  <projectnatures>
	    <projectnature>org.scala-ide.sdt.core.scalanature</projectnature>
	    <projectnature>org.eclipse.jdt.core.javanature</projectnature>
	  </projectnatures>
	  <buildcommands>
	    <buildcommand>org.scala-ide.sdt.core.scalabuilder</buildcommand>
	  </buildcommands>
	  <classpathContainers>
	    <classpathContainer>org.scala-ide.sdt.launching.SCALA_CONTAINER</classpathContainer>
	    <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
	  </classpathContainers>
	  <!-- excludes>
	    <exclude>org.scala-lang:scala-library</exclude>
	    <exclude>org.scala-lang:scala-compiler</exclude>
	  </excludes -->
	  <sourceIncludes>
	    <sourceInclude>**/*.scala</sourceInclude>
	    <sourceInclude>**/*.java</sourceInclude>
	  </sourceIncludes>
	</configuration>
      </plugin>

      <!-- Adding scala source directories to build path -->
      <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>build-helper-maven-plugin</artifactId>
	<version>${plugin.buildhelper.version}</version>
	<executions>
	  <!-- Add src/main/scala to eclipse build path -->
	  <execution>
	    <id>add-source</id>
	    <phase>generate-sources</phase>
	    <goals>
	      <goal>add-source</goal>
	    </goals>
	    <configuration>
	      <sources>
		<source>src/main/scala</source>
	      </sources>
	    </configuration>
	  </execution>
	  <!-- Add src/test/scala to eclipse build path -->
	  <execution>
	    <id>add-test-source</id>
	    <phase>generate-test-sources</phase>
	    <goals>
	      <goal>add-test-source</goal>
	    </goals>
	    <configuration>
	      <sources>
		<source>src/test/scala</source>
	      </sources>
	    </configuration>
	  </execution>
	</executions>
      </plugin>

      <plugin>
	<groupId>org.scalastyle</groupId>
	<artifactId>scalastyle-maven-plugin</artifactId>
	<version>${plugin.scalastyle.version}</version>
	<executions>
	  <execution>
	    <goals>
	      <goal>check</goal>
	    </goals>
	  </execution>
	</executions>
	<configuration>
	  <verbose>false</verbose>
	  <failOnViolation>true</failOnViolation>
	  <includeTestSourceDirectory>true</includeTestSourceDirectory>
	  <failOnWarning>false</failOnWarning>
	  <sourceDirectory>${basedir}/src/main/scala</sourceDirectory>
	  <testSourceDirectory>${basedir}/src/test/scala</testSourceDirectory>
	  <configLocation>${project.basedir}/../_tools/scalastyle.xml</configLocation>
	  <outputFile>${project.basedir}/target/scalastyle-output.xml</outputFile>
	  <outputEncoding>UTF-8</outputEncoding>
	</configuration>
      </plugin>

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

    </plugins>
  </build>
</project>
