From d01dee1ec78cfaca8f4ae90a658df350829ee208 Mon Sep 17 00:00:00 2001
From: Andreas Svanberg <andreass@dsv.su.se>
Date: Mon, 20 Jan 2025 13:19:03 +0100
Subject: [PATCH] Add a thesis document to the final seminar to help testing

---
 .../se/su/dsv/scipro/DataInitializer.java     | 53 +++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/core/src/main/java/se/su/dsv/scipro/DataInitializer.java b/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
index 80f06e8e64..98ebc08e63 100644
--- a/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
+++ b/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
@@ -4,12 +4,18 @@ import jakarta.inject.Inject;
 import jakarta.inject.Provider;
 import jakarta.persistence.EntityManager;
 import jakarta.transaction.Transactional;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.Month;
 import java.time.ZonedDateTime;
 import java.util.*;
+import java.util.function.Function;
 import se.su.dsv.scipro.checklist.ChecklistCategory;
+import se.su.dsv.scipro.file.FileReference;
+import se.su.dsv.scipro.file.FileService;
+import se.su.dsv.scipro.file.FileUpload;
 import se.su.dsv.scipro.finalseminar.FinalSeminar;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
 import se.su.dsv.scipro.match.ApplicationPeriod;
@@ -42,6 +48,9 @@ public class DataInitializer implements Lifecycle {
     @Inject
     private MilestoneActivityTemplateService milestoneActivityTemplateService;
 
+    @Inject
+    private FileService fileService;
+
     @Inject
     private CurrentProfile profile;
 
@@ -102,11 +111,17 @@ public class DataInitializer implements Lifecycle {
     }
 
     private void createPastFinalSeminar() {
+        FileReference document = fileService.storeFile(
+            new SimpleTextFile(sture_student, "document.txt", "Hello World")
+        );
+
         FinalSeminar finalSeminar = new FinalSeminar();
         finalSeminar.setStartDate(Date.from(ZonedDateTime.now().minusDays(1).toInstant()));
         finalSeminar.setProject(project1);
         finalSeminar.setRoom("zoom");
         finalSeminar.setPresentationLanguage(Language.ENGLISH);
+        finalSeminar.setDocument(document);
+        finalSeminar.setDocumentUploadDate(document.getFileDescription().getDateCreated());
 
         FinalSeminarOpposition opponent = new FinalSeminarOpposition();
         opponent.setProject(project2);
@@ -1924,4 +1939,42 @@ public class DataInitializer implements Lifecycle {
         em.get().persist(entity);
         return entity;
     }
+
+    private static final class SimpleTextFile implements FileUpload {
+
+        private final User uploader;
+        private final String fileName;
+        private final String content;
+
+        private SimpleTextFile(User uploader, String fileName, String content) {
+            this.uploader = uploader;
+            this.fileName = fileName;
+            this.content = content;
+        }
+
+        @Override
+        public String getFileName() {
+            return fileName;
+        }
+
+        @Override
+        public String getContentType() {
+            return "text/plain";
+        }
+
+        @Override
+        public User getUploader() {
+            return uploader;
+        }
+
+        @Override
+        public long getSize() {
+            return content.length();
+        }
+
+        @Override
+        public <T> T handleData(Function<InputStream, T> handler) {
+            return handler.apply(new ByteArrayInputStream(content.getBytes()));
+        }
+    }
 }