diff --git a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java index f38682ddddf98522b8a86c80272a6a62e571e7f7..5b8d8b0585a89390b72350a423a38e628df31dcc 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java @@ -22,6 +22,7 @@ package org.olat.ims.qti21.model.xml; import static org.olat.ims.qti21.QTI21Constants.MAXSCORE_IDENTIFIER; import static org.olat.ims.qti21.QTI21Constants.MINSCORE_IDENTIFIER; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,7 @@ import javax.xml.transform.stream.StreamResult; import org.olat.core.gui.render.StringOutput; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.ims.qti21.QTI21Constants; import org.olat.ims.qti21.model.QTI21QuestionType; import org.olat.ims.qti21.model.xml.ModalFeedbackBuilder.ModalFeedbackType; @@ -343,6 +345,23 @@ public abstract class AssessmentItemBuilder { return interactionNames; } + /** + * + * @param uploadedFilename The uploaded filename + * @param currentFilename The current filename + * @param directory The directory where the file will be saved + * @return A proposition of unique filename + */ + public String checkFilename(String uploadedFilename, String currentFilename, File directory) { + if(uploadedFilename == null) return null; + + if(!uploadedFilename.equals(currentFilename)) { + File file = new File(directory, uploadedFilename); + uploadedFilename = FileUtils.rename(file); + } + return uploadedFilename; + } + protected final void serializeJqtiObject(QtiNode block, StringOutput sb) { final XsltSerializationOptions xsltSerializationOptions = new XsltSerializationOptions(); xsltSerializationOptions.setIndenting(false); diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java index 2edf5f4f3c0be35fd5cbd7a82d069b5866922dd0..337753345f3d11b10c786f86d9714cd31baed413 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java @@ -217,6 +217,9 @@ public class DrawingEditorController extends FormBasicController { backgroundEl.validate(status); if(status.isEmpty()) { flc.setDirty(true); + String uniqueFilename = itemBuilder + .checkFilename(backgroundEl.getUploadFileName(), itemBuilder.getBackground(), itemFile.getParentFile()); + backgroundEl.setUploadFileName(uniqueFilename); backgroundImage = backgroundEl.moveUploadFileTo(itemFile.getParentFile()); backgroundEl.setInitialFile(backgroundImage); } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java index 7db80fd6ccc34344caa519e34107c61761292478..446c02193beaadcbc45fc33b53d7c9de38a6cdc6 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java @@ -362,6 +362,9 @@ public class HotspotEditorController extends FormBasicController { backgroundEl.validate(status); if(status.isEmpty()) { flc.setDirty(true); + String uniqueFilename = itemBuilder + .checkFilename(backgroundEl.getUploadFileName(), itemBuilder.getBackground(), itemFile.getParentFile()); + backgroundEl.setUploadFileName(uniqueFilename); backgroundImage = backgroundEl.moveUploadFileTo(itemFile.getParentFile()); Size size = imageService.getSize(new LocalFileImpl(backgroundImage), null); optimizeResizeEl(size, true);