<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>io.netfoundry</groupId>
	<artifactId>conflict-detection</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Conflict Detection</name>
	<description>Conflict Detection for Ziti Networks</description>
	<properties>
		<java.version>21</java.version>
		<spring-cloud.version>2024.0.1</spring-cloud.version>
		<jacoco.version>0.8.11</jacoco.version>
		<sonar.projectName>conflict-detection</sonar.projectName>
		<sonar.projectKey>netfoundry_conflict-detection</sonar.projectKey>
		<sonar.organization>netfoundry</sonar.organization>
		<sonar.host.url>https://sonarcloud.io</sonar.host.url>
		<sonar.sources>src/main</sonar.sources>
		<sonar.tests>src/test</sonar.tests>
		<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
		<sonar.exclusions>
			**/*.html, **/*.js
		</sonar.exclusions>
		<sonar.coverage.exclusions>
			test/**/*, test/*, **/*Configuration.java, **/external/elastic/*,
			**/domain/identityconflict/IdentityConflict.java, **/domain/service/Service.java,
			**/domain/address/Address.java, **/domain/address/FindAddress.java,
			**/domain/identity/Identity.java, **/domain/identity/FindIdentity.java,
			**/domain/servicepolicy/ServicePolicy.java, **/domain/servicepolicy/FindServicePolicy.java,
			**/domain/*/*CustomRepositoryImpl.java
		</sonar.coverage.exclusions>
		<sonar.cpd.exclusions></sonar.cpd.exclusions>
		<springdoc-openapi.version>2.3.0</springdoc-openapi.version>
		<snippetsDirectory>${project.build.directory}/generated-snippets</snippetsDirectory>
		<maven.compiler.release>21</maven.compiler.release>
		<surefire.reuseForks>false</surefire.reuseForks>
	</properties>
	<dependencies>

		<!-- Spring Dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-hateoas</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-elasticsearch</artifactId>
		</dependency>

		<!-- NetFoundry Dependencies -->
		<dependency>
			<groupId>io.netfoundry</groupId>
			<artifactId>common-util-framework</artifactId>
			<version>3.2.3</version>
		</dependency>
		<dependency>
			<groupId>io.netfoundry</groupId>
			<artifactId>authorization</artifactId>
			<version>2.5.1</version>
			<classifier>client</classifier>
			<exclusions>
				<!-- Excluding default (4.0) version of httpclient in favor of the newer one (5.0) below -->
				<exclusion>
					<groupId>org.apache.httpcomponents</groupId>
					<artifactId>httpclient</artifactId>
				</exclusion>
				<exclusion>
					<groupId>io.netfoundry</groupId>
					<artifactId>common-util-framework</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>io.netfoundry</groupId>
			<artifactId>messaging-framework</artifactId>
			<version>0.9.2</version>
		</dependency>

		<!-- Logging and Tracing Dependencies -->
		<dependency>
			<groupId>io.micrometer</groupId>
			<artifactId>micrometer-registry-elastic</artifactId>
		</dependency>
		<dependency>
			<groupId>io.micrometer</groupId>
			<artifactId>micrometer-tracing-bridge-brave</artifactId>
		</dependency>
		<dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>7.4</version>
		</dependency>

		<!-- CVE-2023-1370 - spring-boot-starter-hateoas brings in
          - vulnerable version json-path 2.7.0
          - This override can be removed once the spring boot starter is updated
        -->
		<dependency>
			<groupId>com.jayway.jsonpath</groupId>
			<artifactId>json-path</artifactId>
			<version>2.9.0</version>
		</dependency>

		<!-- Ziti Client and dependencies -->
		<dependency>
			<groupId>io.netfoundry</groupId>
			<artifactId>ziti-java-management-client</artifactId>
			<version>0.16.1</version>
		</dependency>
		<dependency>
			<groupId>io.github.resilience4j</groupId>
			<artifactId>resilience4j-circuitbreaker</artifactId>
		</dependency>
		<dependency>
			<groupId>io.github.resilience4j</groupId>
			<artifactId>resilience4j-micrometer</artifactId>
		</dependency>
		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson-spring-boot-starter</artifactId>
			<version>3.36.0</version>
		</dependency>

		<!-- Misc Dependencies -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents.client5</groupId>
			<artifactId>httpclient5</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-validator</groupId>
			<artifactId>commons-validator</artifactId>
			<version>1.8.0</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-yaml</artifactId>
		</dependency>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>33.4.6-jre</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>com.github.seancfoley</groupId>
			<artifactId>ipaddress</artifactId>
			<version>5.5.0</version>
		</dependency>

		<!-- Provides full logging of all HTTP incoming requests and outgoing responses. Uncomment this and add to application.properties:

		logging.level.org.zalando.logbook.Logbook=TRACE
		logbook.format.style=http

		-->
		<!--
        <dependency>
          <groupId>org.zalando</groupId>
          <artifactId>logbook-spring-boot-starter</artifactId>
          <version>3.0.0</version>
        </dependency>
        -->

		<!-- Documentation Dependencies -->

		<dependency>
			<groupId>capital.scalable</groupId>
			<artifactId>spring-auto-restdocs-core</artifactId>
			<version>2.0.5</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.restdocs</groupId>
			<artifactId>spring-restdocs-mockmvc</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springdoc</groupId>
			<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
			<version>${springdoc-openapi.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springdoc</groupId>
			<artifactId>springdoc-openapi-starter-common</artifactId>
			<version>${springdoc-openapi.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Testing Dependencies -->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>com.vaadin.external.google</groupId>
					<artifactId>android-json</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.amqp</groupId>
			<artifactId>spring-rabbit-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.github.fridujo</groupId>
			<artifactId>rabbitmq-mock</artifactId>
			<version>1.2.0</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.github.codemonstur</groupId>
			<artifactId>embedded-redis</artifactId>
			<version>1.4.3</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-testcontainers</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.redis</groupId>
			<artifactId>testcontainers-redis</artifactId>
			<version>2.2.2</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.testcontainers</groupId>
			<artifactId>junit-jupiter</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.testcontainers</groupId>
			<artifactId>elasticsearch</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>  <!-- key generator for small(er) ids than UUID -->
			<groupId>com.aventrix.jnanoid</groupId>
			<artifactId>jnanoid</artifactId>
			<version>2.0.0</version>
			<scope>test</scope>
		</dependency>

	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<resources>
			<resource>
				<!-- Apply property filtering on the openapi yaml files to set the version -->
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>static/docs/*.yaml</include>
					<include>application*.yaml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>false</filtering>
				<excludes>
					<exclude>static/docs/*.yaml</exclude>
					<exclude>application*.yaml</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>
			<!--  provides Spring Boot support in Maven, letting you package executable jar or war archives and run an application “in-place” -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>build-info</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- will provide git information in the healthcheck endpoint -->
			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
				<version>4.9.10</version>
			</plugin>

			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.1.2</version>
				<configuration>
					<includes>
						<include>**/*Test.java</include>
					</includes>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco.version}</version>
				<executions>
					<execution>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>report</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
					<execution>
						<id>post-unit-test</id>
						<phase>verify</phase>
						<goals>
							<goal>report</goal>
						</goals>
						<configuration>
							<!-- Sets the path to the file which contains the execution data. -->
							<dataFile>target/jacoco.exec</dataFile>
							<!-- Sets the output directory for the code coverage report. -->
							<outputDirectory>target/jacoco-ut</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.sonarsource.scanner.maven</groupId>
					<artifactId>sonar-maven-plugin</artifactId>
					<version>3.10.0.2594</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
	<repositories>
		<repository>
			<id>maven_central</id>
			<name>Maven Central</name>
			<url>https://repo.maven.apache.org/maven2/</url>
		</repository>
	</repositories>


	<profiles>
		<profile>
			<id>test</id>
			<build>
				<plugins>
					<plugin>
						<groupId>pl.project13.maven</groupId>
						<artifactId>git-commit-id-plugin</artifactId>
						<configuration>
							<skip>true</skip>
						</configuration>
					</plugin>

					<!-- Surefire Plugin is used during the test phase of the build lifecycle to execute the unit tests of an application. It generates reports. -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>3.2.5</version>
						<configuration>
							<includes>
								<include>**/*Test.java,*Test.java</include>
							</includes>
							<systemPropertyVariables>
								<org.springframework.restdocs.outputDir>
									${project.build.directory}/generated-snippets
								</org.springframework.restdocs.outputDir>
								<org.springframework.restdocs.javadocJsonDir>
									${project.build.directory}/generated-javadoc-json
								</org.springframework.restdocs.javadocJsonDir>
							</systemPropertyVariables>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>dependency_check</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.owasp</groupId>
						<artifactId>dependency-check-maven</artifactId>
						<version>9.0.9</version>
						<configuration>
							<!-- Fail Build On CVSS core more then 8.0 which is HIGH-->
							<!-- <failBuildOnCVSS>8</failBuildOnCVSS> -->
							<!-- Generate all report formats -->
							<format>ALL</format>
							<!-- Don't use Nexus Analyzer -->
							<retireJsAnalyzerEnabled>false</retireJsAnalyzerEnabled>
							<centralAnalyzerEnabled>false</centralAnalyzerEnabled>
							<ossindexAnalyzerEnabled>false</ossindexAnalyzerEnabled>
							<!-- Am I the latest version? -->
							<versionCheckEnabled>true</versionCheckEnabled>
							<!--suppression Files -->
							<suppressionFiles>src/main/resources/suppressed.xml</suppressionFiles>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>xml-maven-plugin</artifactId>
						<configuration>
							<transformationSets>
								<transformationSet>
									<dir>${project.build.directory}</dir>
									<includes>
										<include>dependency-check-report.xml</include>
									</includes>
									<stylesheet>src/main/resources/dependencycheck_to_pmd.xsl</stylesheet>
									<outputDir>target</outputDir>
									<fileMappers>
										<fileMapper implementation="org.codehaus.plexus.components.io.filemappers.MergeFileMapper">
											<targetName>dependency-check-report-pmd.xml</targetName>
										</fileMapper>
									</fileMappers>
								</transformationSet>
							</transformationSets>
						</configuration>
						<dependencies>
							<dependency>
								<groupId>net.sf.saxon</groupId>
								<artifactId>saxon</artifactId>
								<version>8.7</version>
							</dependency>
						</dependencies>
					</plugin>

				</plugins>
			</build>
		</profile>

		<profile>
			<id>docs</id>
			<build>
				<plugins>
					<plugin>
						<artifactId>maven-javadoc-plugin</artifactId>
						<version>3.6.3</version>
						<extensions>true</extensions>
						<executions>
							<execution>
								<id>generate-javadoc-json</id>
								<phase>compile</phase>
								<goals>
									<goal>javadoc-no-fork</goal>
									<goal>test-javadoc-no-fork</goal>
								</goals>
								<configuration>
									<doclet>capital.scalable.restdocs.jsondoclet.ExtractDocumentationAsJsonDoclet</doclet>
									<docletArtifact>
										<groupId>capital.scalable</groupId>
										<artifactId>spring-auto-restdocs-json-doclet-jdk9</artifactId>
										<version>2.0.5</version>
									</docletArtifact>
									<destDir>generated-javadoc-json</destDir>
									<reportOutputDirectory>${project.build.directory}</reportOutputDirectory>
									<useStandardDocletOptions>false</useStandardDocletOptions>
									<show>package</show>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<groupId>org.asciidoctor</groupId>
						<artifactId>asciidoctor-maven-plugin</artifactId>
						<version>3.0.0</version>
						<executions>
							<execution>
								<id>generate-docs</id>
								<phase>prepare-package</phase>
								<goals>
									<goal>process-asciidoc</goal>
								</goals>
								<configuration>
									<backend>html</backend>
									<doctype>book</doctype>
									<sourceDirectory>src/main/asciidoc</sourceDirectory>
									<sourceDocumentName>index.adoc</sourceDocumentName>
									<attributes>
										<snippets>${snippetsDirectory}</snippets>
										<googleAnalyticsId>G-XZCJBSHKV1</googleAnalyticsId>
									</attributes>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<artifactId>maven-resources-plugin</artifactId>
						<executions>
							<execution>
								<id>copy-generated-api-docs-to-static-docs</id>
								<phase>prepare-package</phase>
								<goals>
									<goal>copy-resources</goal>
								</goals>
								<configuration>
									<outputDirectory>${project.build.outputDirectory}/static/docs</outputDirectory>
									<resources>
										<resource>
											<directory>${project.build.directory}/generated-docs</directory>
										</resource>
									</resources>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

	</profiles>

</project>
