<?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-io-parent</artifactId>
    <version>2.2.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-sdks-java-io-jdbc</artifactId>
  <name>Apache Beam :: SDKs :: Java :: IO :: JDBC</name>
  <description>IO to read and write on JDBC datasource.</description>

  <!--
      The dataflow-runner and spark-runner profiles support using those runners during an integration test. These are
      not the long-term way we want to support using runners in ITs (e.g. it is annoying to add to all IO modules.)
      We cannot create a dependency IO -> Runners since the runners depend on IO (e.g. kafka depends on spark.)
  -->

  <profiles>
    <!-- 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.spark</groupId>
          <artifactId>spark-streaming_2.10</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_2.10</artifactId>
          <scope>runtime</scope>
          <exclusions>
            <exclusion>
              <groupId>org.slf4j</groupId>
              <artifactId>jul-to-slf4j</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
    </profile>

    <!--
        This profile invokes PerfKitBenchmarker, which does benchmarking of
        the IO ITs. The arguments passed to it allow it to invoke mvn again
        with the desired benchmark.

        To invoke this, run:

        mvn verify -Dio-it-suite -pl sdks/java/io/jdbc
            -DpkbLocation="path-to-pkb.py" \
            -DintegrationTestPipelineOptions='["-tempRoot=gs://bucket/staging"]'
    -->
    <profile>
      <id>io-it-suite</id>
      <activation>
        <property><name>io-it-suite</name></property>
      </activation>
      <properties>
      <!-- This is based on the location of the current pom relative to the root
           See discussion in BEAM-2460 -->
        <beamRootProjectDir>${project.parent.parent.parent.parent.basedir}</beamRootProjectDir>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <version>${groovy-maven-plugin.version}</version>
            <executions>
              <execution>
                <id>find-supported-python-for-compile</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>${beamRootProjectDir}/sdks/python/findSupportedPython.groovy</source>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${maven-exec-plugin.version}</version>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>${python.interpreter.bin}</executable>
              <arguments>
                <argument>${pkbLocation}</argument>
                <argument>-benchmarks=beam_integration_benchmark</argument>
                <argument>-beam_it_profile=io-it</argument>
                <argument>-beam_location=${beamRootProjectDir}</argument>
                <argument>-beam_prebuilt=true</argument>
                <argument>-beam_sdk=java</argument>
                <argument>-kubeconfig=${kubeconfig}</argument>
                <argument>-kubectl=${kubectl}</argument>
                <!-- runner overrides, controlled via forceDirectRunner -->
                <argument>${pkbBeamRunnerProfile}</argument>
                <argument>${pkbBeamRunnerOption}</argument>
                <!-- specific to this IO -->
                <argument>-beam_options_config_file=${beamRootProjectDir}/.test-infra/kubernetes/postgres/pkb-config.yml</argument>
                <argument>-beam_kubernetes_scripts=${beamRootProjectDir}/.test-infra/kubernetes/postgres/postgres.yml</argument>
                <argument>-beam_it_module=sdks/java/io/jdbc</argument>
                <argument>-beam_it_class=org.apache.beam.sdk.io.jdbc.JdbcIOIT</argument>
                <!-- arguments typically defined by user -->
                <argument>-beam_it_options=${integrationTestPipelineOptions}</argument>
              </arguments>
            </configuration>
          </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>
    </profile>

    <!--
      io-it-suite overrides part of io-it-suite, allowing users to run tests
      when they are on a separate network from the kubernetes cluster by
      creating a LoadBalancer service.
    -->
    <profile>
      <id>io-it-suite-local</id>
      <activation><property><name>io-it-suite-local</name></property></activation>
      <properties>
        <!-- This is based on the location of the current pom relative to the root
             See discussion in BEAM-2460 -->
        <beamRootProjectDir>${project.parent.parent.parent.parent.basedir}</beamRootProjectDir>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <version>${groovy-maven-plugin.version}</version>
            <executions>
              <execution>
                <id>find-supported-python-for-compile</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>${beamRootProjectDir}/sdks/python/findSupportedPython.groovy</source>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${maven-exec-plugin.version}</version>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>${python.interpreter.bin}</executable>
              <arguments>
                <argument>${pkbLocation}</argument>
                <argument>-benchmarks=beam_integration_benchmark</argument>
                <argument>-beam_it_profile=io-it</argument>
                <argument>-beam_location=${beamRootProjectDir}</argument>
                <argument>-beam_prebuilt=true</argument>
                <argument>-beam_sdk=java</argument>
                <argument>-kubeconfig=${kubeconfig}</argument>
                <argument>-kubectl=${kubectl}</argument>
                <!-- runner overrides, controlled via forceDirectRunner -->
                <argument>${pkbBeamRunnerProfile}</argument>
                <argument>${pkbBeamRunnerOption}</argument>
                <!-- specific to this IO -->
                <argument>-beam_options_config_file=${beamRootProjectDir}/.test-infra/kubernetes/postgres/pkb-config-local.yml</argument>
                <argument>-beam_kubernetes_scripts=${beamRootProjectDir}/.test-infra/kubernetes/postgres/postgres.yml,${beamRootProjectDir}/.test-infra/kubernetes/postgres/postgres-service-for-local-dev.yml</argument>
                <argument>-beam_it_module=sdks/java/io/jdbc</argument>
                <argument>-beam_it_class=org.apache.beam.sdk.io.jdbc.JdbcIOIT</argument>
                <!-- arguments typically defined by user -->
                <argument>-beam_it_options=${integrationTestPipelineOptions}</argument>
              </arguments>
            </configuration>
          </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>
    </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>
  </profiles>

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

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

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

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>2.1.1</version>
    </dependency>

    <!-- compile dependencies -->
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- test dependencies -->
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <version>10.12.1.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbyclient</artifactId>
      <version>10.12.1.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbynet</artifactId>
      <version>10.12.1.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-runners-direct-java</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.4.1212.jre7</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-io-common</artifactId>
      <scope>test</scope>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-io-common</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
