<?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>

	<groupId>org.gcube.idm</groupId>
	<artifactId>idm-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Identity Manager (IDM) Service</name>
	<description>Identity Manager (IDM) Service - Smartgears</description>
	<packaging>war</packaging>

	<parent>
		<groupId>org.gcube.tools</groupId>
		<artifactId>maven-parent</artifactId>
		<version>1.2.0</version>
	</parent>

	<properties>
		<java.version>11</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>${java.version}</maven.compiler.source>
		<maven.compiler.target>${java.version}</maven.compiler.target>

		<!-- OPTIONAL. for authorization-control-library -->
		<aspectj-plugin.version>1.14.0</aspectj-plugin.version>

		<!-- bind jackson version to avoid inconsistences with keycloak dependencies -->
		<jackson.version>2.15.3</jackson.version>

		<enunciate.version>2.16.1</enunciate.version>
		<keycloak.client.version>21.1.2</keycloak.client.version>

	</properties>

	<scm>
		<connection>
			scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</connection>
		<developerConnection>
			scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</developerConnection>
		<url>
			https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url>
	</scm>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.gcube.distribution</groupId>
				<artifactId>gcube-smartgears-bom</artifactId>
				<version>3.0.1-SNAPSHOT</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.gcube.idm</groupId>
			<artifactId>idm-common-library</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.jaxrs</groupId>
			<artifactId>jackson-jaxrs-base</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.jaxrs</groupId>
			<artifactId>jackson-jaxrs-json-provider</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-jaxb-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/jakarta.activation/jakarta.activation-api -->
		<dependency>
			<groupId>jakarta.activation</groupId>
			<artifactId>jakarta.activation-api</artifactId>
			<version>1.2.1</version>
		</dependency>

		<dependency>
			<groupId>jakarta.xml.bind</groupId>
			<artifactId>jakarta.xml.bind-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jaxb</groupId>
			<artifactId>jaxb-runtime</artifactId>
		</dependency>

		<!-- 
		<dependency>
			<groupId>jakarta.activation</groupId>
			<artifactId>jakarta.activation-api</artifactId>
			<version>2.1.2</version>
		</dependency> -->

		<!-- <dependency>
			<groupId>jakarta.xml.ws</groupId>
			<artifactId>jakarta.xml.ws-api</artifactId>
		</dependency> -->

		<!-- <dependency>
			<groupId>jakarta.xml.bind</groupId>
			<artifactId>jakarta.xml.bind-api</artifactId>
		</dependency>
		<dependency>
			<groupId>com.sun.xml.bind</groupId>
			<artifactId>jaxb-impl</artifactId>
		</dependency> -->

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

		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jsr310</artifactId>
			<version>${jackson.version}</version>
		</dependency>


		<!-- 
usermanagement-core depends on older httpcommon and gives this error on keycloak client:
java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
		https://stackoverflow.com/questions/44750124/classnotfoundexception-on-org-apache-http-ssl-truststrategy

