diff --git a/VERSION.txt b/VERSION.txt index bc86c89f19debbed343aec18d251632e16d33114..0c38bdafc168b00fbf81f283f49efd42972381af 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,4 +1,5 @@ -2.2.9 Fix user ref creation failing on parallel requests. +2.2.10 Fix user ref creation failing on parallel requests. +2.2.9 Add check to prevent reviving an expired training instance. 2.2.8 Add check for training definition being in use when trying to add, remove and update tasks. 2.2.7 Add more descriptive message when training phase contains no tasks. Add answer required field to Adaptive Question. 2.2.6 Implement the ANSWER tag replacing in task solution. diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java index 67d73f06212b1fe0552f98c2fb8fb4c48f0f0823..68c04fba404553223a9556466910010442fb7601 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java @@ -135,6 +135,7 @@ public class TrainingInstanceService { public String update(TrainingInstance trainingInstanceToUpdate) { validateStartAndEndTime(trainingInstanceToUpdate); TrainingInstance trainingInstance = findById(trainingInstanceToUpdate.getId()); + checkNotRevivingAnExpiredInstance(trainingInstanceToUpdate, trainingInstance); //add original organizers to update trainingInstanceToUpdate.setOrganizers(new HashSet<>(trainingInstance.getOrganizers())); addLoggedInUserAsOrganizerToTrainingInstance(trainingInstanceToUpdate); @@ -176,6 +177,14 @@ public class TrainingInstanceService { } } + private void checkNotRevivingAnExpiredInstance(TrainingInstance trainingInstanceToUpdate, TrainingInstance currentTrainingInstance) { + if (currentTrainingInstance.finished() && !trainingInstanceToUpdate.finished()) { + throw new EntityConflictException(new EntityErrorDetail(TrainingInstance.class, "id", + trainingInstanceToUpdate.getId().getClass(), trainingInstanceToUpdate.getId(), + "End time of an expired instance cannot be set to the future.")); + } + } + private void checkChangedFieldsOfTrainingInstance(TrainingInstance trainingInstanceToUpdate, TrainingInstance currentTrainingInstance) { if (!currentTrainingInstance.getStartTime().equals(trainingInstanceToUpdate.getStartTime())) { throw new EntityConflictException(new EntityErrorDetail(TrainingInstance.class, "id", Long.class, trainingInstanceToUpdate.getId(),