diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java index c75e7db7572d86a8fdbf3619f3b2471d65ede1ca..a05b7ccc53e8bbd9cd993780f0e58f8604ce2d9f 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java @@ -19,25 +19,11 @@ import java.util.Objects; public class AccessToken implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "accessTokenGenerator" - ) - @SequenceGenerator( - name = "accessTokenGenerator", - sequenceName = "access_token_seq" - ) - @Column( - name = "access_token_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "accessTokenGenerator") + @SequenceGenerator(name = "accessTokenGenerator", sequenceName = "access_token_seq") + @Column(name = "access_token_id", nullable = false, unique = true) private Long id; - @Column( - name = "access_token", - nullable = false, - unique = true - ) + @Column(name = "access_token", nullable = false, unique = true) private String accessToken; /** diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java index 542af91859d598c59e01ed85425c968952f10be0..4daf5572c97a0d7ca0ba50505b69ccedc7bff5db 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java @@ -20,19 +20,9 @@ import java.util.Objects; public class TRAcquisitionLock implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "trAcquisitionLockGenerator" - ) - @SequenceGenerator( - name = "trAcquisitionLockGenerator", - sequenceName = "tr_acquisition_lock_seq" - ) - @Column( - name = "training_run_acquisition_lock_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trAcquisitionLockGenerator") + @SequenceGenerator(name = "trAcquisitionLockGenerator", sequenceName = "tr_acquisition_lock_seq") + @Column(name = "training_run_acquisition_lock_id", nullable = false, unique = true) private Long id; @Column(name = "participant_ref_id") private Long participantRefId; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java index c1c0dac6a5b88de7626c258c55f9885274d82d9c..70e0b309540506ab30036a8a179adad7532b4a51 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java @@ -35,24 +35,11 @@ import java.util.Set; public class User implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "userGenerator" - ) - @SequenceGenerator( - name = "userGenerator", - sequenceName = "user_seq" - ) - @Column( - name = "user_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userGenerator") + @SequenceGenerator(name = "userGenerator", sequenceName = "user_seq") + @Column(name = "user_id", nullable = false, unique = true) private Long id; - @Column( - name = "user_ref_id", - nullable = false - ) + @Column(name = "user_ref_id", nullable = false) private Long userRefId; @ManyToMany( mappedBy = "organizers", diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java index 1547a97b329e7f359aea54ee5f7c42f7258aade9..89307e8360074825e0bfa465af231ebc80cd0c3d 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java @@ -9,24 +9,11 @@ import java.io.Serializable; public class DecisionMatrixRow implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "decisionMatrixRowGenerator" - ) - @SequenceGenerator( - name = "decisionMatrixRowGenerator", - sequenceName = "decision_matrix_row_seq" - ) - @Column( - name = "decision_matrix_row_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "decisionMatrixRowGenerator") + @SequenceGenerator(name = "decisionMatrixRowGenerator", sequenceName = "decision_matrix_row_seq") + @Column(name = "decision_matrix_row_id", nullable = false, unique = true) private Long id; - @Column( - name = "order_in_training_phase", - nullable = false - ) + @Column(name = "order_in_training_phase", nullable = false) private int order; @Column(name = "assessment_answered") private double assessmentAnswered; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java index 44f9689e9f1c582d3c5d41416c26afdab79e82cf..1eca9d071085dbcc46eb58b575478f4c971aad46 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java @@ -9,19 +9,9 @@ import java.io.Serializable; public class Task implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "taskGenerator" - ) - @SequenceGenerator( - name = "taskGenerator", - sequenceName = "task_seq" - ) - @Column( - name = "task_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "taskGenerator") + @SequenceGenerator(name = "taskGenerator", sequenceName = "task_seq") + @Column(name = "task_id", nullable = false, unique = true) private Long id; @Column(name = "title") private String title; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java index e404907add4b8a3343ac92a2a4fdee190cbf1cf2..3a6f98439700aa577ec47f19298fb189a6028fc0 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java @@ -29,24 +29,11 @@ import java.util.*; public class TrainingDefinition implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "trainingDefinitionGenerator" - ) - @SequenceGenerator( - name = "trainingDefinitionGenerator", - sequenceName = "training_definition_seq" - ) - @Column( - name = "training_definition_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingDefinitionGenerator") + @SequenceGenerator(name = "trainingDefinitionGenerator", sequenceName = "training_definition_seq") + @Column(name = "training_definition_id", nullable = false, unique = true) private Long id; - @Column( - name = "title", - nullable = false - ) + @Column(name = "title", nullable = false) private String title; @Column(name = "description") private String description; @@ -54,11 +41,7 @@ public class TrainingDefinition implements Serializable { private String[] prerequisites; @Column(name = "outcomes") private String[] outcomes; - @Column( - name = "state", - length = 128, - nullable = false - ) + @Column(name = "state", length = 128, nullable = false) @Enumerated(EnumType.STRING) private TDState state; @ManyToMany( diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java index b126438140df3df51d5c53d62889653d08866539..8083430eb8cede2988d3aa5df4b46c2ee944deaa 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java @@ -73,42 +73,19 @@ import java.util.Set; public class TrainingInstance implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "trainingInstanceGenerator" - ) - @SequenceGenerator( - name = "trainingInstanceGenerator", - sequenceName = "training_instance_seq" - ) - @Column( - name = "training_instance_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingInstanceGenerator") + @SequenceGenerator(name = "trainingInstanceGenerator", sequenceName = "training_instance_seq") + @Column(name = "training_instance_id", nullable = false, unique = true) private Long id; - @Column( - name = "start_time", - nullable = false - ) + @Column(name = "start_time", nullable = false) private LocalDateTime startTime; - @Column( - name = "end_time", - nullable = false - ) + @Column(name = "end_time", nullable = false) private LocalDateTime endTime; - @Column( - name = "title", - nullable = false - ) + @Column(name = "title", nullable = false) private String title; @Column(name = "pool_id") private Long poolId; - @Column( - name = "access_token", - nullable = false, - unique = true - ) + @Column(name = "access_token", nullable = false, unique = true) private String accessToken; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "training_definition_id") diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java index 8acd50c447d0ee1f10c9527a5c60ff5b201a8e31..ac88a6f1092a6d31cae85005303531267fb70ee5 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java @@ -96,46 +96,20 @@ import java.util.Objects; public class TrainingRun implements Serializable { @Id - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "trainingRunGenerator" - ) - @SequenceGenerator( - name = "trainingRunGenerator", - sequenceName = "training_run_seq" - ) - @Column( - name = "training_run_id", - nullable = false, - unique = true - ) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingRunGenerator") + @SequenceGenerator(name = "trainingRunGenerator", sequenceName = "training_run_seq") + @Column(name = "training_run_id", nullable = false, unique = true) private Long id; - @Column( - name = "start_time", - nullable = false - ) + @Column(name = "start_time", nullable = false) private LocalDateTime startTime; - @Column( - name = "end_time", - nullable = false - ) + @Column(name = "end_time", nullable = false) private LocalDateTime endTime; - @Column( - name = "state", - length = 128, - nullable = false - ) + @Column(name = "state", length = 128, nullable = false) @Enumerated(EnumType.STRING) private TRState state; - @Column( - name = "incorrect_answer_count", - nullable = false - ) + @Column(name = "incorrect_answer_count", nullable = false) private int incorrectAnswerCount; - @Column( - name = "solution_taken", - nullable = false - ) + @Column(name = "solution_taken", nullable = false) private boolean solutionTaken; @ManyToOne( fetch = FetchType.LAZY, @@ -155,10 +129,7 @@ public class TrainingRun implements Serializable { @Column(name = "sandbox_instance_ref_id") private Long sandboxInstanceRefId; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn( - name = "user_id", - nullable = false - ) + @JoinColumn(name = "user_id", nullable = false) private User participantRef; @Column(name = "phase_answered") private boolean phaseAnswered; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..4121b49e40ba0ec365c2711aa97a86081236c800 --- /dev/null +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java @@ -0,0 +1,67 @@ +package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view; + +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Objects; + +public class QuestionChoiceViewDTO { + + @ApiModelProperty(value = "Question choice ID. Leave blank if new choice is added", required = true, example = "1") + private Long id; + @ApiModelProperty(value = "Short description of question choice", required = true, example = "An answer") + @NotEmpty(message = "Task title must not be blank") + private String text; + @ApiModelProperty(value = "Order of question choice", required = true, example = "0") + @NotNull(message = "Question choice order must be specified") + private Integer order; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + QuestionChoiceViewDTO that = (QuestionChoiceViewDTO) o; + return Objects.equals(id, that.id) && + Objects.equals(text, that.text) && + Objects.equals(order, that.order); + } + + @Override + public int hashCode() { + return Objects.hash(id, text, order); + } + + @Override + public String toString() { + return "QuestionChoiceDTO{" + + "id=" + id + + ", text='" + text + '\'' + + ", order=" + order + + '}'; + } +} diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..3fe32fb0cbf60d94e01c610b8803a49ab050222a --- /dev/null +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java @@ -0,0 +1,93 @@ +package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view; + +import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionChoiceDTO; +import cz.muni.ics.kypo.training.adaptive.enums.QuestionType; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Objects; + +public class QuestionViewDTO { + + @ApiModelProperty(value = "Question ID. Leave blank if a new question is added", required = true, example = "1") + private Long id; + @ApiModelProperty(value = "Order of question", required = true, example = "0") + @NotNull(message = "Question order must be specified") + private int order; + @ApiModelProperty(value = "The question that will be displayed to a player", required = true, example = "What's the capital of Canada?") + @NotEmpty(message = "Text of question must not be blank") + private String text; + @ApiModelProperty(value = "It defines the type of the question", allowableValues = "FFQ, MCQ, RFQ", required = true, example = "MCQ") + @NotNull(message = "Question type must be specified") + private QuestionType questionType; + @ApiModelProperty(value = "Choices that are distributed with the question", required = true) + private List<QuestionChoiceViewDTO> choices; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public QuestionType getQuestionType() { + return questionType; + } + + public void setQuestionType(QuestionType type) { + this.questionType = type; + } + + public List<QuestionChoiceViewDTO> getChoices() { + return choices; + } + + public void setChoices(List<QuestionChoiceViewDTO> choices) { + this.choices = choices; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof QuestionViewDTO)) return false; + QuestionViewDTO that = (QuestionViewDTO) o; + return getOrder() == that.getOrder() && + getId().equals(that.getId()) && + getText().equals(that.getText()) && + getQuestionType() == that.getQuestionType(); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getOrder(), getText()); + } + + @Override + public String toString() { + return "QuestionViewDTO{" + + "id=" + id + + ", order=" + order + + ", text='" + text + '\'' + + ", questionType=" + questionType + + '}'; + } +} diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..ce035b7833ab49907a62a023b4dd4d334c8ceab0 --- /dev/null +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java @@ -0,0 +1,54 @@ +package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view; + +import cz.muni.ics.kypo.training.adaptive.dto.AbstractPhaseDTO; +import cz.muni.ics.kypo.training.adaptive.enums.QuestionnaireType; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; +import java.util.Objects; + +public class QuestionnairePhaseViewDTO extends AbstractPhaseDTO { + + @ApiModelProperty(value = "List of questions associated with the questionnaire phase") + private List<QuestionViewDTO> questions; + @ApiModelProperty(value = "Type of questionnaire phase", allowableValues = "ADAPTIVE,GENERAL", example = "ADAPTIVE") + private QuestionnaireType questionnaireType; + + public List<QuestionViewDTO> getQuestions() { + return questions; + } + + public void setQuestions(List<QuestionViewDTO> questions) { + this.questions = questions; + } + + public QuestionnaireType getQuestionnaireType() { + return questionnaireType; + } + + public void setQuestionnaireType(QuestionnaireType questionnaireType) { + this.questionnaireType = questionnaireType; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + QuestionnairePhaseViewDTO that = (QuestionnairePhaseViewDTO) o; + return Objects.equals(questions, that.questions) && + questionnaireType == that.questionnaireType; + } + + @Override + public int hashCode() { + return Objects.hash(questions, questionnaireType); + } + + @Override + public String toString() { + return "QuestionnairePhaseDTO{" + + "questions=" + questions + + ", questionnaireType=" + questionnaireType + + "} " + super.toString(); + } +} diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..169fa6d86b0681f6931df2b0835f3b6db0792ff9 --- /dev/null +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java @@ -0,0 +1,99 @@ +package cz.muni.ics.kypo.training.adaptive.dto.training.view; + +import io.swagger.annotations.ApiModelProperty; + +import java.util.Objects; + +public class TaskViewDTO { + + @ApiModelProperty(value = "ID of task", required = true, example = "1") + private Long id; + @ApiModelProperty(value = "Short description of task", required = true, example = "Task title") + private String title; + @ApiModelProperty(value = "The information that are displayed to a player", required = true, example = "Capture the flag") + private String content; + @ApiModelProperty(value = "It defines the allowed number of incorrect answers submitted by the player", required = true, example = "5") + private int incorrectAnswerLimit; + @ApiModelProperty(value = "It defines whether the sandbox can be modified", example = "true") + private boolean modifySandbox; + @ApiModelProperty(value = "It defines the expected duration of sandbox change defined in seconds", example = "15") + private int sandboxChangeExpectedDuration; + + 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 String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getIncorrectAnswerLimit() { + return incorrectAnswerLimit; + } + + public void setIncorrectAnswerLimit(int incorrectAnswerLimit) { + this.incorrectAnswerLimit = incorrectAnswerLimit; + } + + public boolean isModifySandbox() { + return modifySandbox; + } + + public void setModifySandbox(boolean modifySandbox) { + this.modifySandbox = modifySandbox; + } + + public int getSandboxChangeExpectedDuration() { + return sandboxChangeExpectedDuration; + } + + public void setSandboxChangeExpectedDuration(int sandboxChangeExpectedDuration) { + this.sandboxChangeExpectedDuration = sandboxChangeExpectedDuration; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TaskViewDTO taskDTO = (TaskViewDTO) o; + return incorrectAnswerLimit == taskDTO.incorrectAnswerLimit && + modifySandbox == taskDTO.modifySandbox && + sandboxChangeExpectedDuration == taskDTO.sandboxChangeExpectedDuration && + Objects.equals(id, taskDTO.id) && + Objects.equals(title, taskDTO.title) && + Objects.equals(content, taskDTO.content); + } + + @Override + public int hashCode() { + return Objects.hash(id, title, content, incorrectAnswerLimit, modifySandbox, sandboxChangeExpectedDuration); + } + + @Override + public String toString() { + return "TaskDTO{" + + "id=" + id + + ", title='" + title + '\'' + + ", content='" + content + '\'' + + ", incorrectAnswerLimit=" + incorrectAnswerLimit + + ", modifySandbox=" + modifySandbox + + ", sandboxChangeExpectedDuration=" + sandboxChangeExpectedDuration + + '}'; + } +} diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..f6f00e6d42079058a47e003848249619c241b995 --- /dev/null +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java @@ -0,0 +1,75 @@ +package cz.muni.ics.kypo.training.adaptive.dto.training.view; + +import cz.muni.ics.kypo.training.adaptive.dto.AbstractPhaseDTO; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Objects; + +public class TrainingPhaseViewDTO extends AbstractPhaseDTO { + + @ApiModelProperty(value = "Estimated time (minutes) taken by the player to solve the training phase", example = "20") + private int estimatedDuration; + @ApiModelProperty(value = "Maximal number of allowed commands provided by played", required = true, example = "10") + private int allowedCommands; + @ApiModelProperty(value = "Maximal number of allowed wrong answers provided by played", required = true, example = "10") + private int allowedWrongAnswers; + @ApiModelProperty(value = "Task associated with the training phase", required = true) + private TaskViewDTO task; + + public int getEstimatedDuration() { + return estimatedDuration; + } + + public void setEstimatedDuration(int estimatedDuration) { + this.estimatedDuration = estimatedDuration; + } + + public int getAllowedCommands() { + return allowedCommands; + } + + public void setAllowedCommands(int allowedCommands) { + this.allowedCommands = allowedCommands; + } + + public int getAllowedWrongAnswers() { + return allowedWrongAnswers; + } + + public void setAllowedWrongAnswers(int allowedWrongAnswers) { + this.allowedWrongAnswers = allowedWrongAnswers; + } + + public TaskViewDTO getTask() { + return task; + } + + public void setTask(TaskViewDTO task) { + this.task = task; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TrainingPhaseViewDTO that = (TrainingPhaseViewDTO) o; + return estimatedDuration == that.estimatedDuration && + allowedCommands == that.allowedCommands && + allowedWrongAnswers == that.allowedWrongAnswers; + } + + @Override + public int hashCode() { + return Objects.hash(estimatedDuration, allowedCommands, allowedWrongAnswers, task); + } + + @Override + public String toString() { + return "TrainingPhaseDTO{" + + "estimatedDuration=" + estimatedDuration + + ", allowedCommands=" + allowedCommands + + ", allowedWrongAnswers=" + allowedWrongAnswers + + ", tasks=" + task + + "} " + super.toString(); + } +} diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java index 03eee74a5cf6a69453389f1cda08392f2094b485..64557d23765db219f377eb3b42132afb10efdc7b 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java @@ -405,30 +405,12 @@ public class TrainingRunFacade { } private AbstractPhaseDTO getCorrectAbstractPhaseDTO(AbstractPhase abstractPhase) { - AbstractPhaseDTO abstractPhaseDTO; if (abstractPhase instanceof QuestionnairePhase) { - QuestionnairePhase questionnairePhase = (QuestionnairePhase) abstractPhase; - abstractPhaseDTO = phaseMapper.mapToDTO(questionnairePhase); - abstractPhaseDTO.setPhaseType(PhaseType.QUESTIONNAIRE); - deleteInfoAboutCorrectnessFromQuestions((QuestionnairePhaseDTO) abstractPhaseDTO); + return phaseMapper.mapToQuestionnairePhaseViewDTO((QuestionnairePhase) abstractPhase); } else if (abstractPhase instanceof TrainingPhase) { - TrainingPhase trainingPhase = (TrainingPhase) abstractPhase; - abstractPhaseDTO = phaseMapper.mapToDTO(trainingPhase); - //TODO change the DTO with one task and remove the correct answer - abstractPhaseDTO.setPhaseType(PhaseType.TRAINING); + return phaseMapper.mapToTrainingPhaseViewDTO((TrainingPhase) abstractPhase); } else { - InfoPhase infoPhase = (InfoPhase) abstractPhase; - abstractPhaseDTO = phaseMapper.mapToDTO(infoPhase); - abstractPhaseDTO.setPhaseType(PhaseType.INFO); - } - return abstractPhaseDTO; - } - - private void deleteInfoAboutCorrectnessFromQuestions(QuestionnairePhaseDTO questionnairePhaseDTO) { - for (QuestionDTO questionDTO : questionnairePhaseDTO.getQuestions()) { - for (QuestionChoiceDTO questionChoiceDTO : questionDTO.getChoices()) { - questionChoiceDTO.setCorrect(null); - } + return phaseMapper.mapToDTO((InfoPhase) abstractPhase); } } } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java index a6ba067b6cf6ee076a5e6bb5275ca2588104a6ee..3d5c9fd70f08851924013c10b540031952057dc0 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java @@ -20,9 +20,11 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.training.TrainingPh import cz.muni.ics.kypo.training.adaptive.dto.info.InfoPhaseDTO; import cz.muni.ics.kypo.training.adaptive.dto.info.InfoPhaseUpdateDTO; import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionnairePhaseDTO; +import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionnairePhaseViewDTO; import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionnaireUpdateDTO; import cz.muni.ics.kypo.training.adaptive.dto.training.TrainingPhaseDTO; import cz.muni.ics.kypo.training.adaptive.dto.training.TrainingPhaseUpdateDTO; +import cz.muni.ics.kypo.training.adaptive.dto.training.view.TrainingPhaseViewDTO; import cz.muni.ics.kypo.training.adaptive.exceptions.InternalServerErrorException; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -70,6 +72,9 @@ public interface PhaseMapper extends ParentMapper { @Mapping(target = "phaseType", constant = "QUESTIONNAIRE") QuestionnairePhaseDTO mapToQuestionnairePhaseDTO(QuestionnairePhase entity); + @Mapping(target = "phaseType", constant = "QUESTIONNAIRE") + QuestionnairePhaseViewDTO mapToQuestionnairePhaseViewDTO(QuestionnairePhase entity); + @Mapping(target = "phaseRelations", source = "questionPhaseRelations") @Mapping(target = "phaseType", constant = "QUESTIONNAIRE") QuestionnairePhaseArchiveDTO mapToQuestionnairePhaseArchiveDTO(QuestionnairePhase entity); @@ -91,6 +96,9 @@ public interface PhaseMapper extends ParentMapper { @Mapping(target = "phaseType", constant = "TRAINING") TrainingPhaseDTO mapToTrainingPhaseDTO(TrainingPhase entity); + @Mapping(target = "phaseType", constant = "TRAINING") + TrainingPhaseViewDTO mapToTrainingPhaseViewDTO(TrainingPhase entity); + @Mapping(target = "phaseType", constant = "TRAINING") TrainingPhaseExportDTO mapToTrainingPhaseExportDTO(TrainingPhase entity); @@ -103,11 +111,11 @@ public interface PhaseMapper extends ParentMapper { default AbstractPhaseDTO mapToDTO(AbstractPhase entity) { AbstractPhaseDTO abstractPhaseDTO; if (entity instanceof TrainingPhase) { - abstractPhaseDTO = mapToTrainingPhaseDTO((TrainingPhase) entity); + abstractPhaseDTO = mapToTrainingPhaseViewDTO((TrainingPhase) entity); } else if (entity instanceof InfoPhase) { abstractPhaseDTO = mapToInfoPhaseDTO((InfoPhase) entity); } else if (entity instanceof QuestionnairePhase) { - abstractPhaseDTO = mapToQuestionnairePhaseDTO((QuestionnairePhase) entity); + abstractPhaseDTO = mapToQuestionnairePhaseViewDTO((QuestionnairePhase) entity); } else { throw new InternalServerErrorException("Phase with id: " + entity.getId() + " in given training definition with id: " + entity.getTrainingDefinition().getId() + " is not instance of questionnaire, training or info phase."); diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java index eb6db79a91b3166255b1e1b96d066fd8890f6871..e5a7d4f8f1b7d7c9d778173e98eabdb7bf46c511 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java @@ -10,6 +10,8 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.questionnaire.Quest import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.questionnaire.QuestionImportDTO; import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionChoiceDTO; import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionDTO; +import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionChoiceViewDTO; +import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionViewDTO; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; @@ -34,6 +36,8 @@ public interface QuestionMapper extends ParentMapper { QuestionDTO mapToQuestionDTO(Question entity); + QuestionViewDTO mapToQuestionViewDTO(Question entity); + List<Question> mapToList(Collection<QuestionDTO> dtos); List<QuestionDTO> mapToListDTO(Collection<Question> entities); @@ -53,6 +57,8 @@ public interface QuestionMapper extends ParentMapper { QuestionChoiceDTO mapToQuestionDTO(QuestionChoice entity); + QuestionChoiceViewDTO mapToQuestionViewDTO(QuestionChoice entity); + List<QuestionChoice> mapChoicesToList(Collection<QuestionChoiceDTO> dtos); List<QuestionDTO> mapToChoicesListDTO(Collection<QuestionChoice> entities); diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java index 96aa29d2e153f0faaf3355d65911bda27386cb8b..39ecd1f26bbbcf8a83aac3f9c15da98cb6386cfa 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java @@ -7,6 +7,7 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.training.TaskImport import cz.muni.ics.kypo.training.adaptive.dto.training.TaskCopyDTO; import cz.muni.ics.kypo.training.adaptive.dto.training.TaskDTO; import cz.muni.ics.kypo.training.adaptive.dto.training.TaskUpdateDTO; +import cz.muni.ics.kypo.training.adaptive.dto.training.view.TaskViewDTO; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; @@ -34,6 +35,8 @@ public interface TaskMapper extends ParentMapper { TaskDTO mapToTaskDTO(Task entity); + TaskViewDTO mapToTaskViewDTO(Task entity); + List<Task> mapToList(Collection<TaskDTO> dtos); List<TaskDTO> mapToListDTO(Collection<Task> entities); diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java index 13ffba22d9749b85cc7ac8498b945221a55c6498..fd8908fd2a289e08e90addb305fa80af730f1632 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java @@ -193,6 +193,7 @@ public class TrainingRunService { auditEventsService.auditPhaseCompletedAction(trainingRun); } if (nextPhase instanceof TrainingPhase) { + //TODO call the smart assistant trainingRun.setCurrentTask(((TrainingPhase) nextPhase).getTasks().get(0)); } else { trainingRun.setCurrentTask(null); @@ -251,6 +252,7 @@ public class TrainingRunService { AbstractPhase initialPhase = findFirstPhaseForTrainingRun(trainingInstance.getTrainingDefinition().getId()); TrainingRun trainingRun = getNewTrainingRun(initialPhase, trainingInstance, LocalDateTime.now(Clock.systemUTC()), trainingInstance.getEndTime(), participantRefId); if (initialPhase instanceof TrainingPhase) { + //TODO call smart assistant trainingRun.setCurrentTask(((TrainingPhase) initialPhase).getTasks().get(0)); } return trainingRunRepository.save(trainingRun); @@ -499,18 +501,4 @@ public class TrainingRunService { trAcquisitionLockRepository.deleteByParticipantRefIdAndTrainingInstanceId(trainingRun.getParticipantRef().getUserRefId(), trainingRun.getTrainingInstance().getId()); trainingRunRepository.save(trainingRun); } - - - public void evaluateResponsesToQuestionnaire(Long trainingRunId, String responsesAsString) { - TrainingRun trainingRun = findByIdWithPhase(trainingRunId); - if (!(trainingRun.getCurrentPhase() instanceof QuestionnairePhase)) { - throw new BadRequestException("Current phase is not questionnaire phase and cannot be evaluated."); - } - if (trainingRun.isPhaseAnswered()) - throw new EntityConflictException(new EntityErrorDetail(TrainingRun.class, "id", trainingRunId.getClass(), trainingRunId, - "Current phase of the training run has been already answered.")); - //TODO complete the evaluation - auditEventsService.auditQuestionnaireAnswersAction(trainingRun, responsesAsString); - auditEventsService.auditPhaseCompletedAction(trainingRun); - } }