<?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-sdks-java-parent</artifactId>
    <version>2.3.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-sdks-java-io-parent</artifactId>
  <packaging>pom</packaging>
  <name>Apache Beam :: SDKs :: Java :: IO</name>
  <description>Beam SDK Java IO provides different connectivity components
  (sources and sinks) to consume and produce data from systems.</description>

  <properties>
    <!-- Necessary to make sure that integration with perfkit in io-it-suite works -->
    <integrationTestPipelineOptions />
    <pkbBeamRunnerProfile />
    <pkbBeamRunnerOption />
    <pkbExtraProperties />
    <pkbTimeout>600</pkbTimeout>
  </properties>

  <modules>
    <module>amazon-web-services</module>
    <module>amqp</module>
    <module>cassandra</module>
    <module>common</module>
    <module>elasticsearch</module>
    <module>elasticsearch-tests</module>
    <module>file-based-io-tests</module>
    <module>google-cloud-platform</module>
    <module>hadoop-common</module>
    <module>hadoop-file-system</module>
    <module>hadoop-input-format</module>
    <module>hbase</module>
    <module>hcatalog</module>
    <module>jdbc</module>
    <module>jms</module>
    <module>kafka</module>
    <module>kinesis</module>
    <module>mongodb</module>
    <module>mqtt</module>
    <module>redis</module>
    <module>solr</module>
    <module>tika</module>
    <module>xml</module>
  </modules>

  <profiles>
    <profile>
      <id>io-it</id>
      <activation>
      <property><name>io-it</name></property>
      </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>
                  <useManifestOnlyJar>false</useManifestOnlyJar>
                  <skip>${skipDefaultIT}</skip>
                  <parallel>all</parallel>
                  <threadCount>4</threadCount>
                  <systemPropertyVariables>
                    <beamTestPipelineOptions>${integrationTestPipelineOptions}</beamTestPipelineOptions>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${surefire-plugin.version}</version>
            <configuration>
              <skipTests>true</skipTests>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <properties>
        <skipITs>false</skipITs>
      </properties>
    </profile>

    <!-- this profile is for use with io-it-suite -->
    <profile>
      <id>forceDirectRunner</id>
      <activation>
        <property>
          <name>forceDirectRunner</name>
        </property>
      </activation>
      <properties>
        <!-- These intentionally have a hanging equals sign so that an empty
             string is passed to pkb. Passing "" will cause e.g. -P"" to
             get added to the mvn command line -->
        <pkbBeamRunnerProfile>-beam_runner_profile=</pkbBeamRunnerProfile>
        <pkbBeamRunnerOption>-beam_runner_option=</pkbBeamRunnerOption>
      </properties>
    </profile>
  </profiles>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4.1212.jre7</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>
