<?xml version="1.0" encoding="UTF-8"?>
<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">
  <parent>
    <artifactId>platform</artifactId>
    <groupId>org.open-metadata</groupId>
    <version>1.2.2</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>openmetadata-service</artifactId>

  <properties>
    <dropwizard.swagger.version>2.0.12-1</dropwizard.swagger.version>
    <sonar.junit.reportPaths>${project.basedir}/target/surefire-reports</sonar.junit.reportPaths>
    <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco-aggregate/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
    <sonar.tests>${project.basedir}/src/test/java</sonar.tests>
    <org.testcontainers.version>1.19.1</org.testcontainers.version>
    <awssdk.version>2.21.4</awssdk.version>
    <expiring.map.version>0.5.11</expiring.map.version>
    <java.saml>2.9.0</java.saml>
    <xmlsec.version>2.2.6</xmlsec.version>
    <quartz.version>2.3.2</quartz.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-bom</artifactId>
        <version>${awssdk.version}</version>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.open-metadata</groupId>
      <artifactId>common</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.open-metadata</groupId>
      <artifactId>elasticsearch-deps</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.open-metadata</groupId>
      <artifactId>opensearch-deps</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr4-runtime</artifactId>
    </dependency>
    <dependency>
      <groupId>com.macasaet.fernet</groupId>
      <artifactId>fernet-java8</artifactId>
    </dependency>
    <dependency>
      <groupId>org.open-metadata</groupId>
      <artifactId>openmetadata-spec</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-assets</artifactId>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-core</artifactId>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-jdbi3</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>io.swagger.core.v3</groupId>
      <artifactId>swagger-annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>ru.vyarus.guicey</groupId>
      <artifactId>guicey-jdbi3</artifactId>
      <version>5.9.1</version>
    </dependency>
    <dependency>
      <groupId>com.smoketurner</groupId>
      <artifactId>dropwizard-swagger</artifactId>
      <version>${dropwizard.swagger.version}</version>
      <exclusions>
        <exclusion>
          <groupId>io.dropwizard</groupId>
          <artifactId>dropwizard-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.google.code.findbugs</groupId>
          <artifactId>annotations</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-io</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.glassfish</groupId>
          <artifactId>jakarta.el</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-multipart</artifactId>
    </dependency>
    <dependency>
      <groupId>io.github.maksymdolgykh.dropwizard</groupId>
      <artifactId>dropwizard-micrometer-core</artifactId>
    </dependency>
    <dependency>
      <groupId>io.github.maksymdolgykh.dropwizard</groupId>
      <artifactId>dropwizard-micrometer-jdbi</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>${commons-lang.version}</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpasyncclient</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>io.dropwizard.modules</groupId>
      <artifactId>dropwizard-health</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <exclusions>
        <!-- excluded as these are conflicting with dropwizard jersey-jackson dependencies -->
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.jaxrs</groupId>
          <artifactId>jackson-jaxrs-base</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.jaxrs</groupId>
          <artifactId>jackson-jaxrs-json-provider</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
    </dependency>
    <dependency>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
    </dependency>
    <dependency>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-mysql</artifactId>
    </dependency>
    <dependency>
      <groupId>io.github.classgraph</groupId>
      <artifactId>classgraph</artifactId>
    </dependency>
    <!-- Dependencies for secret store manager providers -->
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>secretsmanager</artifactId>
      <version>${awssdk.version}</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>ssm</artifactId>
      <version>${awssdk.version}</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>rds</artifactId>
      <version>${awssdk.version}</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>sts</artifactId>
      <version>${awssdk.version}</version>
    </dependency>

    <dependency>
      <groupId>io.dropwizard.modules</groupId>
      <artifactId>dropwizard-web</artifactId>
    </dependency>

    <!-- Dependencies for cloudwatch monitoring -->
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>cloudwatch</artifactId>
      <version>${awssdk.version}</version>
    </dependency>

    <!--test dependencies-->
    <dependency>
      <groupId>org.glassfish.jersey.core</groupId>
      <artifactId>jersey-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.awaitility</groupId>
      <artifactId>awaitility</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-testing</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-inline</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>testcontainers</artifactId>
      <version>${org.testcontainers.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>${org.testcontainers.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>postgresql</artifactId>
      <version>${org.testcontainers.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>mysql</artifactId>
      <version>${org.testcontainers.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>${org.testcontainers.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.opensearch</groupId>
      <artifactId>opensearch-testcontainers</artifactId>
      <version>2.0.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.connectors</groupId>
      <artifactId>jersey-jetty-connector</artifactId>
      <version>2.40</version>
      <scope>test</scope>
    </dependency>
    <!-- JSON-P: Java API for JSON Processing (JSR 374) -->
    <dependency>
      <groupId>javax.json</groupId>
      <artifactId>javax.json-api</artifactId>
    </dependency>

    <!-- Apache Johnzon: Implementation of the Java API for JSON Processing (JSR 374) -->
    <dependency>
      <groupId>org.apache.johnzon</groupId>
      <artifactId>johnzon-core</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr353</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20231013</version>
    </dependency>

    <dependency>
      <groupId>com.networknt</groupId>
      <artifactId>json-schema-validator</artifactId>
      <version>${json-schema-validator.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.yaml</groupId>
          <artifactId>snakeyaml</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>${snakeyaml.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>${jjwt.version}</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
    <dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>${java-jwt.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.auth0/jwks-rsa -->
    <dependency>
      <groupId>com.auth0</groupId>
      <artifactId>jwks-rsa</artifactId>
      <version>${jwks-rsa.version}</version>
    </dependency>
    <dependency>
      <groupId>io.github.artsok</groupId>
      <artifactId>rerunner-jupiter</artifactId>
      <version>${rerunner-jupiter.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.lmax</groupId>
      <artifactId>disruptor</artifactId>
    </dependency>
    <dependency>
      <groupId>io.socket</groupId>
      <artifactId>socket.io-server</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>io.socket</groupId>
      <artifactId>engine.io-server-jetty</artifactId>
      <version>6.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.websocket</groupId>
      <artifactId>websocket-server</artifactId>
      <version>9.4.53.v20231009</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>at.favre.lib</groupId>
      <artifactId>bcrypt</artifactId>
      <version>${bcrypt.version}</version>
    </dependency>
    <dependency>
      <groupId>org.simplejavamail</groupId>
      <artifactId>simple-java-mail</artifactId>
      <version>${simplejavamail.version}</version>
    </dependency>
    <dependency>
      <groupId>org.passay</groupId>
      <artifactId>passay</artifactId>
      <version>${passay.version}</version>
    </dependency>
    <!--Template engine-->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>${freemarker.version}</version>
    </dependency>
    <dependency>
      <groupId>net.jodah</groupId>
      <artifactId>expiringmap</artifactId>
      <version>${expiring.map.version}</version>
    </dependency>
    <dependency>
      <groupId>com.unboundid</groupId>
      <artifactId>unboundid-ldapsdk</artifactId>
      <version>${unboundsdk.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bitbucket.cowwoc.diff-match-patch</groupId>
      <artifactId>diff-match-patch</artifactId>
      <version>${diffMatch.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-csv</artifactId>
      <version>1.10.0</version>
    </dependency>
    <dependency>
      <groupId>com.onelogin</groupId>
      <artifactId>java-saml</artifactId>
      <version>${java.saml}</version>
      <exclusions>
        <exclusion>
          <groupId>com.fasterxml.woodstox</groupId>
          <artifactId>woodstox-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.santurario</groupId>
          <artifactId>xmlsec</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.santuario</groupId>
      <artifactId>xmlsec</artifactId>
      <version>${xmlsec.version}</version>
    </dependency>
    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>${quartz.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.woodstox</groupId>
      <artifactId>woodstox-core</artifactId>
      <version>${woodstox.version}</version>
    </dependency>
    <dependency>
      <groupId>com.cronutils</groupId>
      <artifactId>cron-utils</artifactId>
      <version>9.2.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>32.1.3-jre</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-commons</artifactId>
      <version>1.9.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>${maven-source-plugin.version}</version>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-plugin.version}</version>
            <configuration>
              <doclint>none</doclint>
            </configuration>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>3.0.1</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
                <configuration>
                  <gpgArguments>
                    <arg>--pinentry-mode</arg>
                    <arg>loopback</arg>
                  </gpgArguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
      <profile>
        <id>postgres-tests</id>
        <build>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven-surefire.version}</version>
              <configuration>
                <reuseForks>false</reuseForks>
                <parallel>classes</parallel>
                <forkCount>1C</forkCount>
                <argLine>-Xmx1G</argLine>
              </configuration>
              <executions>
                <execution>
                  <id>default-test</id>
                  <configuration>
                    <skip>true</skip>
                    <systemPropertyVariables>
                      <elasticSearchContainerClassName>docker.elastic.co/elasticsearch/elasticsearch:7.16.3</elasticSearchContainerClassName>
                      <openSearchContainerClassName>opensearchproject/opensearch:1.3.0</openSearchContainerClassName>
                      <runESTestCases>false</runESTestCases>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
                <execution>
                  <goals>
                    <goal>test</goal>
                  </goals>
                  <id>postgres-integration-tests</id>
                  <phase>test</phase>
                  <configuration>
                    <includes>
                      <include>**/*ResourceTest.java</include>
                    </includes>
                    <systemPropertyVariables>
                      <jdbcContainerClassName>org.testcontainers.containers.PostgreSQLContainer</jdbcContainerClassName>
                      <jdbcContainerImage>postgres:12.10</jdbcContainerImage>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </profile>
      <profile>
        <id>mysql-tests</id>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
        <build>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven-surefire.version}</version>
              <configuration>
                <reuseForks>false</reuseForks>
                <parallel>classes</parallel>
                <forkCount>1C</forkCount>
                <argLine>-Xmx1G</argLine>
              </configuration>
              <executions>
                <execution>
                  <id>default-test</id>
                  <configuration>
                    <skip>true</skip>
                    <systemPropertyVariables>
                      <elasticSearchContainerClassName>docker.elastic.co/elasticsearch/elasticsearch:7.16.3</elasticSearchContainerClassName>
                      <openSearchContainerClassName>opensearchproject/opensearch:1.3.0</openSearchContainerClassName>
                      <runESTestCases>false</runESTestCases>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
                <execution>
                  <goals>
                    <goal>test</goal>
                  </goals>
                  <id>unit-tests</id>
                  <configuration>
                    <includes>**/*Test.java</includes>
                    <excludes>**/*ResourceTest.java</excludes>
                    <systemPropertyVariables>
                      <jdbcContainerClassName>org.testcontainers.containers.MySQLContainer</jdbcContainerClassName>
                      <jdbcContainerImage>mysql:8</jdbcContainerImage>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
                <execution>
                  <goals>
                    <goal>test</goal>
                  </goals>
                  <id>mysql-integration-tests</id>
                  <phase>test</phase>
                  <configuration>
                    <includes>
                      <include>**/*ResourceTest.java</include>
                    </includes>
                    <systemPropertyVariables>
                      <jdbcContainerClassName>org.testcontainers.containers.MySQLContainer</jdbcContainerClassName>
                      <jdbcContainerImage>mysql:8</jdbcContainerImage>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </profile>
  </profiles>

  <build>
    <plugins>
      <plugin>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-maven-plugin</artifactId>
        <version>${antlr.version}</version>
        <executions>
          <execution>
            <phase>generate-resources</phase>
            <goals>
              <goal>antlr4</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>com.theoryinpractise</groupId>
        <artifactId>googleformatter-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
          <doCheck>false</doCheck>
          <doUpdate>false</doUpdate>
          <outputDirectory>${project.build.directory}/classes/catalog</outputDirectory>
          <outputName>VERSION</outputName>
        </configuration>
        <executions>
          <execution>
            <phase>generate-resources</phase>
            <goals>
              <goal>create-metadata</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>io.openapitools.swagger</groupId>
        <artifactId>swagger-maven-plugin</artifactId>
        <configuration>
          <resourcePackages>
            <resourcePackage>org.openmetadata.service.resources</resourcePackage>
          </resourcePackages>
          <useResourcePackagesChildren>true</useResourcePackagesChildren>
          <outputDirectory>${basedir}/target/classes/assets/</outputDirectory>
          <outputFilename>swagger</outputFilename>
          <outputFormats>JSON,YAML</outputFormats>
          <prettyPrint>true</prettyPrint>
          <swaggerConfig>
            <servers>
              <server>
                <url>http://localhost:8585/api</url>
                <description>Endpoint URL</description>
              </server>
            </servers>
            <info>
              <title>OpenMetadata Apis</title>
              <version>${project.parent.version}</version>
              <contact>
                <email>openmetadata-dev@googlegroups.com</email>
                <name>OpenMetadata</name>
                <url>https://open-metadata.org</url>
              </contact>
              <license>
                <url>https://www.apache.org/licenses/LICENSE-2.0</url>
                <name>Apache 2.0</name>
              </license>
            </info>
            <descriptionFile>../openmetadata-docs/content/v1.2.x/main-concepts/metadata-standard/apis.md</descriptionFile>
          </swaggerConfig>
        </configuration>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
