From 53fe9aad5c88f7c2818a992a71f80bcf6ebeee48 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Wed, 14 Oct 2020 08:53:42 +0200 Subject: [PATCH] OO-4952: handle return value of file delete() --- .../org/olat/admin/layout/LayoutModule.java | 7 +-- .../memberlist/ui/MembersMailController.java | 4 +- .../iframe/IframePortletRunController.java | 14 +++--- .../components/form/flexible/impl/Form.java | 5 +- .../impl/elements/FileElementImpl.java | 13 +++-- ...CleanupAfterDeliveryFileMediaResource.java | 7 ++- .../gui/media/NamedFileMediaResource.java | 17 ++----- .../java/org/olat/core/util/FileUtils.java | 2 +- .../java/org/olat/core/util/WebappHelper.java | 17 +++++-- .../org/olat/core/util/i18n/I18nManager.java | 17 ++++--- .../i18n/devtools/TranslationDevManager.java | 29 +++++++---- .../I18nConfigSubDeletePackageController.java | 49 +++++++++---------- .../util/mail/manager/MailManagerImpl.java | 8 +-- .../manager/CourseAssessmentManagerImpl.java | 4 +- .../manager/CertificatePhantomWorker.java | 13 ++--- .../course/nodes/ProjectBrokerCourseNode.java | 44 +++++++++-------- .../nodes/gta/ui/EditSolutionController.java | 2 +- .../nodes/gta/ui/EditTaskController.java | 2 +- .../gta/ui/SubmitDocumentsController.java | 9 ++-- .../gui/demo/guidemo/GuiDemoFlexiForm.java | 9 ++-- .../java/org/olat/ims/cp/CPManagerImpl.java | 4 +- .../ims/qti/editor/QTIEditorPackageImpl.java | 14 +++--- .../ims/qti21/manager/QTI21ServiceImpl.java | 12 ++--- .../handlers/CopyAndConvertVisitor.java | 14 ++---- .../java/org/olat/modules/co/ContactForm.java | 2 +- .../modules/fo/ui/MessageEditController.java | 5 +- .../library/manager/LibraryManagerImpl.java | 11 +++-- .../manager/PortfolioServiceImpl.java | 8 +-- .../ui/AssignmentEditController.java | 2 +- .../quality/manager/QualityMailing.java | 2 +- .../olat/modules/scorm/ScormMainManager.java | 5 +- .../scorm/archiver/ScormExportManager.java | 2 +- .../server/servermodels/ScoDocument.java | 4 +- .../video/ui/VideoPosterUploadForm.java | 7 ++- .../ui/author/SendMailController.java | 14 +++--- .../olat/restapi/support/MultipartReader.java | 7 ++- .../olat/restapi/system/StatusWebservice.java | 7 +-- .../service/document/file/PdfDocument.java | 6 ++- .../org/olat/user/DisplayPortraitManager.java | 6 +-- .../manager/HomePageConfigManagerImpl.java | 3 +- 40 files changed, 208 insertions(+), 199 deletions(-) diff --git a/src/main/java/org/olat/admin/layout/LayoutModule.java b/src/main/java/org/olat/admin/layout/LayoutModule.java index 9e1b4e6c04a..0d1836f0c9a 100644 --- a/src/main/java/org/olat/admin/layout/LayoutModule.java +++ b/src/main/java/org/olat/admin/layout/LayoutModule.java @@ -25,6 +25,7 @@ import java.nio.file.Paths; import org.olat.core.configuration.AbstractSpringModule; import org.olat.core.dispatcher.mapper.GlobalMapperRegistry; import org.olat.core.id.OLATResourceable; +import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; import org.olat.core.util.coordinate.CoordinatorManager; @@ -159,16 +160,16 @@ public class LayoutModule extends AbstractSpringModule { public void removeLogo() { File logo = getLogo(); if(logo != null && logo.exists()) { - logo.delete(); + FileUtils.deleteFile(logo); } File dir = getLogoDirectory(); File logo1x = new File(dir, "oo-logo@1x.png"); if(logo1x.exists()) { - logo1x.delete(); + FileUtils.deleteFile(logo1x); } File logo2x = new File(dir, "oo-logo@2x.png"); if(logo2x.exists()) { - logo2x.delete(); + FileUtils.deleteFile(logo2x); } setLogoFilename(""); } diff --git a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java index 5ded8166554..c5d5b30b658 100644 --- a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java +++ b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java @@ -450,9 +450,9 @@ public class MembersMailController extends FormBasicController { private void doDeleteAttachment(Attachment attachment) { attachmentSize -= attachment.getFile().length(); - attachment.getFile().delete(); + FileUtils.deleteFile(attachment.getFile()); attachments.remove(attachment); - uploadCont.setVisible(attachments.size() > 0); + uploadCont.setVisible(!attachments.isEmpty()); uploadCont.setDirty(true); } diff --git a/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java b/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java index 4bf3c4fa194..fe2487ecf9a 100644 --- a/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java +++ b/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java @@ -127,15 +127,15 @@ public class IframePortletRunController extends BasicController { File editFile = new File(editFilePath); File parent = editFile.getParentFile(); if(parent == null){ - log.warn("initEditButton: no parent folder for "+editFilePath); + log.warn("initEditButton: no parent folder for {}", editFilePath); return false; } if (!editFile.getParentFile().exists()) { - log.warn("editFilePath is wrong, not even parent dir exists::" + editFile.getParentFile().getAbsolutePath()); + log.warn("editFilePath is wrong, not even parent dir exists: {}", editFile.getParentFile().getAbsolutePath()); return false; } if ( ! editFile.canWrite()) { - log.warn("Can not write to file::" + editFile.getAbsolutePath()); + log.warn("Can not write to file: {}", editFile); return false; } @@ -145,11 +145,13 @@ public class IframePortletRunController extends BasicController { */ - if (! editFile.exists()) { + if (!editFile.exists()) { try { - editFile.createNewFile(); + if(!editFile.createNewFile()) { + log.warn("Cannot create file: {}", editFile); + } } catch (IOException e) { - log.error("Cannot create file::" + editFile.getAbsolutePath()); + log.error("Cannot create file: {}", editFile); return false; } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java index 18a719c4f6a..052f9bcfdd2 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java @@ -63,6 +63,7 @@ import org.olat.core.logging.AssertException; import org.olat.core.logging.Tracing; import org.olat.core.util.ArrayHelper; import org.olat.core.util.CodeHelper; +import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.ValidationStatus; @@ -422,7 +423,9 @@ public class Form { private void doClearRequestParameterAndMultipartData() { for (Entry<String, File> entry : requestMultipartFiles.entrySet()) { File tmpFile = entry.getValue(); - if (tmpFile.exists()) tmpFile.delete(); + if (tmpFile.exists()) { + FileUtils.deleteFile(tmpFile); + } } requestMultipartFiles.clear(); requestMultipartFileNames.clear(); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java index c5c7e15113e..756786fb63c 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java @@ -148,7 +148,7 @@ public class FileElementImpl extends FormItemImpl if (keys.size() > 0 && keys.contains(component.getFormDispatchId())) { // Remove old files first if (tempUploadFile != null && tempUploadFile.exists()) { - tempUploadFile.delete(); + FileUtils.deleteFile(tempUploadFile); } // Move file from a temporary request scope location to a location // with a @@ -238,7 +238,7 @@ public class FileElementImpl extends FormItemImpl @Override public void reset() { if (tempUploadFile != null && tempUploadFile.exists()) { - tempUploadFile.delete(); + FileUtils.deleteFile(tempUploadFile); } tempUploadFile = null; if (previewEl != null) { @@ -247,7 +247,7 @@ public class FileElementImpl extends FormItemImpl previewEl.setMedia(media); previewEl.setMaxWithAndHeightToFitWithin(300, 200); previewEl.setVisible(true); - } else if (previewEl != null) { + } else { previewEl.setVisible(false); } } @@ -573,13 +573,12 @@ public class FileElementImpl extends FormItemImpl try { success = VFSManager.copyContent(tempUploadFile, leaf); } catch (Exception e) { - log.error("Error while copying content from temp file::" - + (tempUploadFile == null ? "NULL" : tempUploadFile.getAbsolutePath()), e); + log.error("Error while copying content from temp file: {}", tempUploadFile, e); } if (success) { // Delete original temp file after copy to simulate move // behavior - tempUploadFile.delete(); + FileUtils.deleteFile(tempUploadFile); targetLeaf = leaf; } } @@ -605,7 +604,7 @@ public class FileElementImpl extends FormItemImpl @Override public void dispose() { if (tempUploadFile != null && tempUploadFile.exists()) { - tempUploadFile.delete(); + FileUtils.deleteFile(tempUploadFile); } } diff --git a/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java b/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java index ba9ed00f483..dea0c9e5c47 100644 --- a/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java +++ b/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java @@ -28,6 +28,8 @@ package org.olat.core.gui.media; import java.io.File; +import org.olat.core.util.FileUtils; + /** * This media resource deletes the file as soon as it is delivered to the * client. The file is delivered as attachment. @@ -51,11 +53,8 @@ public class CleanupAfterDeliveryFileMediaResource extends FileMediaResource { return false; } - /** - * @see org.olat.core.gui.media.MediaResource#release() - */ @Override public void release() { - file.delete(); + FileUtils.deleteFile(file); } } \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java b/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java index 1d3f80b9935..8b0ad40ceaf 100644 --- a/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java +++ b/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java @@ -28,6 +28,7 @@ import java.io.File; import javax.servlet.http.HttpServletResponse; +import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; @@ -69,18 +70,14 @@ public class NamedFileMediaResource extends FileMediaResource { this.deleteAfterDelivery = deleteAfterDelivery; } - /** - * @see org.olat.core.gui.media.MediaResource#getContentType() - */ + @Override public String getContentType() { String mimeType = WebappHelper.getMimeType(fileName); if (mimeType == null) mimeType = "application/octet-stream"; return mimeType; } - /** - * @see org.olat.core.gui.media.MediaResource#prepare(javax.servlet.http.HttpServletResponse) - */ + @Override public void prepare(HttpServletResponse hres) { // encode filename in ISO8859-1; does not really help but prevents from filename not being displayed at all // if it contains non-US-ASCII characters which are not allowed in header fields. @@ -88,14 +85,10 @@ public class NamedFileMediaResource extends FileMediaResource { hres.setHeader("Content-Description", StringHelper.urlEncodeUTF8(fileDescription)); } - - /** - * @see org.olat.core.gui.media.MediaResource#release() - */ + @Override public void release() { if (deleteAfterDelivery && file.exists()) { - file.delete(); + FileUtils.deleteFile(file); } } - } diff --git a/src/main/java/org/olat/core/util/FileUtils.java b/src/main/java/org/olat/core/util/FileUtils.java index 9ac62ae7b73..3923a777b3b 100644 --- a/src/main/java/org/olat/core/util/FileUtils.java +++ b/src/main/java/org/olat/core/util/FileUtils.java @@ -558,7 +558,7 @@ public class FileUtils { } deleted = Files.deleteIfExists(file.toPath()); } catch (IOException e) { - log.error("", e); + log.error("Cannot delete file: {}", file, e); deleted = false; } return deleted; diff --git a/src/main/java/org/olat/core/util/WebappHelper.java b/src/main/java/org/olat/core/util/WebappHelper.java index 665ae10cf03..14dbbc7713f 100644 --- a/src/main/java/org/olat/core/util/WebappHelper.java +++ b/src/main/java/org/olat/core/util/WebappHelper.java @@ -31,6 +31,7 @@ package org.olat.core.util; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -452,10 +453,16 @@ public class WebappHelper implements Initializable, Destroyable, ServletContextA File writeFile = new File(tmpDir, "UTF-8 test läsÖiç-首页f新"); if (writeFile.exists()) { // remove exising files first - writeFile.delete(); + try { + Files.deleteIfExists(writeFile.toPath()); + } catch (IOException e) { + log.warn("Cannot delete test file for UTF-8 file system.", e); + } } try { - writeFile.createNewFile(); + if(!writeFile.createNewFile()) { + log.warn("No UTF-8 capable filesystem found! Error while writing testfile to filesystem"); + } } catch (IOException e) { log.warn("No UTF-8 capable filesystem found! Error while writing testfile to filesystem", e); } @@ -483,7 +490,11 @@ public class WebappHelper implements Initializable, Destroyable, ServletContextA + System.getProperty("file.encoding") + " (the one configured)"); } // try to delete file anyway - writeFile.delete(); + try { + Files.deleteIfExists(writeFile.toPath()); + } catch (IOException e) { + log.warn("Cannot delete test file for UTF-8 file system.", e); + } if (!foundUtf8File && WebappHelper.enforceUtf8Filesystem) { throw new BeanInitializationException( diff --git a/src/main/java/org/olat/core/util/i18n/I18nManager.java b/src/main/java/org/olat/core/util/i18n/I18nManager.java index 4b24d4dc7a0..f339fe47188 100644 --- a/src/main/java/org/olat/core/util/i18n/I18nManager.java +++ b/src/main/java/org/olat/core/util/i18n/I18nManager.java @@ -34,6 +34,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import java.text.DecimalFormat; import java.text.MessageFormat; import java.text.NumberFormat; @@ -1056,7 +1057,11 @@ public class I18nManager { return;// nothing to do } File f = getPropertiesFile(locale, bundleName, baseDir); - if (f.exists()) f.delete(); + try { + Files.deleteIfExists(f.toPath()); + } catch (IOException e) { + log.error("Cannot delete: {}", f); + } // 3) Check if for this bundle any other language file exists, if // not remove // the bundle from the list of translatable bundles @@ -1705,9 +1710,7 @@ public class I18nManager { if (!i18nModule.isTransToolEnabled()) { throw new AssertException("Programming error - can only copy i18n files from a language pack to the source when in translation mode"); } - JarFile jar = null; - try { - jar = new JarFile(jarFile); + try(JarFile jar = new JarFile(jarFile)) { Enumeration<JarEntry> jarEntries = jar.entries(); while (jarEntries.hasMoreElements()) { JarEntry jarEntry = jarEntries.nextElement(); @@ -1729,11 +1732,11 @@ public class I18nManager { Properties props = new Properties(); props.load(new FileInputStream(targetFile)); if (props.size() == 0) { - targetFile.delete(); + Files.deleteIfExists(targetFile.toPath()); // Delete empty parent dirs recursively File parent = targetFile.getParentFile(); while (parent != null && parent.list() != null && parent.list().length == 0) { - parent.delete(); + Files.deleteIfExists(parent.toPath()); parent = parent.getParentFile(); } } @@ -1744,8 +1747,6 @@ public class I18nManager { } } catch (IOException e) { throw new OLATRuntimeException("Error when copying up i18n files from a jar::" + jarFile.getAbsolutePath(), e); - } finally { - IOUtils.closeQuietly(jar); } } diff --git a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java index 79ed3f87510..b47dc576e5a 100644 --- a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java +++ b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java @@ -25,6 +25,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -687,7 +688,7 @@ public class TranslationDevManager { } } - log.info("found " + doupList.size() + " douplicated keys"); + log.info("found {} duplicated keys", doupList.size()); return doupList; } @@ -714,18 +715,22 @@ public class TranslationDevManager { } } - log.info("found " + doupList.size() + " douplicated values in keys"); + log.info("found {} douplicated values in keys", doupList.size()); return doupList; } public void deletePackage(String bundleName) { - File path = getBundlePath(bundleName); - if (path.exists()) { - File[] files = path.listFiles(); - for (int i = 0; i < files.length; i++) { - files[i].delete(); + try { + File path = getBundlePath(bundleName); + if (path != null && path.exists()) { + File[] files = path.listFiles(); + for (int i = 0; i < files.length; i++) { + Files.deleteIfExists(files[i].toPath()); + } + Files.delete(path.toPath()); } - path.delete(); + } catch (IOException e) { + log.error("Cannot delete bundle: {}", bundleName); } } @@ -752,8 +757,12 @@ public class TranslationDevManager { private void copyFile(File source, File dest) throws IOException { if (!dest.exists()) { - if (!dest.getParentFile().exists()) dest.getParentFile().mkdirs(); - dest.createNewFile(); + if (!dest.getParentFile().exists()) { + dest.getParentFile().mkdirs(); + } + if(!dest.createNewFile()) { + log.error("File cannot be created at: {}", dest); + } } try(InputStream in = new FileInputStream(source); diff --git a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java index 30308eea9c3..bc4654b7a4b 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java +++ b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java @@ -25,6 +25,8 @@ package org.olat.core.util.i18n.ui; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.Collection; import org.olat.core.gui.UserRequest; @@ -97,13 +99,10 @@ class I18nConfigSubDeletePackageController extends FormBasicController { submitButton.setEnabled(false); // enable as soon as something is checked } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest) - */ @Override protected void formOK(UserRequest ureq) { Collection<String> toDelete = deleteLangPackSelection.getSelectedKeys(); - if (toDelete.size() == 0) { + if (toDelete.isEmpty()) { // should not happen since button disabled return; } @@ -111,26 +110,12 @@ class I18nConfigSubDeletePackageController extends FormBasicController { "configuration.management.package.delete.confirm", toDelete.toString()), dialogCtr); } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ + @Override public void event(UserRequest ureq, Controller source, Event event) { if (source == dialogCtr) { if (DialogBoxUIFactory.isYesEvent(event)) { - // Yes case, delete now - for (String deleteLangPack : deleteLangPackSelection.getSelectedKeys()) { - File file = new File(i18nModule.getLangPacksDirectory(), deleteLangPack); - if (file.exists()) file.delete(); - logAudit("Deleted language pack::" + deleteLangPack); - } - // Reset i18n system - i18nModule.reInitializeAndFlushCache(); - // wow, everything worked fine - showInfo("configuration.management.package.delete.success", deleteLangPackSelection.getSelectedKeys().toString()); + doDelete(); fireEvent(ureq, Event.DONE_EVENT); - } else { - // No case, do nothing. } } } @@ -143,20 +128,32 @@ class I18nConfigSubDeletePackageController extends FormBasicController { showInfo("configuration.management.package.delete.cancel"); } else if (source == deleteLangPackSelection) { - if (deleteLangPackSelection.getSelectedKeys().size() == 0) { + if (deleteLangPackSelection.getSelectedKeys().isEmpty()) { submitButton.setEnabled(false); } else { submitButton.setEnabled(true); } } } + + private void doDelete() { + try { + for (String deleteLangPack : deleteLangPackSelection.getSelectedKeys()) { + File file = new File(i18nModule.getLangPacksDirectory(), deleteLangPack); + Files.deleteIfExists(file.toPath()); + logAudit("Deleted language pack::" + deleteLangPack); + } + // Reset i18n system + i18nModule.reInitializeAndFlushCache(); + // wow, everything worked fine + showInfo("configuration.management.package.delete.success", deleteLangPackSelection.getSelectedKeys().toString()); + } catch (IOException e) { + logError("", e); + } + } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose() - */ @Override protected void doDispose() { - // nothing to dispose + // nothing to dispose } - } diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java index 47ef44323af..095f35dba89 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java @@ -615,13 +615,7 @@ public class MailManagerImpl implements MailManager, InitializingBean { public void deleteCustomMailTemplate() { File baseFolder = new File(WebappHelper.getUserDataRoot(), MAIL_TEMPLATE_FOLDER); File customTemplate = new File(baseFolder, "mail_template.html"); - if (customTemplate.exists()) { - try { - customTemplate.delete(); - } catch (Exception e) { - log.error("", e); - } - } + org.olat.core.util.FileUtils.deleteFile(customTemplate); } @Override diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java index 3ee376efc64..e35ad6c7477 100644 --- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java @@ -174,7 +174,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { //node log UserNodeAuditManager am = course.getCourseEnvironment().getAuditManager(); - am.appendToUserNodeLog(courseNode, identity, assessedIdentity, "ATTEMPTS set to: " + String.valueOf(attempts), by); + am.appendToUserNodeLog(courseNode, identity, assessedIdentity, "ATTEMPTS set to: " + attempts, by); // notify about changes AssessmentChangedEvent ace = new AssessmentChangedEvent(AssessmentChangedEvent.TYPE_ATTEMPTS_CHANGED, assessedIdentity); @@ -253,7 +253,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { @Override public void removeIndividualAssessmentDocument(CourseNode courseNode, Identity identity, Identity assessedIdentity, File document) { if(document != null && document.exists()) { - document.delete(); + FileUtils.deleteFile(document); //update counter ICourse course = CourseFactory.loadCourse(cgm.getCourseEntry()); diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java index fb697d1d50a..d96b6bc3275 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java @@ -27,7 +27,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.Writer; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.Date; @@ -43,6 +43,7 @@ import org.olat.core.id.Identity; import org.olat.core.id.User; import org.olat.core.id.UserConstants; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.core.util.i18n.I18nManager; @@ -144,7 +145,7 @@ public class CertificatePhantomWorker { VelocityContext context = getContext(); boolean result = false; File htmlCertificate = new File(templateFile.getParent(), "c" + UUID.randomUUID() + ".html"); - try(Reader in = Files.newBufferedReader(templateFile.toPath(), Charset.forName("UTF-8")); + try(Reader in = Files.newBufferedReader(templateFile.toPath(), StandardCharsets.UTF_8); Writer output = new FileWriter(htmlCertificate)) { result = certificatesManager.getVelocityEngine().evaluate(context, output, "mailTemplate", in); output.flush(); @@ -371,7 +372,7 @@ public class CertificatePhantomWorker { destroyProcess(); } finally { if(htmlCertificateFile != null) { - htmlCertificateFile.delete(); + FileUtils.deleteFile(htmlCertificateFile); } } } @@ -406,14 +407,14 @@ public class CertificatePhantomWorker { } if(log.isDebugEnabled()) { - log.debug("Error: " + errors.toString()); - log.debug("Output: " + output.toString()); + log.debug("Error: {}", errors.toString()); + log.debug("Output: {}", output.toString()); } try { exitValue = proc.waitFor(); if (exitValue != 0) { - log.warn("Problem with PhantomJS? " + exitValue); + log.warn("Problem with PhantomJS? {}", exitValue); } } catch (InterruptedException e) { log.warn("Takes too long"); diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java index eecf5e079be..5d965201af0 100644 --- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java @@ -118,48 +118,48 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode { private static final long serialVersionUID = -8177448874150049173L; private static final Logger log = Tracing.createLoggerFor(ProjectBrokerCourseNode.class); - private transient static final String PACKAGE_PROJECTBROKER = Util.getPackageName(ProjectListController.class); - private transient static final String PACKAGE = Util.getPackageName(ProjectBrokerCourseNode.class); + private static final transient String PACKAGE_PROJECTBROKER = Util.getPackageName(ProjectListController.class); + private static final transient String PACKAGE = Util.getPackageName(ProjectBrokerCourseNode.class); - public transient static final String TYPE = "projectbroker"; + public static final transient String TYPE = "projectbroker"; // NLS support: - private transient static final String NLS_GUESTNOACCESS_TITLE = "guestnoaccess.title"; - private transient static final String NLS_GUESTNOACCESS_MESSAGE = "guestnoaccess.message"; - private transient static final String NLS_ERROR_MISSINGSCORECONFIG_SHORT = "error.missingscoreconfig.short"; - private transient static final String NLS_WARN_NODEDELETE = "warn.nodedelete"; + private static final transient String NLS_GUESTNOACCESS_TITLE = "guestnoaccess.title"; + private static final transient String NLS_GUESTNOACCESS_MESSAGE = "guestnoaccess.message"; + private static final transient String NLS_ERROR_MISSINGSCORECONFIG_SHORT = "error.missingscoreconfig.short"; + private static final transient String NLS_WARN_NODEDELETE = "warn.nodedelete"; // MUST BE NON TRANSIENT private static final int CURRENT_CONFIG_VERSION = 3; /** CONF_DROPBOX_ENABLED configuration parameter key. */ - public transient static final String CONF_DROPBOX_ENABLED = "dropbox_enabled"; + public static final transient String CONF_DROPBOX_ENABLED = "dropbox_enabled"; /** CONF_DROPBOX_ENABLEMAIL configuration parameter key. */ - public transient static final String CONF_DROPBOX_ENABLEMAIL = "dropbox_enablemail"; + public static final transient String CONF_DROPBOX_ENABLEMAIL = "dropbox_enablemail"; /** CONF_DROPBOX_CONFIRMATION configuration parameter key. */ - public transient static final String CONF_DROPBOX_CONFIRMATION = "dropbox_confirmation"; + public static final transient String CONF_DROPBOX_CONFIRMATION = "dropbox_confirmation"; /** CONF_SCORING_ENABLED configuration parameter key. */ - public transient static final String CONF_SCORING_ENABLED = "scoring_enabled"; + public static final transient String CONF_SCORING_ENABLED = "scoring_enabled"; /** ACCESS_SCORING configuration parameter key. */ - public transient static final String ACCESS_SCORING = "scoring"; + public static final transient String ACCESS_SCORING = "scoring"; /** ACCESS_DROPBOX configuration parameter key. */ - public transient static final String ACCESS_DROPBOX = "dropbox"; - public transient static final String ACCESS_RETURNBOX = "returnbox"; - public transient static final String ACCESS_PROJECTBROKER = "projectbroker"; + public static final transient String ACCESS_DROPBOX = "dropbox"; + public static final transient String ACCESS_RETURNBOX = "returnbox"; + public static final transient String ACCESS_PROJECTBROKER = "projectbroker"; /** CONF_TASK_PREVIEW configuration parameter key used for task-form. */ - public transient static final String CONF_TASK_PREVIEW = "task_preview"; + public static final transient String CONF_TASK_PREVIEW = "task_preview"; - public transient static final String CONF_RETURNBOX_ENABLED = "returnbox_enabled"; + public static final transient String CONF_RETURNBOX_ENABLED = "returnbox_enabled"; - public transient static final String CONF_ACCOUNTMANAGER_GROUP_KEY = "config_accountmanager_group_id"; + public static final transient String CONF_ACCOUNTMANAGER_GROUP_KEY = "config_accountmanager_group_id"; - public transient static final String CONF_PROJECTBROKER_KEY = "conf_projectbroker_id"; + public static final transient String CONF_PROJECTBROKER_KEY = "conf_projectbroker_id"; - public transient static final String CONF_NODE_SHORT_TITLE_KEY = "conf_node_short_title"; + public static final transient String CONF_NODE_SHORT_TITLE_KEY = "conf_node_short_title"; // MUST BE NON TRANSIENT private Condition conditionDrop, conditionScoring, conditionReturnbox; @@ -582,7 +582,9 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode { Base64.encodeBase64String(project.getAttachmentFileName().getBytes())); try { attachmentFolder.mkdirs(); - attachment.createNewFile(); + if(!attachment.createNewFile()) { + log.error("Cannot create attachment file: {}", attachment); + } FileOutputStream attachmentOutputStream = new FileOutputStream(attachment); InputStream leafInputStream = itemLeaf.getInputStream(); FileUtils.copy(leafInputStream, attachmentOutputStream); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java b/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java index c50c21665c3..f8073df4e78 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java @@ -156,7 +156,7 @@ public class EditSolutionController extends FormBasicController { if(replaceFile && StringHelper.containsNonWhitespace(solution.getFilename())) { File currentFile = new File(solutionDir, solution.getFilename()); if(currentFile.exists()) { - currentFile.delete(); + FileUtils.deleteFile(currentFile); } } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java b/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java index ec6e83ac11d..ecce7f80c93 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java @@ -179,7 +179,7 @@ public class EditTaskController extends FormBasicController { if(usage == 1) { File currentFile = new File(taskContainer, task.getFilename()); if(currentFile.exists()) { - currentFile.delete(); + FileUtils.deleteFile(currentFile); } } } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java index 1b10c63bd6a..e592d98c3b6 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java @@ -59,6 +59,7 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.control.winmgr.CommandFactory; import org.olat.core.util.CodeHelper; +import org.olat.core.util.FileUtils; import org.olat.core.util.io.SystemFileFilter; import org.olat.core.util.vfs.VFSConstants; import org.olat.core.util.vfs.VFSContainer; @@ -398,9 +399,7 @@ class SubmitDocumentsController extends FormBasicController { private void doDelete(UserRequest ureq, SubmittedSolution solution) { File document = solution.getFile(); - if(document.exists()) { - document.delete(); - } + FileUtils.deleteFile(document); updateModel(ureq); updateWarnings(); } @@ -433,9 +432,7 @@ class SubmitDocumentsController extends FormBasicController { private void doReplace(UserRequest ureq, SubmittedSolution solution, File file, String filename) { File document = solution.getFile(); - if(document.exists()) { - document.delete(); - } + FileUtils.deleteFile(document); doUpload(ureq, file, filename); } diff --git a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java index d8df8749269..e4a7254b2a5 100644 --- a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java +++ b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java @@ -38,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.util.FileUtils; import org.olat.core.util.WebappHelper; /** @@ -78,9 +79,9 @@ public class GuiDemoFlexiForm extends FormBasicController { @Override protected void doDispose() { - // cleanup tempt files - if (tmpFile != null && tmpFile.exists()) { - tmpFile.delete(); + // cleanup temp files + if (tmpFile != null) { + FileUtils.deleteFile(tmpFile); } } @@ -99,7 +100,7 @@ public class GuiDemoFlexiForm extends FormBasicController { personData.setReadOnly(true); // get file and store it in temporary location - tmpFile = new File(WebappHelper.getTmpDir() + "/" + fileElement.getUploadFileName()); + tmpFile = new File(WebappHelper.getTmpDir(), fileElement.getUploadFileName()); fileElement.moveUploadFileTo(tmpFile); personData.setFile(tmpFile); diff --git a/src/main/java/org/olat/ims/cp/CPManagerImpl.java b/src/main/java/org/olat/ims/cp/CPManagerImpl.java index cd18fa46f46..d96798c8ccf 100644 --- a/src/main/java/org/olat/ims/cp/CPManagerImpl.java +++ b/src/main/java/org/olat/ims/cp/CPManagerImpl.java @@ -114,9 +114,7 @@ public class CPManagerImpl implements CPManager { File reFolder = frm.getFileResourceRoot(ores); File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); if(config == null) { - if(configXml.exists()) { - configXml.delete(); - } + FileUtils.deleteFile(configXml); } else { try(OutputStream out = new FileOutputStream(configXml)) { configXstream.toXML(config, out); diff --git a/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java b/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java index 1898f501124..2092c7a06fa 100644 --- a/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java +++ b/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java @@ -185,6 +185,7 @@ public class QTIEditorPackageImpl implements QTIEditorPackage { * Return the media base URL for delivering media of this package. * @return Complete media base URL. */ + @Override public String getMediaBaseURL() { return WebappHelper.getServletContextPath() + "/secstatic/qtieditor/" + packageSubDir; } @@ -204,8 +205,7 @@ public class QTIEditorPackageImpl implements QTIEditorPackage { localDir.setLocalSecurityCallback(secCallback); } String dirName = translator.translate("qti.basedir.displayname"); - NamedContainerImpl namedBaseDir = new NamedContainerImpl(dirName, localDir); - return namedBaseDir; + return new NamedContainerImpl(dirName, localDir); } /** @@ -266,14 +266,16 @@ public class QTIEditorPackageImpl implements QTIEditorPackage { // move file from temp to repository root and rename File fRepositoryZip = frm.getFileResource(fileResource); if (!FileUtils.moveFileToDir(tmpZipFile, frm.getFileResourceRoot(fileResource))) { - tmpZipFile.delete(); + FileUtils.deleteFile(tmpZipFile); return false; } - fRepositoryZip.delete(); - new File(frm.getFileResourceRoot(fileResource), tmpZipFile.getName()).renameTo(fRepositoryZip); + FileUtils.deleteFile(fRepositoryZip); + if(!new File(frm.getFileResourceRoot(fileResource), tmpZipFile.getName()).renameTo(fRepositoryZip)) { + log.error("Cannot rename: {}", fRepositoryZip); + } // delete old unzip content. If the repository entry gets called in the meantime, // the package will get unzipped again. - tmpZipFile.delete(); + FileUtils.deleteFile(tmpZipFile); frm.deleteUnzipContent(fileResource); // to be prepared for the next start, unzip right now. return (frm.unzipFileResource(fileResource) != null); diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java index 3a98891a7a9..1631bb85cea 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -316,9 +316,7 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia File reFolder = frm.getFileResourceRoot(testEntry.getOlatResource()); File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); if(options == null) { - if(configXml.exists()) { - configXml.delete(); - } + FileUtils.deleteFile(configXml); } else { try (OutputStream out = new FileOutputStream(configXml)) { configXstream.toXML(options, out); @@ -1156,11 +1154,9 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia final File resultFile = getAssessmentResultFile(candidateSession); testSessionDao.deleteTestSession(candidateSession); - if(sessionState != null && sessionState.exists()) { - sessionState.delete(); - } - if(resultFile != null && resultFile.exists()) { - resultFile.delete(); + FileUtils.deleteFile(sessionState); + if(resultFile != null) { + FileUtils.deleteFile(resultFile); } } diff --git a/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java b/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java index 3b2fb172247..7e837f6d0fd 100644 --- a/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java +++ b/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java @@ -45,6 +45,7 @@ import javax.xml.stream.XMLStreamWriter; import org.apache.logging.log4j.Logger; import org.olat.core.CoreSpringFactory; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.WebappHelper; import org.olat.core.util.xml.XMLFactories; import org.olat.fileresource.types.ImsQTI21Resource; @@ -149,13 +150,10 @@ class CopyAndConvertVisitor extends SimpleFileVisitor<Path> { fileInfos.setVersion(infos.getVersion()); } if(onyx38Family(fileInfos)) { - validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw -> { - return new Onyx38ToQtiWorksHandler(xtw); - }); + validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), Onyx38ToQtiWorksHandler::new); } else if(onyxWebFamily(fileInfos)) { - validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw -> { - return new OnyxToQtiWorksHandler(xtw, infos); - }); + validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw -> + new OnyxToQtiWorksHandler(xtw, infos)); if(validated && fileInfos.getType() == InputType.assessmentItem) { //check templateVariables @@ -218,9 +216,7 @@ class CopyAndConvertVisitor extends SimpleFileVisitor<Path> { log.error("", e1); return false; } finally { - if(tmpFile.exists()) { - tmpFile.delete(); - } + FileUtils.deleteFile(tmpFile); } } diff --git a/src/main/java/org/olat/modules/co/ContactForm.java b/src/main/java/org/olat/modules/co/ContactForm.java index 464d5bbfaaa..1f8b17fa883 100644 --- a/src/main/java/org/olat/modules/co/ContactForm.java +++ b/src/main/java/org/olat/modules/co/ContactForm.java @@ -419,7 +419,7 @@ public class ContactForm extends FormBasicController { File uploadedFile = (File)source.getUserObject(); if(uploadedFile != null && uploadedFile.exists()) { attachmentSize -= uploadedFile.length(); - uploadedFile.delete(); + FileUtils.deleteFile(uploadedFile); } attachmentLinks.remove(source); uploadCont.remove(source); diff --git a/src/main/java/org/olat/modules/fo/ui/MessageEditController.java b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java index c6e8abfe19e..ab119a4ea6d 100644 --- a/src/main/java/org/olat/modules/fo/ui/MessageEditController.java +++ b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java @@ -60,6 +60,7 @@ import org.olat.core.id.Identity; import org.olat.core.logging.DBRuntimeException; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.CodeHelper; +import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.WebappHelper; @@ -630,7 +631,7 @@ public class MessageEditController extends FormBasicController { if (fileExists) { fileUpload.setErrorKey("attachments.error.file.exists", null); - fileUpload.getUploadFile().delete(); + FileUtils.deleteFile(fileUpload.getUploadFile()); fileUpload.showError(true); } else { // files got stored in an extra tempFolder, to use the same @@ -644,7 +645,7 @@ public class MessageEditController extends FormBasicController { } } else { fileUpload.setErrorKey("attachments.too.big", new String[] { Long.toString((fileUpload.getMaxUploadSizeKB() / 1024)) }); - fileUpload.getUploadFile().delete(); + FileUtils.deleteFile(fileUpload.getUploadFile()); fileUpload.showError(true); } } diff --git a/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java b/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java index a0e8c97f2ea..223ba838c5e 100644 --- a/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java +++ b/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java @@ -42,6 +42,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.event.GenericEventListener; @@ -302,23 +303,23 @@ public class LibraryManagerImpl implements LibraryManager, InitializingBean, Gen public void lockFolderAndPreventDoubleIndexing() { File lockFile = new File(getSharedFolder().getBasefile(), NO_FOLDER_INDEXING_LOCKFILE); try { - lockFile.createNewFile(); + if(!lockFile.createNewFile()) { + log.error("Cannot create lock file: {}", lockFile); + } } catch (IOException e) { log.error("could not create lock-file in shared folder for library.", e); } } /** - * Remove old lockfile before changing linked resource folder + * Remove old lock file before changing linked resource folder */ @Override public void removeExistingLockFile(){ LocalFolderImpl folder = getSharedFolder(); if(folder != null && folder.exists()) { File lockFile = new File(folder.getBasefile(), NO_FOLDER_INDEXING_LOCKFILE); - if (lockFile.exists()) { - lockFile.delete(); - } + FileUtils.deleteFile(lockFile); } } diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java index 75b00155f91..986afdbe895 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java +++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java @@ -349,9 +349,7 @@ public class PortfolioServiceImpl implements PortfolioService { File reFolder = frm.getFileResourceRoot(resource); File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); if(options == null) { - if(configXml.exists()) { - configXml.delete(); - } + FileUtils.deleteFile(configXml); } else { try (OutputStream out = new FileOutputStream(configXml)) { configXstream.toXML(options, out); @@ -1090,9 +1088,7 @@ public class PortfolioServiceImpl implements PortfolioService { if(StringHelper.containsNonWhitespace(imagePath)) { File bcroot = portfolioFileStorage.getRootDirectory(); File file = new File(bcroot, imagePath); - if(file.exists()) { - file.delete(); - } + FileUtils.deleteFile(file); } } diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java index b0980b00784..bf02738105c 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java @@ -549,7 +549,7 @@ public class AssignmentEditController extends FormBasicController { if (fileExists) { documentUploadEl.setErrorKey("attachments.error.file.exists", null); - documentUploadEl.getUploadFile().delete(); + FileUtils.deleteFile(documentUploadEl.getUploadFile()); documentUploadEl.showError(true); } else { // files got stored in an extra tempFolder, to use the same diff --git a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java index c5a1145b415..52459901098 100644 --- a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java +++ b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java @@ -471,7 +471,7 @@ class QualityMailing { if (reportPdf.length() > 0) { return reportPdf; } - reportPdf.delete(); + FileUtils.deleteFile(reportPdf); } return null; } diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java index a857220ebff..28fd8973994 100644 --- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java +++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java @@ -35,6 +35,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.xml.XStreamHelper; import org.olat.fileresource.FileResourceManager; import org.springframework.stereotype.Service; @@ -87,9 +88,7 @@ public class ScormMainManager { File reFolder = frm.getFileResourceRoot(ores); File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); if(config == null) { - if(configXml.exists()) { - configXml.delete(); - } + FileUtils.deleteFile(configXml); } else { try(OutputStream out = new FileOutputStream(configXml)) { configXstream.toXML(config, out); diff --git a/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java b/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java index 40d4a08a877..606b55de625 100644 --- a/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java +++ b/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java @@ -135,7 +135,7 @@ public class ScormExportManager { document.loadDocument(((LocalFileImpl)file).getBasefile()); } else { - logger.warn("Cannot use this type of VSFItem to load a SCO Datamodel: " + file.getClass().getName()); + logger.warn("Cannot use this type of VSFItem to load a SCO Datamodel: {}", file.getClass().getName()); continue; } diff --git a/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java b/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java index 9f04ea61c9c..82f6902cb84 100644 --- a/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java +++ b/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java @@ -71,7 +71,7 @@ public class ScoDocument extends XMLDocument { * split intot part_a and part_b so we can insert 'n' number of <objective> * nodes if the sco creates them during a session */ - public static String[] _cmivalues_a = { "cmi.core.student_id", "cmi.core.student_name", "cmi.core.lesson_location", "cmi.core.credit", + private static String[] _cmivalues_a = { "cmi.core.student_id", "cmi.core.student_name", "cmi.core.lesson_location", "cmi.core.credit", "cmi.core.lesson_status", "cmi.core.entry", "cmi.core.score.raw", "cmi.core.score.max", "cmi.core.score.min", "cmi.core.total_time", "cmi.core.lesson_mode", "cmi.core.exit", "cmi.core.session_time", "cmi.suspend_data", "cmi.launch_data", "cmi.comments", "cmi.comments_from_lms", }; @@ -79,7 +79,7 @@ public class ScoDocument extends XMLDocument { /** * <objective> nodes go between part_a and part_b */ - public static String[] _cmivalues_b = { "cmi.student_data.mastery_score", "cmi.student_data.max_time_allowed", + private static String[] _cmivalues_b = { "cmi.student_data.mastery_score", "cmi.student_data.max_time_allowed", "cmi.student_data.time_limit_action", "cmi.student_preference.audio", "cmi.student_preference.language", "cmi.student_preference.speed", "cmi.student_preference.text", }; diff --git a/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java b/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java index a3807091532..107d1c1e2fa 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java +++ b/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java @@ -32,6 +32,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.core.util.vfs.Quota; import org.olat.core.util.vfs.VFSContainer; @@ -47,7 +48,6 @@ import org.olat.resource.OLATResource; public class VideoPosterUploadForm extends FormBasicController { private OLATResource videoResource; private long remainingSpace; - private VFSContainer videoResourceFileroot; private VFSContainer metaDataFolder; private FileElement posterField; @@ -69,7 +69,7 @@ public class VideoPosterUploadForm extends FormBasicController { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { remainingSpace = Quota.UNLIMITED; - videoResourceFileroot = new LocalFolderImpl(FileResourceManager.getInstance().getFileResourceRootImpl(videoResource).getBasefile()); + VFSContainer videoResourceFileroot = new LocalFolderImpl(FileResourceManager.getInstance().getFileResourceRootImpl(videoResource).getBasefile()); metaDataFolder = VFSManager.getOrCreateContainer(videoResourceFileroot, "media"); posterField = uifactory.addFileElement(getWindowControl(), "poster", "video.config.poster", formLayout); @@ -92,8 +92,7 @@ public class VideoPosterUploadForm extends FormBasicController { if (remainingSpace != -1) { if (posterField.getUploadFile().length() / 1024 > remainingSpace) { posterField.setErrorKey("QuotaExceeded", null); - posterField.getUploadFile().delete(); - return; + FileUtils.deleteFile(posterField.getUploadFile()); } } else { fireEvent(ureq, new FolderEvent(FolderEvent.UPLOAD_EVENT, posterField.moveUploadFileTo(metaDataFolder))); diff --git a/src/main/java/org/olat/repository/ui/author/SendMailController.java b/src/main/java/org/olat/repository/ui/author/SendMailController.java index 13828cf30f8..376ff3d078e 100644 --- a/src/main/java/org/olat/repository/ui/author/SendMailController.java +++ b/src/main/java/org/olat/repository/ui/author/SendMailController.java @@ -78,7 +78,8 @@ public class SendMailController extends FormBasicController { private RichTextElement bodyEl; private FileElement attachmentEl; private TextElement subjectEl; - private MultipleSelectionElement contactEl, copyFromEl; + private MultipleSelectionElement contactEl; + private MultipleSelectionElement copyFromEl; private FormLayoutContainer uploadCont; private int counter = 0; @@ -155,7 +156,7 @@ public class SendMailController extends FormBasicController { @Override protected boolean validateFormLogic(UserRequest ureq) { - boolean allOk = true; + boolean allOk = super.validateFormLogic(ureq); subjectEl.clearError(); if(!StringHelper.containsNonWhitespace(subjectEl.getValue())) { @@ -175,7 +176,7 @@ public class SendMailController extends FormBasicController { allOk &= false; } - return allOk & super.validateFormLogic(ureq); + return allOk; } private File[] getAttachments() { @@ -190,7 +191,8 @@ public class SendMailController extends FormBasicController { protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(source == attachmentEl) { doUploadAttachement(); - } if(source instanceof FormLink) { + } + if(source instanceof FormLink) { FormLink link = (FormLink)source; String cmd = link.getCmd(); if("delete".equals(cmd)) { @@ -203,9 +205,9 @@ public class SendMailController extends FormBasicController { private void doDeleteAttachment(Attachment attachment) { attachmentSize -= attachment.getFile().length(); - attachment.getFile().delete(); + FileUtils.deleteFile(attachment.getFile()); attachments.remove(attachment); - uploadCont.setVisible(attachments.size() > 0); + uploadCont.setVisible(!attachments.isEmpty()); uploadCont.setDirty(true); } diff --git a/src/main/java/org/olat/restapi/support/MultipartReader.java b/src/main/java/org/olat/restapi/support/MultipartReader.java index 57e7eb2f10d..0aaccafa4ec 100644 --- a/src/main/java/org/olat/restapi/support/MultipartReader.java +++ b/src/main/java/org/olat/restapi/support/MultipartReader.java @@ -21,6 +21,7 @@ package org.olat.restapi.support; import java.io.File; import java.io.IOException; +import java.nio.file.Files; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -131,7 +132,11 @@ public class MultipartReader { public void close() { if (file != null) { - file.delete(); + try { + Files.deleteIfExists(file.toPath()); + } catch (IOException e) { + log.error("", e); + } } fields.clear(); } diff --git a/src/main/java/org/olat/restapi/system/StatusWebservice.java b/src/main/java/org/olat/restapi/system/StatusWebservice.java index 1b393508bd4..235e66831f7 100644 --- a/src/main/java/org/olat/restapi/system/StatusWebservice.java +++ b/src/main/java/org/olat/restapi/system/StatusWebservice.java @@ -22,6 +22,7 @@ package org.olat.restapi.system; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Files; import java.util.List; import java.util.Set; @@ -94,7 +95,7 @@ public class StatusWebservice { WorkThreadInformations.unset(); stats.setWriteFileInMilliseconds(CodeHelper.nanoToMilliTime(startFile)); stats.setWriteFile(infoFile.exists()); - infoFile.delete(); + Files.deleteIfExists(infoFile.toPath()); } catch (Exception e) { stats.setWriteFile(false); stats.setWriteFileInMilliseconds(-1l); @@ -107,12 +108,12 @@ public class StatusWebservice { PropertyManager propertyManager = CoreSpringFactory.getImpl(PropertyManager.class); List<Property> props = propertyManager.findProperties((Identity)null, (BusinessGroup)null, PING_RESOURCE, PING_REF, PING_REF); - if(props != null && props.size() > 0) { + if(props != null && !props.isEmpty()) { for(Property prop:props) { propertyManager.deleteProperty(prop); } - DBFactory.getInstance().commit(); } + DBFactory.getInstance().commit(); long startDB = System.nanoTime(); Property prop = propertyManager.createPropertyInstance(null, null, PING_RESOURCE, PING_REF, PING_REF, 0f, 0l, "-", "-"); diff --git a/src/main/java/org/olat/search/service/document/file/PdfDocument.java b/src/main/java/org/olat/search/service/document/file/PdfDocument.java index 4fb1c9de4cb..f0494b3dcef 100644 --- a/src/main/java/org/olat/search/service/document/file/PdfDocument.java +++ b/src/main/java/org/olat/search/service/document/file/PdfDocument.java @@ -35,6 +35,7 @@ import org.apache.lucene.document.Document; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.util.CSSHelper; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.io.LimitedContentWriter; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; @@ -89,7 +90,7 @@ public class PdfDocument extends FileDocument { String hashCodeAsString = Integer.toString(hashCode); String splitDirName = hashCodeAsString.substring(hashCodeAsString.length()-2); String pdfTextTmpFilePath = splitDirName + File.separator + hashCodeAsString + leafResourceContext.getFilePath(); - if (log.isDebugEnabled()) log.debug("PdfTextTmpFilePath=" + pdfTextTmpFilePath); + if (log.isDebugEnabled()) log.debug("PdfTextTmpFilePath={}", pdfTextTmpFilePath); return pdfTextTmpFilePath; } @@ -144,6 +145,7 @@ public class PdfDocument extends FileDocument { return new FileContent(title, sb.toString()); } catch(IOException e) { + log.error("", e); throw e; } } @@ -161,7 +163,7 @@ public class PdfDocument extends FileDocument { } if (leaf.getLastModified() > pdfTextFile.lastModified() ) { // pdf file is newer => delete it - pdfTextFile.delete(); + FileUtils.deleteFile(pdfTextFile); return true; } return false; diff --git a/src/main/java/org/olat/user/DisplayPortraitManager.java b/src/main/java/org/olat/user/DisplayPortraitManager.java index d5c57fffcaf..515eec43da9 100644 --- a/src/main/java/org/olat/user/DisplayPortraitManager.java +++ b/src/main/java/org/olat/user/DisplayPortraitManager.java @@ -287,9 +287,9 @@ public class DisplayPortraitManager implements UserDataDeletable, UserDataExport if(directory != null) { for(File currentImage:directory.listFiles()) { if(currentImage.equals(file)) { - continue; + // do nothing } else if(currentImage.getName().startsWith(prefix)) { - currentImage.delete(); + FileUtils.deleteFile(currentImage); } } } @@ -339,7 +339,7 @@ public class DisplayPortraitManager implements UserDataDeletable, UserDataExport for(File file:directory.listFiles()) { String filename = file.getName(); if(filename.startsWith(prefix)) { - file.delete(); + FileUtils.deleteFile(file); } } } diff --git a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java index bd297051932..189d3a60813 100644 --- a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java +++ b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java @@ -31,6 +31,7 @@ import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.id.Identity; import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.xml.XStreamHelper; @@ -86,7 +87,7 @@ public class HomePageConfigManagerImpl implements HomePageConfigManager { } catch (Exception e) { log.error("Error while loading homepage config from path::" + configFile.getAbsolutePath() + ", fallback to default configuration", e); - if (configFile.exists()) configFile.delete(); + FileUtils.deleteFile(configFile); retVal = loadAndSaveDefaults(identity); // show message to user } -- GitLab