From: Tuukka Lehtonen Date: Mon, 20 Mar 2017 11:59:02 +0000 (+0200) Subject: Added functional FileOperation interface to FileService. X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=9da67402df63f89ffd2969e87fd140b17b744e47;p=simantics%2Fplatform.git Added functional FileOperation interface to FileService. This makes using method references with FileService easier/possible and provides for cleaner code. refs #7100 Change-Id: I6929654b5f9d41cbad9fe4b35b2219d91e64a791 --- diff --git a/bundles/org.simantics.utils/src/org/simantics/utils/FileService.java b/bundles/org.simantics.utils/src/org/simantics/utils/FileService.java index c500c6635..ab3d249d3 100644 --- a/bundles/org.simantics.utils/src/org/simantics/utils/FileService.java +++ b/bundles/org.simantics.utils/src/org/simantics/utils/FileService.java @@ -22,6 +22,31 @@ public interface FileService { } } + @FunctionalInterface + public static interface FileOperation { + IOperation perform(File file); + + default void perform(File... files) { + for (File f : files) + perform(f); + } + } + + public static class DeleteOperation implements FileOperation { + private final FileService service; + private final DeleteOption[] options; + + public DeleteOperation(FileService service, DeleteOption... options) { + this.service = service; + this.options = options; + } + + @Override + public IOperation perform(File file) { + return service.scheduleDeleteIfExists(file, options); + } + } + /** * Schedules a file to be deleted at some point in the future when the * system allows it to be deleted if ever. @@ -33,4 +58,16 @@ public interface FileService { */ IOperation scheduleDeleteIfExists(File file, DeleteOption... options); + /** + * @param options + * the deletion options to be used by the returned FileOperation + * @return a FileOperation that runs + * {@link #scheduleDeleteIfExists(File, DeleteOption...)} for any + * files given to it + * @since 1.28.0 + */ + default FileOperation deleteOperation(DeleteOption... options) { + return new DeleteOperation(this, options); + } + }