From ff2a13d163400d63ee581796a80e46058a02814b Mon Sep 17 00:00:00 2001
From: Nicolas Rod <Nicolas.Rod@unige.ch>
Date: Mon, 11 Sep 2023 14:58:26 +0200
Subject: [PATCH] feat(RepresentationInfo): [DLCM-2611] add field to store the
 eventual DUA file mimeType

---
 .../ch/dlcm/model/oais/RepresentationInfo.java   | 16 ++++++++++++----
 ...bmissionInfoPackageRemoteResourceService.java |  7 +++++++
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/DLCM-Model/src/main/java/ch/dlcm/model/oais/RepresentationInfo.java b/DLCM-Model/src/main/java/ch/dlcm/model/oais/RepresentationInfo.java
index 622234df02..c431622cbe 100644
--- a/DLCM-Model/src/main/java/ch/dlcm/model/oais/RepresentationInfo.java
+++ b/DLCM-Model/src/main/java/ch/dlcm/model/oais/RepresentationInfo.java
@@ -29,14 +29,12 @@ import static ch.unige.solidify.SolidifyConstants.DB_ID_LENGTH;
 import static ch.unige.solidify.SolidifyConstants.DB_LONG_STRING_LENGTH;
 import static ch.unige.solidify.SolidifyConstants.RES_ID_FIELD;
 
-import java.time.LocalDate;
 import java.time.OffsetDateTime;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-
 import javax.persistence.Column;
 import javax.persistence.Embeddable;
 import javax.persistence.Embedded;
@@ -46,7 +44,6 @@ import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema.AccessMode;
 
@@ -80,6 +77,9 @@ public class RepresentationInfo implements EmbeddableEntity {
   @Enumerated(EnumType.STRING)
   private DataUsePolicy dataUsePolicy;
 
+  @Schema(description = "The data use policy file mimetype if it exists.")
+  private String duaFileMimeType;
+
   @Schema(description = "The compliance level of the package.")
   private ComplianceLevel complianceLevel;
 
@@ -143,6 +143,7 @@ public class RepresentationInfo implements EmbeddableEntity {
     this.statusMessage = info.statusMessage;
     this.containsUpdatedMetadata = info.containsUpdatedMetadata;
     this.dataUsePolicy = info.dataUsePolicy;
+    this.duaFileMimeType = info.duaFileMimeType;
     this.contentStructurePublic = info.contentStructurePublic;
   }
 
@@ -235,6 +236,10 @@ public class RepresentationInfo implements EmbeddableEntity {
     return this.dataUsePolicy;
   }
 
+  public String getDuaFileMimeType() {
+    return this.duaFileMimeType;
+  }
+
   public Boolean getContentStructurePublic() {
     return Objects.requireNonNullElse(this.contentStructurePublic, false);
   }
@@ -306,11 +311,14 @@ public class RepresentationInfo implements EmbeddableEntity {
     this.dataUsePolicy = dataUsePolicy;
   }
 
+  public void setDuaFileMimeType(String duaFileMimeType) {
+    this.duaFileMimeType = duaFileMimeType;
+  }
+
   public void setContentStructurePublic(Boolean structureContentPublic) {
     this.contentStructurePublic = structureContentPublic;
   }
 
-
   /*******************************/
 
   public void setName(String name) {
diff --git a/DLCM-ResourceServerCommon/src/main/java/ch/dlcm/service/rest/abstractservice/SubmissionInfoPackageRemoteResourceService.java b/DLCM-ResourceServerCommon/src/main/java/ch/dlcm/service/rest/abstractservice/SubmissionInfoPackageRemoteResourceService.java
index 6a6e5227a9..9b82f31dc7 100644
--- a/DLCM-ResourceServerCommon/src/main/java/ch/dlcm/service/rest/abstractservice/SubmissionInfoPackageRemoteResourceService.java
+++ b/DLCM-ResourceServerCommon/src/main/java/ch/dlcm/service/rest/abstractservice/SubmissionInfoPackageRemoteResourceService.java
@@ -27,6 +27,7 @@ import java.net.URI;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,6 +55,7 @@ import ch.dlcm.model.oais.RepresentationInfo;
 import ch.dlcm.model.oais.SipDataFile;
 import ch.dlcm.model.oais.SubmissionInfoPackage;
 import ch.dlcm.model.preingest.Deposit;
+import ch.dlcm.model.preingest.DepositDataFile;
 import ch.dlcm.rest.DLCMActionName;
 import ch.dlcm.rest.ResourceName;
 
@@ -257,6 +259,11 @@ public abstract class SubmissionInfoPackageRemoteResourceService extends RemoteR
     info.setComplianceLevel(deposit.getComplianceLevel());
     info.setContainsUpdatedMetadata(deposit.getContainsUpdatedMetadata());
     info.setDataUsePolicy(deposit.getDataUsePolicy());
+    Optional<DepositDataFile> duaFileOpt = deposit.getDataFiles().stream().filter(f -> f.getDataType() == DataCategory.ArchiveDataUseAgreement)
+            .findFirst();
+    if (duaFileOpt.isPresent()) {
+      info.setDuaFileMimeType(duaFileOpt.get().getContentType());
+    }
     info.setContentStructurePublic(deposit.getContentStructurePublic());
     return info;
   }
-- 
GitLab