<?xml version="1.0"?>
<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>
  <artifactId>google-cloud-bigtable</artifactId>
  <version>1.3.0</version><!-- {x-version-update:google-cloud-bigtable:current} -->
  <packaging>jar</packaging>
  <name>Google Cloud Bigtable</name>
  <url>https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-bigtable</url>
  <description>
    Java idiomatic client for Google Cloud Bigtable.
  </description>
  <parent>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-clients</artifactId>
    <version>0.114.0-alpha</version><!-- {x-version-update:google-cloud-clients:current} -->
  </parent>
  <properties>
    <site.installationModule>google-cloud-bigtable</site.installationModule>
  </properties>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>google-cloud-core-grpc</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.api.grpc</groupId>
      <artifactId>proto-google-cloud-bigtable-v2</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.api.grpc</groupId>
      <artifactId>proto-google-cloud-bigtable-admin-v2</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>io.opencensus</groupId>
      <artifactId>opencensus-api</artifactId>
    </dependency>

    <!-- // TODO(igorbernstein): Enable grpc views once we upgrade to grpc-java 1.24.0 -->
<!--    <dependency>-->
<!--      <groupId>io.opencensus</groupId>-->
<!--      <artifactId>opencensus-contrib-grpc-metrics</artifactId>-->
<!--      <version>${opencensus.version}</version>-->
<!--    </dependency>-->

    <!-- Test dependencies -->
    <dependency>
      <groupId>com.google.api.grpc</groupId>
      <artifactId>grpc-google-cloud-bigtable-v2</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.api.grpc</groupId>
      <artifactId>grpc-google-cloud-bigtable-admin-v2</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-bigtable-emulator</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.truth</groupId>
      <artifactId>truth</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.api</groupId>
      <artifactId>gax</artifactId>
      <classifier>testlib</classifier>
      <scope>test</scope>
    </dependency>
    <!-- Need testing utility classes for generated gRPC clients tests -->
    <dependency>
      <groupId>com.google.api</groupId>
      <artifactId>gax-grpc</artifactId>
      <classifier>testlib</classifier>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-testing</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-conformance-tests</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>bigtable-emulator-it</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>

      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <id>emulator-it</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemPropertyVariables>
                    <bigtable.env>emulator</bigtable.env>
                  </systemPropertyVariables>
                  <test>com.google.cloud.bigtable.data.v2.it.**</test>
                  <test>com.google.cloud.bigtable.admin.v2.it.**</test>
                  <summaryFile>${project.build.directory}/failsafe-reports/failsafe-summary-emulator-it.xml</summaryFile>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>bigtable-prod-it</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <id>prod-it</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemPropertyVariables>
                    <bigtable.env>prod</bigtable.env>
                  </systemPropertyVariables>
                  <test>com.google.cloud.bigtable.data.v2.it.**</test>
                  <test>com.google.cloud.bigtable.admin.v2.it.**</test>
                  <summaryFile>${project.build.directory}/failsafe-reports/failsafe-summary-prod-it.xml</summaryFile>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>bigtable-directpath-it</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <id>directpath-it</id>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemPropertyVariables>
                    <bigtable.env>direct_path</bigtable.env>
                    <!-- TODO(igorbernstein): This property should be auto set by gax -->
                    <io.grpc.internal.DnsNameResolverProvider.enable_grpclb>true</io.grpc.internal.DnsNameResolverProvider.enable_grpclb>
                  </systemPropertyVariables>
                  <!-- Enable directpath for bigtable -->
                  <environmentVariables>
                    <GOOGLE_CLOUD_ENABLE_DIRECT_PATH>bigtable</GOOGLE_CLOUD_ENABLE_DIRECT_PATH>
                  </environmentVariables>
                  <!-- TODO(igorbernstein): Once the control plane is accessible via directpath, add admin tests -->
                  <test>com.google.cloud.bigtable.data.v2.it.**</test>
                  <summaryFile>${project.build.directory}/failsafe-reports/failsafe-summary-directpath-it.xml</summaryFile>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M2</version>
        <executions>
          <execution>
            <id>enforce-valid-profile</id>
            <configuration>
              <rules>
                <requireProfileIdsExist/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!-- Workaround maven failing to delete old test reports. For some reason, when using the
        failsafe plugin in profiles, maven retains the counts from previous executions. Causing a
        stale failure to fail the current test run. -->
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <id>clean-old-reports</id>
            <goals>
              <goal>clean</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
              <excludeDefaultDirectories>true</excludeDefaultDirectories>
              <filesets>
                <fileset>
                  <directory>${project.build.directory}/failsafe-reports</directory>
                </fileset>
              </filesets>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <parallel>classes</parallel>
          <perCoreThreadCount>true</perCoreThreadCount>
          <threadCount>2</threadCount>
          <trimStackTrace>false</trimStackTrace>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>3.0.0-M3</version>
          </dependency>
        </dependencies>
      </plugin>

      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M3</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>3.0.0-M3</version>
          </dependency>
        </dependencies>

        <configuration>
          <!--
            TODO(igorbernstein): enable parallel tests once the generate client tests use unique
            names for the mock server
          -->
          <trimStackTrace>false</trimStackTrace>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <show>protected</show>
          <nohelp>true</nohelp>
          <doclint>none</doclint>
          <splitindex>true</splitindex>

          <sourceFileExcludes>
            <!-- TODO(igorbernstein): use a custom doclet to exclude @InternalApi classes from javadoc -->
            <!-- Hide @InternalApi classes -->
            <exclude>com/google/cloud/bigtable/gaxx/**</exclude>

            <!-- Hide @InternalApi classes for InstanceAdmin -->
            <exclude>com/google/cloud/bigtable/admin/v2/internal/**</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminClient.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminSettings.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminCallableFactory.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminStub.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStub.java</exclude>

            <!-- Hide @InternalApi classes for TableAdmin -->
            <exclude>com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminClient.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminSettings.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminCallableFactory.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminStub.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStub.java</exclude>
            <exclude>com/google/cloud/bigtable/admin/v2/stub/EnhancedBigtableTableAdminStub.java</exclude>

            <!-- Hide @InternalApi classes for Data -->
            <exclude>com/google/cloud/bigtable/data/v2/internal/**</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/BaseBigtableDataClient.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/BaseBigtableDataSettings.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/BigtableStub.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/GrpcBigtableStub.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/GrpcBigtableCallableFactory.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/mutaterows/**</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/readrows/**</exclude>
            <exclude>com/google/cloud/bigtable/data/v2/stub/metrics/**</exclude>
          </sourceFileExcludes>

          <offlineLinks>
            <offlineLink>
              <url>${project.javadoc.protobufBaseURL}</url>
              <location>../../../../../google-api-grpc/proto-google-cloud-bigtable-v2/target/site/apidocs/</location>
            </offlineLink>
            <offlineLink>
              <url>${project.javadoc.protobufBaseURL}</url>
              <location>../../../../../google-api-grpc/grpc-google-cloud-bigtable-v2/target/site/apidocs/</location>
            </offlineLink>
            <offlineLink>
              <url>${project.javadoc.protobufBaseURL}</url>
              <location>../../../../../google-api-grpc/proto-google-cloud-bigtable-admin-v2/target/site/apidocs/</location>
            </offlineLink>
            <offlineLink>
              <url>${project.javadoc.protobufBaseURL}</url>
              <location>../../../../../google-api-grpc/grpc-google-cloud-bigtable-admin-v2/target/site/apidocs/</location>
            </offlineLink>
          </offlineLinks>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
</project>
