<?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.3.0</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>

  <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>
          <exclusions>
            <exclusion>
              <groupId>javax.servlet</groupId>
              <artifactId>servlet-api</artifactId>
            </exclusion>
          </exclusions>
        </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.11</artifactId>
          <scope>runtime</scope>
          <exclusions>
            <exclusion>
              <groupId>javax.servlet</groupId>
              <artifactId>servlet-api</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
    </profile>

    <!-- Include the Apache Spark runner -P spark-runner -->
    <profile>
      <id>spark-runner</id>
      <properties>
        <!-- Spark uses a different netty version than Beam's. -->
        <netty.version>4.0.43.Final</netty.version>
      </properties>
      <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.11</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_2.11</artifactId>
          <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>
    <plugins>
      <!-- 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.oauth-client</groupId>
      <artifactId>google-oauth-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>

    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value</artifactId>
      <scope>provided</scope>
    </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>
