<?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>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-examples-parent</artifactId>
    <version>2.1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-examples-java</artifactId>
  <name>Apache Beam :: Examples :: Java</name>
  <description>Apache Beam SDK provides a simple, Java-based
  interface for processing virtually any size data. This
  artifact includes all Apache Beam Java SDK examples.</description>

  <packaging>jar</packaging>

  <properties>
    <spark.version>1.6.2</spark.version>
  </properties>

  <profiles>

    <!--
      The direct runner is available by default.
      You can also include it on the classpath explicitly with -P direct-runner
    -->
    <profile>
      <id>direct-runner</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-runners-direct-java</artifactId>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
    </profile>

    <!-- Include the Apache Apex runner with -P apex-runner -->
    <profile>
      <id>apex-runner</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-runners-apex</artifactId>
          <scope>runtime</scope>
        </dependency>
        <!--
          Apex depends on httpclient version 4.3.5, project has a transitive dependency to httpclient 4.0.1 from
          google-http-client. Apex dependency version being specified explicitly so that it gets picked up. This
          can be removed when the project no longer has a dependency on a different httpclient version.
        -->
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.3.5</version>
          <scope>runtime</scope>
          <exclusions>
            <exclusion>
              <groupId>commons-codec</groupId>
              <artifactId>commons-codec</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
    </profile>

    <!-- Include the Apache Flink runner with -P flink-runner -->
    <profile>
      <id>flink-runner</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-runners-flink_2.10</artifactId>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
    </profile>

    <!-- Include the Apache Spark runner -P spark-runner -->
    <profile>
      <id>spark-runner</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-runners-spark</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-sdks-java-io-hadoop-file-system</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-streaming_2.10</artifactId>
          <version>${spark.version}</version>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_2.10</artifactId>
          <version>${spark.version}</version>
          <scope>runtime</scope>
          <exclusions>
            <exclusion>
              <groupId>org.slf4j</groupId>
              <artifactId>jul-to-slf4j</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
    </profile>

    <!-- Include the Google Cloud Dataflow runner -P dataflow-runner -->
    <profile>
      <id>dataflow-runner</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.beam</groupId>
          <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
    </profile>

    <!-- Custom set up for our Jenkins precommit tests that comment on GitHub -->
    <profile>
      <id>jenkins-precommit</id>
      <properties>
        <skipITs>false</skipITs>
        <skipDefaultIT>true</skipDefaultIT>
      </properties>

      <dependencies>
        <!--
          This profile requires -P apex-runner and -P spark-runner already. When they are both
          included, the Spark runner's Kryo dependency will pull in a version that is insufficiently
          recent for the Apex runner.

          This dependency makes the Apex runner version "closer" by Maven resolution rules,
          so it will not be overridden.
        -->
        <dependency>
          <groupId>com.esotericsoftware.kryo</groupId>
          <artifactId>kryo</artifactId>
          <version>${apex.kryo.version}</version>
          <scope>runtime</scope>
        </dependency>
      </dependencies>

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
              <useManifestOnlyJar>false</useManifestOnlyJar>
            </configuration>
            <executions>
              <execution>
                <id>direct-runner-integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                    <include>WindowedWordCountIT.java</include>
                  </includes>
                  <parallel>all</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempLocation=gs://temp-storage-for-end-to-end-tests",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=org.apache.beam.runners.direct.DirectRunner"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>flink-runner-integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                    <include>WindowedWordCountIT.java</include>
                  </includes>
                  <parallel>all</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=org.apache.beam.runners.flink.TestFlinkRunner"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>spark-runner-integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                  </includes>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=org.apache.beam.runners.spark.TestSparkRunner"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>dataflow-runner-integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                    <include>WindowedWordCountIT.java</include>
                  </includes>
                  <parallel>all</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=TestDataflowRunner"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>dataflow-runner-integration-tests-streaming</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                    <include>WindowedWordCountIT.java</include>
                  </includes>
                  <parallel>all</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=TestDataflowRunner",
                      "--streaming=true"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>apex-runner-integration-tests</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <includes>
                    <include>WordCountIT.java</include>
                    <include>WindowedWordCountIT.java</include>
                  </includes>
                  <parallel>none</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>
                      [
                      "--project=apache-beam-testing",
                      "--tempRoot=gs://temp-storage-for-end-to-end-tests",
                      "--runner=org.apache.beam.runners.apex.TestApexRunner"
                      ]
                    </beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!--
      This profile disables streaming integration tests which
      have the @Category(StreamingIT.class) annotation.
    -->
    <profile>
      <id>disable-streaming-ITs</id>
      <activation><activeByDefault>false</activeByDefault></activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <excludedGroups>org.apache.beam.sdk.testing.StreamingIT</excludedGroups>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <build>
    <pluginManagement>
      <plugins>
        <!-- BEAM-933 -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemPropertyVariables>
            <beamUseDummyRunner />
            <beamTestPipelineOptions>
            </beamTestPipelineOptions>
          </systemPropertyVariables>
        </configuration>
      </plugin>

      <!-- Coverage analysis for unit tests. -->
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <configuration>
          <useManifestOnlyJar>false</useManifestOnlyJar>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
            <configuration>
              <skip>${skipDefaultIT}</skip>
              <parallel>all</parallel>
              <threadCount>4</threadCount>
              <systemPropertyVariables>
                <beamTestPipelineOptions>${integrationTestPipelineOptions}</beamTestPipelineOptions>
              </systemPropertyVariables>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-bigquery</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.cloud.bigdataoss</groupId>
      <artifactId>util</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.auth</groupId>
      <artifactId>google-auth-library-oauth2-http</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.auth</groupId>
      <artifactId>google-auth-library-credentials</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.avro</groupId>
      <artifactId>avro</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-pubsub</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.cloud.datastore</groupId>
      <artifactId>datastore-v1-proto-client</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.cloud.datastore</groupId>
      <artifactId>datastore-v1-protos</artifactId>
    </dependency>

    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
    </dependency>

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

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>

    <!-- Hamcrest and JUnit are required dependencies of PAssert,
         which is used in the main code of DebuggingWordCount example. -->

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>

    <!-- Test dependencies -->

    <!--
      For testing the example itself, use the direct runner. This is separate from
      the use of ValidatesRunner tests for testing a particular runner.
    -->
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-runners-direct-java</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