solution: bind version, or exclude them in usermanagement-core  
	
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.13</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.4.13</version>
		</dependency>
	-->

		<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-admin-client -->
		<dependency>
			<groupId>org.keycloak</groupId>
			<artifactId>keycloak-admin-client</artifactId>
			<version>${keycloak.client.version}</version>

			<exclusions>
				<exclusion>
					<groupId>org.jboss.spec.javax.ws.rs</groupId>
					<artifactId>jboss-jaxrs-api_3.0_spec</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- <dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
		</dependency> -->

		<!-- smartgears -->
		<dependency>
			<groupId>org.gcube.core</groupId>
			<artifactId>common-smartgears</artifactId>
		</dependency>
		<dependency>
			<groupId>org.gcube.common</groupId>
			<artifactId>common-security</artifactId>
		</dependency>

		<dependency>
			<groupId>org.gcube.common</groupId>
			<artifactId>common-authorization</artifactId>
		</dependency>

		<!-- <dependency>
			<groupId>org.gcube.common</groupId>
			<artifactId>authorization-utils</artifactId>
			<version>2.2.0</version>
		</dependency> -->

		<dependency>
			<groupId>org.gcube.common</groupId>
			<artifactId>authorization-control-library</artifactId>
		</dependency>
		<dependency>
			<groupId>org.gcube.core</groupId>
			<artifactId>common-smartgears-app</artifactId>
		</dependency>

		<!-- jersey -->
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
		</dependency>

		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-json-jackson</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
			<scope>compile</scope>
		</dependency>
		<!--
		https://mvnrepository.com/artifact/org.glassfish.jersey.inject/jersey-cdi2-se -->
		<dependency>
			<groupId>org.glassfish.jersey.inject</groupId>
			<artifactId>jersey-cdi2-se</artifactId>
		</dependency>

		<!-- add jackson as json provider -->
		<!-- <dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-json-jackson</artifactId>
		</dependency> -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>

		<!-- Required for Enunciate plugin -->
		<!-- https://mvnrepository.com/artifact/com.webcohesion.enunciate/enunciate-core-annotations -->
		<dependency>
			<groupId>com.webcohesion.enunciate</groupId>
			<artifactId>enunciate-core-annotations</artifactId>
			<version>${enunciate.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.webcohesion.enunciate</groupId>
			<artifactId>enunciate-rt-util</artifactId>
			<version>${enunciate.version}</version>
			<scope>provided</scope>
		</dependency>

		<!-- END Required for Enunciate plugin -->

		<!-- Test libraries -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<!-- <version>1.9.7</version> -->
			<!-- <scope>runtime</scope> -->
		</dependency>

		<dependency>
			<groupId>com.liferay.portal</groupId>
			<artifactId>portal-service</artifactId>
			<version>6.2.5</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
			<scope>compile</scope>
		</dependency>

		<!-- needed by com.liferay.portal -->
		<dependency>
			<groupId>com.googlecode.json-simple</groupId>
			<artifactId>json-simple</artifactId>
			<version>1.1.1</version>
		</dependency>

		<!-- 
usermanagement-core depends on older httpcommon and gives this error on keycloak client:
java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
		https://stackoverflow.com/questions/44750124/classnotfoundexception-on-org-apache-http-ssl-truststrategy
		-->
		<dependency>
			<groupId>org.gcube.dvos</groupId>
			<artifactId>usermanagement-core</artifactId>
			<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
			<scope>compile</scope>
			<exclusions>
				<exclusion>
					<groupId>org.apache.httpcomponents</groupId>
					<artifactId>httpclient</artifactId>
				</exclusion>

				<exclusion>
					<groupId>org.apache.httpcomponents</groupId>
					<artifactId>httpcore</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- 
		<dependency>
			<groupId>org.gcube.resources.discovery</groupId>
			<artifactId>ic-client</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.gcube.core</groupId>
			<artifactId>common-scope</artifactId>
			<scope>provided</scope>
		</dependency> -->


	</dependencies>


	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>

			<!-- OPTIONAL generate the war in a different folder, that will be
			mounted on docker
			container  -->
			<!--
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warName>idm-service</warName>
					<outputDirectory>tomcat/webapps</outputDirectory>
				</configuration>
			</plugin> 
		-->

			<!-- OPTIONAL. authorization-control-library: add this plugin if you
			want to use gcube
			authorization control funzionalities -->
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>aspectj-maven-plugin</artifactId>
				<version>${aspectj-plugin.version}</version>
				<configuration>
					<complianceLevel>11</complianceLevel>
					<source>11</source>
					<target>11</target>
					<aspectLibraries>
						<aspectLibrary>
							<groupId>org.gcube.common</groupId>
							<artifactId>authorization-control-library</artifactId>
						</aspectLibrary>
					</aspectLibraries>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- Sphinx plugin'
			<plugin>
				<groupId>kr.motd.maven</groupId>
				<artifactId>sphinx-maven-plugin</artifactId>
				<version>2.10.0</version>
				<configuration>
					<outputDirectory>
						${project.build.directory}/${project.artifactId}-${project.version}/docs</outputDirectory>
					<builder>html</builder>
					<configDirectory>${basedir}/docs</configDirectory>
					<sourceDirectory>${basedir}/docs</sourceDirectory>
				</configuration>
				<executions>
					<execution>
						<phase>process-resources</phase>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
				</executions>
			</plugin>  -->

			<!-- Enunciate Maven plugin -->
			<plugin>
				<groupId>com.webcohesion.enunciate</groupId>
				<artifactId>enunciate-maven-plugin</artifactId>
				<version>${enunciate.version}</version>
				<executions>
					<execution>
						<id>assemble</id>
						<goals>
							<goal>assemble</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- Copy Enunciate Documentation from your-application/api-docs
				into your war -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-enunciate-docs</id>
						<phase>process-resources</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<outputDirectory>target</outputDirectory>
							<resources>
								<resource>
									<targetPath>
										${project.build.directory}/${project.artifactId}-${project.version}/api-docs</targetPath>
									<directory>
										${project.build.directory}/api-docs</directory>
									<filtering>true</filtering>
								</resource>
							</resources>
						</configuration>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>
</project>