From 32c066a1c536b99c8ce4ab79cfab5ffb24bfe532 Mon Sep 17 00:00:00 2001
From: Tom Zhao <tom.zhao@dsv.su.se>
Date: Wed, 12 Feb 2025 10:06:47 +0100
Subject: [PATCH] 67: Create student idea to test setting supervisor target

---
 .../se/su/dsv/scipro/DataInitializer.java     | 54 +++++++++++++++----
 1 file changed, 45 insertions(+), 9 deletions(-)

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 44caa3b8c7..22a1e14bfd 100644
--- a/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
+++ b/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
@@ -9,9 +9,7 @@ import java.time.LocalTime;
 import java.time.Month;
 import java.util.*;
 import se.su.dsv.scipro.checklist.ChecklistCategory;
-import se.su.dsv.scipro.match.ApplicationPeriod;
-import se.su.dsv.scipro.match.Keyword;
-import se.su.dsv.scipro.match.Target;
+import se.su.dsv.scipro.match.*;
 import se.su.dsv.scipro.milestones.dataobjects.MilestoneActivityTemplate;
 import se.su.dsv.scipro.milestones.dataobjects.MilestonePhaseTemplate;
 import se.su.dsv.scipro.milestones.service.MilestoneActivityTemplateService;
@@ -40,6 +38,9 @@ public class DataInitializer implements Lifecycle {
     @Inject
     private MilestoneActivityTemplateService milestoneActivityTemplateService;
 
+    @Inject
+    private IdeaService ideaService;
+
     @Inject
     private CurrentProfile profile;
 
@@ -68,12 +69,16 @@ public class DataInitializer implements Lifecycle {
     private User stina_student;
     private User sid_student;
     private User simon_student;
-    private ProjectType bachelorClass;
+    private User sofia_student;
     private Set<ResearchArea> researchAreas;
     private Long researchAreaId = RESEARCH_AREA_ID;
     private Set<Language> languages = Set.of(Language.SWEDISH, Language.ENGLISH);
+    private Program program;
     private ResearchArea researchArea1;
     private ResearchArea researchArea2;
+    private Keyword keyword1;
+    private Keyword keyword2;
+    private ProjectType bachelorClass;
     private ProjectType masterClass;
     private ProjectType magisterClass;
     private ApplicationPeriod applicationPeriod;
@@ -84,6 +89,7 @@ public class DataInitializer implements Lifecycle {
         if (profile.getCurrentProfile() == Profiles.DEV && noUsers()) {
             createDefaultProjectTypesIfNotDone();
             createDefaultChecklistCategoriesIfNotDone();
+            createProgram();
             createApplicationPeriodIfNotDone();
             createGradingCriterionTemplateIfNotDone();
             createResearchAreasForDemo();
@@ -92,6 +98,7 @@ public class DataInitializer implements Lifecycle {
             createUsers();
             createProjects();
             createTarget();
+            createStudentIdea();
         }
         if (profile.getCurrentProfile() == Profiles.DEV && noAdminUser()) {
             createAdmin();
@@ -105,6 +112,15 @@ public class DataInitializer implements Lifecycle {
         return userService.findByUsername(ADMIN + MAIL) == null;
     }
 
+    private void createProgram() {
+        program = new Program();
+        program.setCode("AppCompSci");
+        program.setName("Tillämpad Datavetenskap");
+        program.setExternalId(123);
+        program.setNameEn("Applied Computer Science");
+        program = save(program);
+    }
+
     private void createApplicationPeriodIfNotDone() {
         applicationPeriod = new ApplicationPeriod("HT 2014");
         applicationPeriod.setStartDate(LocalDate.now().minusDays(APPLICATION_PERIOD_START_MINUS_DAYS));
@@ -117,15 +133,15 @@ public class DataInitializer implements Lifecycle {
     }
 
     private void createKeywordsIfNotDone() {
-        Keyword keyword1 = new Keyword("IT");
+        keyword1 = new Keyword("IT");
         keyword1.addResearchArea(researchArea1);
         keyword1.addResearchArea(researchArea2);
-        save(keyword1);
+        keyword1 = save(keyword1);
 
-        Keyword keyword2 = new Keyword("Computers");
+        keyword2 = new Keyword("Computers");
         keyword2.addResearchArea(researchArea1);
         keyword2.addResearchArea(researchArea2);
-        save(keyword2);
+        keyword2 = save(keyword2);
     }
 
     private void createResearchAreasForDemo() {
@@ -184,7 +200,7 @@ public class DataInitializer implements Lifecycle {
         // Used to test assign supervisor to student idea
         // this student has a submitted idea, which has not assigned supervisor
         // don't use this student for anything else
-        createStudent("Sofia");
+        sofia_student = createStudent("Sofia");
     }
 
     private User createStudent(String firstName) {
@@ -271,6 +287,26 @@ public class DataInitializer implements Lifecycle {
         save(target);
     }
 
+    private void createStudentIdea() {
+        Idea idea = new Idea();
+        idea.setTitle("Fundamental Math Concepts of AI");
+        idea.setType(Idea.Type.STUDENT);
+
+        TholanderBox box = new TholanderBox();
+        box.setLiterature("Math AI Literature");
+        box.setBackground("Math AI Background");
+        box.setProblem("Math AI Problem");
+        box.setMethod("Math AI Method");
+        box.setInterests("Math AI Interests");
+        idea.setTholanderBox(box);
+
+        idea.setProjectType(bachelorClass);
+        idea.setApplicationPeriod(applicationPeriod);
+
+        List<Keyword> keywords = List.of(keyword1, keyword2);
+        ideaService.saveStudentIdea(idea, sofia_student, program, new HashSet<User>(), keywords, true);
+    }
+
     private GradingReportTemplate getBachelorTemplate() {
         GradingReportTemplate gradingReportTemplate = new GradingReportTemplate(
             bachelorClass,