From 61aac96f5b5a1c7a2e886869688be3991a0c1864 Mon Sep 17 00:00:00 2001
From: Jan Tymel <410388@mail.muni.cz>
Date: Mon, 1 Feb 2021 13:44:54 +0100
Subject: [PATCH] [Cleanup] Task is no longer a subclass of AbstractPhase

---
 .../java/com/example/demo/domain/Task.java    | 50 +++++++++++++++++--
 .../java/com/example/demo/dto/TaskDto.java    | 36 +++++++++++--
 .../com/example/demo/enums/PhaseType.java     |  1 -
 .../com/example/demo/mapper/BeanMapper.java   | 17 +++----
 .../com/example/demo/service/TaskService.java |  5 +-
 5 files changed, 88 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/example/demo/domain/Task.java b/src/main/java/com/example/demo/domain/Task.java
index 95874eaa..6f132fd3 100644
--- a/src/main/java/com/example/demo/domain/Task.java
+++ b/src/main/java/com/example/demo/domain/Task.java
@@ -1,21 +1,56 @@
 package com.example.demo.domain;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 
 
 @Entity
-public class Task extends AbstractPhase {
+public class Task {
 
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String title;
     private String content;
     private String flag;
     private String solution;
     private Long incorrectFlagLimit;
 
+    @Column(name = "order_in_training_phase", nullable = false)
+    private Integer order;
+
     @ManyToOne(fetch = FetchType.LAZY)
     private TrainingPhase trainingPhase;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getOrder() {
+        return order;
+    }
+
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
     public String getContent() {
         return content;
     }
@@ -56,10 +91,17 @@ public class Task extends AbstractPhase {
         this.trainingPhase = trainingPhase;
     }
 
+
     @Override
     public String toString() {
-        return "Task{" + "content='" + content + '\'' + ", flag='" +
-                flag + '\'' + ", solution='" + solution + '\'' + ", incorrectFlagLimit=" + incorrectFlagLimit +
-                super.toString();
+        return "Task{" +
+                "id=" + id +
+                ", title='" + title + '\'' +
+                ", content='" + content + '\'' +
+                ", flag='" + flag + '\'' +
+                ", solution='" + solution + '\'' +
+                ", incorrectFlagLimit=" + incorrectFlagLimit +
+                ", order=" + order +
+                '}';
     }
 }
diff --git a/src/main/java/com/example/demo/dto/TaskDto.java b/src/main/java/com/example/demo/dto/TaskDto.java
index 7e3e0b88..4277d4f3 100644
--- a/src/main/java/com/example/demo/dto/TaskDto.java
+++ b/src/main/java/com/example/demo/dto/TaskDto.java
@@ -2,13 +2,40 @@ package com.example.demo.dto;
 
 import java.io.Serializable;
 
-public class TaskDto extends AbstractPhaseDto implements Serializable {
+public class TaskDto implements Serializable {
 
+    private Long id;
+    private String title;
+    private Integer order;
     private String content;
     private String flag;
     private String solution;
     private Long incorrectFlagLimit;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getOrder() {
+        return order;
+    }
+
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
     public String getContent() {
         return content;
     }
@@ -44,10 +71,13 @@ public class TaskDto extends AbstractPhaseDto implements Serializable {
     @Override
     public String toString() {
         return "TaskDto{" +
-                "content='" + content + '\'' +
+                "id=" + id +
+                ", title='" + title + '\'' +
+                ", order=" + order +
+                ", content='" + content + '\'' +
                 ", flag='" + flag + '\'' +
                 ", solution='" + solution + '\'' +
-                ", incorrectFlagLimit='" + incorrectFlagLimit + '\'' +
+                ", incorrectFlagLimit=" + incorrectFlagLimit +
                 "} " + super.toString();
     }
 }
diff --git a/src/main/java/com/example/demo/enums/PhaseType.java b/src/main/java/com/example/demo/enums/PhaseType.java
index a4ae3497..af52293c 100644
--- a/src/main/java/com/example/demo/enums/PhaseType.java
+++ b/src/main/java/com/example/demo/enums/PhaseType.java
@@ -2,7 +2,6 @@ package com.example.demo.enums;
 
 public enum PhaseType {
     QUESTIONNAIRE,
-    task, // TODO remove once Task is not a subclass of BaseLevel
     INFO,
     GAME,
 }
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index eaa769e6..6d480775 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -3,28 +3,28 @@ package com.example.demo.mapper;
 import com.example.demo.domain.AbstractPhase;
 import com.example.demo.domain.DecisionMatrixRow;
 import com.example.demo.domain.InfoPhase;
-import com.example.demo.domain.QuestionPhaseRelation;
-import com.example.demo.domain.QuestionnairePhase;
-import com.example.demo.domain.TrainingPhase;
 import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
+import com.example.demo.domain.QuestionPhaseRelation;
+import com.example.demo.domain.QuestionnairePhase;
 import com.example.demo.domain.Task;
+import com.example.demo.domain.TrainingPhase;
 import com.example.demo.dto.AbstractPhaseDto;
 import com.example.demo.dto.DecisionMatrixRowDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
-import com.example.demo.dto.QuestionPhaseRelationDto;
-import com.example.demo.dto.QuestionRequiredIdDto;
-import com.example.demo.dto.TrainingPhaseDto;
-import com.example.demo.dto.TrainingPhaseUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionDto;
+import com.example.demo.dto.QuestionPhaseRelationDto;
+import com.example.demo.dto.QuestionRequiredIdDto;
 import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.QuestionnairePhaseDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.dto.TaskCreateDto;
 import com.example.demo.dto.TaskDto;
 import com.example.demo.dto.TaskUpdateDto;
+import com.example.demo.dto.TrainingPhaseDto;
+import com.example.demo.dto.TrainingPhaseUpdateDto;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.factory.Mappers;
@@ -43,8 +43,6 @@ public interface BeanMapper {
             abstractPhaseDto = toDto((TrainingPhase) abstractPhase);
         } else if (abstractPhase instanceof InfoPhase) {
             abstractPhaseDto = toDto((InfoPhase) abstractPhase);
-        } else if (abstractPhase instanceof Task) {
-            abstractPhaseDto = toDto((Task) abstractPhase);
         } else if (abstractPhase instanceof QuestionnairePhase) {
             abstractPhaseDto = toDto((QuestionnairePhase) abstractPhase);
         } else {
@@ -56,7 +54,6 @@ public interface BeanMapper {
 
     List<AbstractPhaseDto> toDtoList(List<AbstractPhase> abstractPhase);
 
-    @Mapping(target = "phaseType", constant = "task")
     TaskDto toDto(Task task);
 
     Task toEntity(TaskDto taskDto);
diff --git a/src/main/java/com/example/demo/service/TaskService.java b/src/main/java/com/example/demo/service/TaskService.java
index 832c282f..a4092e65 100644
--- a/src/main/java/com/example/demo/service/TaskService.java
+++ b/src/main/java/com/example/demo/service/TaskService.java
@@ -1,13 +1,13 @@
 package com.example.demo.service;
 
-import com.example.demo.domain.TrainingPhase;
 import com.example.demo.domain.Task;
+import com.example.demo.domain.TrainingPhase;
 import com.example.demo.dto.TaskCreateDto;
 import com.example.demo.dto.TaskDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.TrainingPhaseRepository;
 import com.example.demo.repository.TaskRepository;
+import com.example.demo.repository.TrainingPhaseRepository;
 import org.apache.commons.collections4.IterableUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -115,7 +115,6 @@ public class TaskService {
         // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed)
 
         taskUpdate.setTrainingPhase(persistedTask.getTrainingPhase());
-        taskUpdate.setTrainingDefinitionId(persistedTask.getTrainingDefinitionId());
         taskUpdate.setOrder(persistedTask.getOrder());
 
         Task savedEntity = taskRepository.save(taskUpdate);
-- 
GitLab