diff --git a/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/DatasetsRepository.java b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/DatasetsRepository.java new file mode 100644 index 0000000..06f3caf --- /dev/null +++ b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/DatasetsRepository.java @@ -0,0 +1,12 @@ +package io.github.genomicdatainfrastructure.discovery.repositories; + +import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse; + +public interface DatasetsRepository { + + PackagesSearchResponse search(DatasetSearchQuery query, String accessToken); + + CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken); +} diff --git a/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/GdiDatasetsRepository.java b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/GdiDatasetsRepository.java new file mode 100644 index 0000000..3d2151e --- /dev/null +++ b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/GdiDatasetsRepository.java @@ -0,0 +1,54 @@ +// SPDX-FileCopyrightText: 2024 PNED G.I.E. +// +// SPDX-License-Identifier: Apache-2.0 + +package io.github.genomicdatainfrastructure.discovery.repositories; + +import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery; +import io.github.genomicdatainfrastructure.discovery.model.DatasetsSearchResponse; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse; +import io.github.genomicdatainfrastructure.discovery.services.CkanFacetsQueryBuilder; +import io.github.genomicdatainfrastructure.discovery.services.DatasetsSearchService; +import io.github.genomicdatainfrastructure.discovery.services.PackagesSearchResponseMapper; +import io.quarkus.arc.lookup.LookupIfProperty; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import org.eclipse.microprofile.rest.client.inject.RestClient; + +@LookupIfProperty(name = "repositories.gdi", stringValue = "true") +@ApplicationScoped +public class GdiDatasetsRepository implements DatasetsRepository { + + private static final String SELECTED_FACETS = "[\"access_rights\",\"theme\",\"tags\",\"spatial_uri\",\"organization\",\"publisher_name\",\"res_format\"]"; + private final CkanQueryApi ckanQueryApi; + + @Inject + public GdiDatasetsRepository( + @RestClient CkanQueryApi ckanQueryApi + ) { + this.ckanQueryApi = ckanQueryApi; + } + + @Override + public PackagesSearchResponse search(DatasetSearchQuery query, String accessToken) { + var facetsQuery = CkanFacetsQueryBuilder.buildFacetQuery(query); + + return ckanQueryApi.packageSearch( + query.getQuery(), + facetsQuery, + query.getSort(), + query.getRows(), + query.getStart(), + SELECTED_FACETS, + accessToken + ); + } + + @Override + public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) { + return ckanQueryApi.packageShow(id, accessToken); + } +} diff --git a/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/LndcDatasetsRepository.java b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/LndcDatasetsRepository.java new file mode 100644 index 0000000..e33b9d7 --- /dev/null +++ b/src/main/java/io/github/genomicdatainfrastructure/discovery/repositories/LndcDatasetsRepository.java @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: 2024 PNED G.I.E. +// +// SPDX-License-Identifier: Apache-2.0 + +package io.github.genomicdatainfrastructure.discovery.repositories; + +import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse; +import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.PackagesSearchResponse; +import io.github.genomicdatainfrastructure.discovery.services.CkanFacetsQueryBuilder; +import io.quarkus.arc.lookup.LookupIfProperty; +import io.quarkus.arc.lookup.LookupUnlessProperty; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.context.Dependent; +import jakarta.inject.Inject; +import org.apache.commons.lang3.NotImplementedException; +import org.eclipse.microprofile.rest.client.inject.RestClient; + +@LookupIfProperty(name = "repositories.lndc", stringValue = "true") +@ApplicationScoped +public class LndcDatasetsRepository implements DatasetsRepository { + + @Override + public PackagesSearchResponse search(DatasetSearchQuery query, String accessToken) { + throw new NotImplementedException(); + } + + @Override + + public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) { + throw new NotImplementedException(); + } +} diff --git a/src/main/java/io/github/genomicdatainfrastructure/discovery/services/CkanDatasetsSearchService.java b/src/main/java/io/github/genomicdatainfrastructure/discovery/services/CkanDatasetsSearchService.java index 36348fe..d798cdb 100644 --- a/src/main/java/io/github/genomicdatainfrastructure/discovery/services/CkanDatasetsSearchService.java +++ b/src/main/java/io/github/genomicdatainfrastructure/discovery/services/CkanDatasetsSearchService.java @@ -4,41 +4,22 @@ package io.github.genomicdatainfrastructure.discovery.services; -import org.eclipse.microprofile.rest.client.inject.RestClient; - +import io.github.genomicdatainfrastructure.discovery.repositories.DatasetsRepository; import io.github.genomicdatainfrastructure.discovery.model.DatasetSearchQuery; import io.github.genomicdatainfrastructure.discovery.model.DatasetsSearchResponse; -import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; @ApplicationScoped public class CkanDatasetsSearchService implements DatasetsSearchService { - private static final String SELECTED_FACETS = "[\"access_rights\",\"theme\",\"tags\",\"spatial_uri\",\"organization\",\"publisher_name\",\"res_format\"]"; - - private final CkanQueryApi ckanQueryApi; - @Inject - public CkanDatasetsSearchService( - @RestClient CkanQueryApi ckanQueryApi - ) { - this.ckanQueryApi = ckanQueryApi; - } + Instance datasetsRepository; @Override public DatasetsSearchResponse search(DatasetSearchQuery query, String accessToken) { - var facetsQuery = CkanFacetsQueryBuilder.buildFacetQuery(query); - - var response = ckanQueryApi.packageSearch( - query.getQuery(), - facetsQuery, - query.getSort(), - query.getRows(), - query.getStart(), - SELECTED_FACETS, - accessToken - ); + var response = datasetsRepository.get().search(query, accessToken); return PackagesSearchResponseMapper.from(response); } diff --git a/src/main/java/io/github/genomicdatainfrastructure/discovery/services/RetrieveDatasetService.java b/src/main/java/io/github/genomicdatainfrastructure/discovery/services/RetrieveDatasetService.java index df04376..86df184 100644 --- a/src/main/java/io/github/genomicdatainfrastructure/discovery/services/RetrieveDatasetService.java +++ b/src/main/java/io/github/genomicdatainfrastructure/discovery/services/RetrieveDatasetService.java @@ -4,27 +4,20 @@ package io.github.genomicdatainfrastructure.discovery.services; -import org.eclipse.microprofile.rest.client.inject.RestClient; - +import io.github.genomicdatainfrastructure.discovery.repositories.DatasetsRepository; import io.github.genomicdatainfrastructure.discovery.exceptions.DatasetNotFoundException; import io.github.genomicdatainfrastructure.discovery.model.RetrievedDataset; -import io.github.genomicdatainfrastructure.discovery.remote.ckan.api.CkanQueryApi; import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.CkanPackageShowResponse; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; @ApplicationScoped public class RetrieveDatasetService { - private final CkanQueryApi ckanQueryApi; - @Inject - public RetrieveDatasetService( - @RestClient CkanQueryApi ckanQueryApi - ) { - this.ckanQueryApi = ckanQueryApi; - } + Instance datasetsRepository; public RetrievedDataset retrieve(String id, String accessToken) { var response = retrieveCkanPackage(id, accessToken); @@ -33,7 +26,7 @@ public RetrievedDataset retrieve(String id, String accessToken) { public CkanPackageShowResponse retrieveCkanPackage(String id, String accessToken) { try { - return ckanQueryApi.packageShow(id, accessToken); + return datasetsRepository.get().retrieveCkanPackage(id, accessToken); } catch (WebApplicationException e) { if (e.getResponse().getStatus() == 404) { throw new DatasetNotFoundException(id); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ec09644..cb43d85 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -5,7 +5,7 @@ quarkus.swagger-ui.always-include=true quarkus.native.additional-build-args=-march=compatibility quarkus.keycloak.devservices.realm-path=quarkus-realm.json quarkus.keycloak.devservices.port=32794 -quarkus.wiremock.devservices.port=4000 +quarkus.wiremock.devservices.port=4001 quarkus.oidc.client-id=backend-service quarkus.oidc.credentials.secret=secret quarkus.openapi-generator.codegen.spec.discovery_yaml.enable-security-generation=false @@ -27,13 +27,14 @@ quarkus.openapi-generator.codegen.spec.keycloak_yaml.enable-security-generation= quarkus.openapi-generator.codegen.spec.keycloak_yaml.base-package=io.github.genomicdatainfrastructure.discovery.remote.keycloak quarkus.openapi-generator.codegen.spec.keycloak_yaml.additional-model-type-annotations=@lombok.Data;@lombok.NoArgsConstructor;@lombok.AllArgsConstructor;@lombok.Builder;@io.quarkus.runtime.annotations.RegisterForReflection quarkus.openapi-generator.codegen.spec.keycloak_yaml.generate-part-filename=false -quarkus.rest-client.ckan_yaml.url=http://localhost:4000 -quarkus.rest-client.keycloak_yaml.url=http://localhost:4000 +quarkus.rest-client.ckan_yaml.url=http://localhost:4001 +quarkus.rest-client.keycloak_yaml.url=http://localhost:4001 quarkus.rest-client.keycloak_yaml.beacon_idp_alias=LSAAI -quarkus.rest-client.beacon_yaml.url=http://localhost:4000 +quarkus.rest-client.beacon_yaml.url=http://localhost:4001 quarkus.rest-client.beacon_yaml.read-timeout=60000 -%dev.quarkus.oidc.auth-server-url=https://keycloak-test.healthdata.nl/realms/ckan -%dev.quarkus.oidc.client-id=ckan +%dev.quarkus.oidc.auth-server-url=https://id.portal.dev.gdi.lu/realms/gdi +%dev.quarkus.oidc.client-id=gdi +%dev.quarkus.oidc.credentials.secret=vjKOWL7bU3hzESRegDpprHjPkHoyoMAO %dev.quarkus.rest-client.ckan_yaml.url=https://ckan-test.healthdata.nl/ %dev.quarkus.rest-client.keycloak_yaml.url=https://keycloak-test.healthdata.nl/realms/ckan %dev.quarkus.rest-client.beacon_yaml.url=https://beacon-network-backend-demo.ega-archive.org/beacon-network @@ -42,5 +43,9 @@ quarkus.rest-client.beacon_yaml.read-timeout=60000 %dev.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG quarkus.http.cors=true quarkus.http.cors.origins=http://localhost:3000 +quarkus.http.port=8082 quarkus.http.cors.headers=accept, authorization, content-type, x-requested-with -quarkus.http.cors.methods=POST, OPTIONS, GET \ No newline at end of file +quarkus.http.cors.methods=POST, OPTIONS, GET + +repositories.gdi=true +repositories.lndc=false