From 6137d314430df08f92dedd939a3492951a69a422 Mon Sep 17 00:00:00 2001 From: Ernest Sadykov Date: Wed, 16 Nov 2022 15:35:27 +0000 Subject: [PATCH] added de- and serialisation for blobby resource (#1180) --- .../common/models/ContainerResource.java | 4 +- .../models/blob/DigitalDocumentWrapper.java | 9 ++++ .../BlobbyStorageContainerResourceTest.java | 47 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 portability-types-common/src/test/java/org/datatransferproject/types/common/models/blob/BlobbyStorageContainerResourceTest.java diff --git a/portability-types-common/src/main/java/org/datatransferproject/types/common/models/ContainerResource.java b/portability-types-common/src/main/java/org/datatransferproject/types/common/models/ContainerResource.java index 0bf374660..b97970d4d 100644 --- a/portability-types-common/src/main/java/org/datatransferproject/types/common/models/ContainerResource.java +++ b/portability-types-common/src/main/java/org/datatransferproject/types/common/models/ContainerResource.java @@ -18,6 +18,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import org.datatransferproject.types.common.models.blob.BlobbyStorageContainerResource; import org.datatransferproject.types.common.models.calendar.CalendarContainerResource; import org.datatransferproject.types.common.models.mail.MailContainerResource; import org.datatransferproject.types.common.models.media.MediaContainerResource; @@ -46,6 +47,7 @@ @JsonSubTypes.Type(SocialActivityContainerResource.class), @JsonSubTypes.Type(IdOnlyContainerResource.class), @JsonSubTypes.Type(DateRangeContainerResource.class), - @JsonSubTypes.Type(MusicContainerResource.class) + @JsonSubTypes.Type(MusicContainerResource.class), + @JsonSubTypes.Type(BlobbyStorageContainerResource.class) }) public abstract class ContainerResource extends DataModel {} diff --git a/portability-types-common/src/main/java/org/datatransferproject/types/common/models/blob/DigitalDocumentWrapper.java b/portability-types-common/src/main/java/org/datatransferproject/types/common/models/blob/DigitalDocumentWrapper.java index 2ca50b248..a19b89740 100644 --- a/portability-types-common/src/main/java/org/datatransferproject/types/common/models/blob/DigitalDocumentWrapper.java +++ b/portability-types-common/src/main/java/org/datatransferproject/types/common/models/blob/DigitalDocumentWrapper.java @@ -1,7 +1,9 @@ package org.datatransferproject.types.common.models.blob; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Map; import org.datatransferproject.types.common.models.DataModel; /** @@ -10,6 +12,7 @@ * this class represent DTP specific data that doesn't fit into the schema.org representation. */ public class DigitalDocumentWrapper extends DataModel { + private final DtpDigitalDocument dtpDigitalDocument; private final String originalEncodingFormat; // This isn't in the schema.org spec and is only needed to store the bytes DTP will transfer @@ -37,4 +40,10 @@ public String getCachedContentId() { public String getOriginalEncodingFormat() { return originalEncodingFormat; } + + @JsonIgnore + @Override + public Map getCounts() { + return super.getCounts(); + } } diff --git a/portability-types-common/src/test/java/org/datatransferproject/types/common/models/blob/BlobbyStorageContainerResourceTest.java b/portability-types-common/src/test/java/org/datatransferproject/types/common/models/blob/BlobbyStorageContainerResourceTest.java new file mode 100644 index 000000000..c47c7f52a --- /dev/null +++ b/portability-types-common/src/test/java/org/datatransferproject/types/common/models/blob/BlobbyStorageContainerResourceTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 2022 The Data Transfer Project Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.datatransferproject.types.common.models.blob; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableList; +import com.google.common.truth.Truth; +import org.datatransferproject.types.common.models.ContainerResource; +import org.junit.jupiter.api.Test; + +class BlobbyStorageContainerResourceTest { + + @Test + public void verifySerializeDeserialize() throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerSubtypes(BlobbyStorageContainerResource.class); + + DigitalDocumentWrapper documentWrapper = new DigitalDocumentWrapper( + new DtpDigitalDocument("doc-name", "2020-02-02", "UTF-8"), "UTF-8", "123456"); + BlobbyStorageContainerResource containerResource = new BlobbyStorageContainerResource("name", + "id", ImmutableList.of(documentWrapper), ImmutableList.of()); + String serialized = objectMapper.writeValueAsString(containerResource); + + ContainerResource deserializedModel = objectMapper.readValue(serialized, + ContainerResource.class); + + Truth.assertThat(deserializedModel).isNotNull(); + Truth.assertThat(deserializedModel).isInstanceOf(BlobbyStorageContainerResource.class); + BlobbyStorageContainerResource deserialized = (BlobbyStorageContainerResource) deserializedModel; + Truth.assertThat(deserialized.getFiles()).hasSize(1); + Truth.assertThat(deserialized.getFolders()).isEmpty(); + } +} \ No newline at end of file