<?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.hop</groupId>
    <artifactId>hop-assemblies-plugins-tech</artifactId>
    <version>0.70</version>
  </parent>

  <artifactId>hop-assemblies-plugins-tech-google</artifactId>
  <version>0.70</version>
  <packaging>pom</packaging>
  <name>Hop Assemblies Plugins Technology Google</name>
  <description></description>

  <properties>
    <commons-vfs2.version>2.4.1</commons-vfs2.version>
    <google-api-client.version>1.30.10</google-api-client.version>
    <google-api-sheets.version>v4-rev612-1.25.0</google-api-sheets.version>
    <google-api-drive.version>v3-rev197-1.25.0</google-api-drive.version>
    <google-api-services-analytics.version>v3-rev169-1.25.0</google-api-services-analytics.version>
    <google-api-services-drive.version>v3-rev197-1.25.0</google-api-services-drive.version>
    <google-cloud-storage.version>1.53.0</google-cloud-storage.version>
    <google-http-client-jackson2.version>1.36.0</google-http-client-jackson2.version>
    <google-http-client.version>1.36.0</google-http-client.version>
    <google-oauth-client.version>1.31.2</google-oauth-client.version>
    <google-oauth-client-jetty.version>1.31.2</google-oauth-client-jetty.version>
    <jetty-client.version>6.1.26</jetty-client.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.hop</groupId>
      <artifactId>hop-plugins-tech-google</artifactId>
      <version>${project.version}</version>
    </dependency>

    <!-- Google Analytics dependencies -->

    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-analytics</artifactId>
      <version>${google-api-services-analytics.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>${google-api-client.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client</artifactId>
      <version>${google-oauth-client.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client-jackson2</artifactId>
      <version>${google-http-client-jackson2.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client</artifactId>
      <version>${google-http-client.version}</version>
      <exclusions>
        <!-- Vulnerable component - need more recent version [PPP-3571] -->
        <exclusion>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- Google Sheets dependencies -->

    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client-jetty</artifactId>
      <version>${google-oauth-client-jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-sheets</artifactId>
      <version>${google-api-sheets.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-drive</artifactId>
      <version>${google-api-drive.version}</version>
    </dependency>

    <!-- Google VFS dependencies -->

    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client-java6</artifactId>
      <version>${google-oauth-client.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-vfs2</artifactId>
      <version>${commons-vfs2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-client</artifactId>
      <version>${jetty-client.version}</version>
    </dependency>

    <!-- Google Cloud Storage VFS dependencies -->

    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
      <version>${google-cloud-storage.version}</version>
    </dependency>

  </dependencies>
</project>