Skip to content

Commit

Permalink
Merge pull request #122 from GenomicDataInfrastructure/Revert-of-reve…
Browse files Browse the repository at this point in the history
…rt-datatimeOffset

Revert "fix: revert OffsetDateTime parsing"
  • Loading branch information
brunopacheco1 authored Sep 25, 2024
2 parents 191e6af + 063224f commit e4df1f2
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
import org.eclipse.microprofile.rest.client.inject.RestClient;

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Objects;
import java.util.Set;
Expand All @@ -25,6 +29,8 @@
import static io.github.genomicdatainfrastructure.discovery.datasets.infrastructure.ckan.config.CkanConfiguration.CKAN_IDENTIFIER_FIELD;
import static java.util.Optional.ofNullable;

// TODO review original field and date format on resources
// TODO remove retrieved distributions from API
@ApplicationScoped
public class CkanDatasetsRepository implements DatasetsRepository {

Expand Down Expand Up @@ -109,8 +115,8 @@ private SearchedDataset result(CkanPackage dataset) {
.keywords(keywords(dataset.getTags()))
.catalogue(catalogue)
.organization(DatasetOrganizationMapper.from(dataset.getOrganization()))
.modifiedAt(parse(dataset.getMetadataModified()))
.createdAt(parse(dataset.getMetadataCreated()))
.modifiedAt(parse(dataset.getModified()))
.createdAt(parse(dataset.getIssued()))
.distributions(distributions(dataset.getResources()))
.build();
}
Expand Down Expand Up @@ -148,10 +154,18 @@ private ValueLabel value(CkanValueLabel value) {
.orElse(null);
}

private LocalDateTime parse(String date) {
return ofNullable(date)
.map(it -> LocalDateTime.parse(it, DATE_FORMATTER))
.orElse(null);
private OffsetDateTime parse(String date) {
if (date == null) {
return null;
}

try {
return OffsetDateTime.parse(date);
} catch (DateTimeParseException e) {
return LocalDateTime.parse(date, DATE_FORMATTER)
.truncatedTo(ChronoUnit.SECONDS)
.atOffset(ZoneOffset.UTC);
}
}

private List<RetrievedDistribution> distributions(List<CkanResource> resources) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,24 @@
import static java.util.function.Predicate.*;

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Objects;

import io.github.genomicdatainfrastructure.discovery.model.*;
import io.github.genomicdatainfrastructure.discovery.remote.ckan.model.*;
import lombok.experimental.UtilityClass;

// TODO review original field and date format on resources
// TODO Remove duplicated code
@UtilityClass
public class PackageShowMapper {

private final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
);

Expand All @@ -37,8 +43,8 @@ public RetrievedDataset from(CkanPackage ckanPackage) {
.publisherName(ckanPackage.getPublisherName())
.catalogue(catalogue)
.organization(DatasetOrganizationMapper.from(ckanPackage.getOrganization()))
.createdAt(parse(ckanPackage.getMetadataCreated()))
.modifiedAt(parse(ckanPackage.getMetadataModified()))
.createdAt(parse(ckanPackage.getIssued()))
.modifiedAt(parse(ckanPackage.getModified()))
.url(ckanPackage.getUrl())
.languages(values(ckanPackage.getLanguage()))
.contact(value(ckanPackage.getContactUri()))
Expand Down Expand Up @@ -150,10 +156,18 @@ private ValueLabel creator(CkanCreator creator) {
.build();
}

private LocalDateTime parse(String date) {
return ofNullable(date)
.map(it -> LocalDateTime.parse(it, DATE_FORMATTER))
.orElse(null);
private OffsetDateTime parse(String date) {
if (date == null) {
return null;
}

try {
return OffsetDateTime.parse(date);
} catch (DateTimeParseException e) {
return LocalDateTime.parse(date, DATE_FORMATTER)
.truncatedTo(ChronoUnit.SECONDS)
.atOffset(ZoneOffset.UTC);
}
}

private List<RetrievedDistribution> distributions(CkanPackage ckanPackage) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ quarkus.openapi-generator.codegen.spec.discovery_yaml.additional-model-type-anno
quarkus.openapi-generator.codegen.spec.discovery_yaml.base-package=io.github.genomicdatainfrastructure.discovery
quarkus.openapi-generator.codegen.spec.discovery_yaml.import-mappings.File=org.jboss.resteasy.reactive.multipart.FileUpload
quarkus.openapi-generator.codegen.spec.discovery_yaml.type-mappings.File=FileUpload
quarkus.openapi-generator.codegen.spec.discovery_yaml.type-mappings.DateTime=LocalDateTime
quarkus.openapi-generator.codegen.spec.discovery_yaml.import-mappings.LocalDateTime=java.time.LocalDateTime
quarkus.openapi-generator.codegen.spec.discovery_yaml.type-mappings.DateTime=OffsetDateTime
quarkus.openapi-generator.codegen.spec.discovery_yaml.import-mappings.LocalDateTime=java.time.OffsetDateTime
quarkus.openapi-generator.codegen.spec.discovery_yaml.return-response=true
quarkus.openapi-generator.codegen.spec.ckan_yaml.enable-security-generation=false
quarkus.openapi-generator.codegen.spec.ckan_yaml.base-package=io.github.genomicdatainfrastructure.discovery.remote.ckan
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

package io.github.genomicdatainfrastructure.discovery.services;

import static java.time.LocalDateTime.*;
import static java.time.OffsetDateTime.*;
import static org.assertj.core.api.Assertions.*;

import java.time.format.DateTimeFormatter;
import java.util.List;

import org.junit.jupiter.api.Test;
Expand All @@ -18,10 +17,6 @@

class PackageShowMapperTest {

private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
);

@Test
void accepts_empty_package() {
var ckanPackage = CkanPackage.builder().build();
Expand Down Expand Up @@ -62,10 +57,8 @@ void can_parse() {
.description("description")
.imageUrl("https://image.com")
.build())
.issued("2024-03-19T13:37:05Z")
.modified("2024-03-19T13:37:05Z")
.metadataCreated("2024-03-19T13:37:05.472970")
.metadataModified("2024-03-19T13:37:05.472970")
.issued("2024-07-01T22:00:00+00:00")
.modified("2024-07-02T22:00:00Z")
.tags(List.of(CkanTag.builder()
.displayName("key-tag")
.id("tag-id")
Expand Down Expand Up @@ -107,8 +100,8 @@ void can_parse() {
.name("pdf")
.build())
.uri("uri")
.created("2024-03-19T13:37:05.472970")
.lastModified("2024-03-19T13:37:05.472970")
.created("2025-03-19T13:37:05.472970")
.lastModified("2025-03-19T13:37:05Z")
.build()))
.contactPoint(List.of(
CkanContactPoint.builder()
Expand Down Expand Up @@ -150,8 +143,8 @@ void can_parse() {
.build()))
.publisherName("publisherName")
.catalogue("organization")
.createdAt(parse("2024-03-19T13:37:05.472970", DATE_FORMATTER))
.modifiedAt(parse("2024-03-19T13:37:05.472970", DATE_FORMATTER))
.createdAt(parse("2024-07-01T22:00:00+00:00"))
.modifiedAt(parse("2024-07-02T22:00:00+00:00"))
.url("url")
.languages(List.of(
ValueLabel.builder()
Expand Down Expand Up @@ -201,13 +194,13 @@ void can_parse() {
.id("resource_id")
.title("resource_name")
.description("resource_description")
.createdAt(parse("2025-03-19T13:37:05Z"))
.modifiedAt(parse("2025-03-19T13:37:05Z"))
.format(ValueLabel.builder()
.value("pdf")
.label("format")
.build())
.uri("uri")
.createdAt(parse("2024-03-19T13:37:05.472970", DATE_FORMATTER))
.modifiedAt(parse("2024-03-19T13:37:05.472970", DATE_FORMATTER))
.build()))
.contacts(List.of(
ContactPoint.builder()
Expand Down

0 comments on commit e4df1f2

Please sign in to comment.