This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch fork/dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit 85789e186a50f89acfa254f7c07658fb598eaf47
Merge: cd838be4b 830ba8f6f
Author: Philipp Zehnder <[email protected]>
AuthorDate: Wed Dec 20 18:05:34 2023 +0100

    Merge remote-tracking branch 
'origin/2300-redesign-fileapi-to-use-original-file-name-v2' into fork/dev

 streampipes-service-core/pom.xml                   |   6 +
 .../v095/DuplicateFilesRenameMigration.java        | 124 ++++++++++++++++-----
 .../v095/DuplicateFilesRenameMigrationTest.java    | 120 ++++++++++++++++++++
 3 files changed, 224 insertions(+), 26 deletions(-)

diff --cc 
streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/DuplicateFilesRenameMigration.java
index 3a2eca649,de17535c9..e5e1f7647
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/DuplicateFilesRenameMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/DuplicateFilesRenameMigration.java
@@@ -33,34 -32,30 +32,32 @@@ public class DuplicateFilesRenameMigrat
      return true;
    }
  
 +  // Starting from v0.95, StreamPipes will use file name as the unique 
identifier of files
 +  // This migration renames all the files that have duplicate names to ensure 
uniqueness
    @Override
    public void executeMigration() {
-     var duplicateFiles = new HashMap<String, List<FileMetadata>>();
-     var fileMetadataStorage = 
StorageDispatcher.INSTANCE.getNoSqlStore().getFileMetadataStorage();
-     for (var metadata : fileMetadataStorage
-         .getAllFileMetadataDescriptions()) {
-       var originalFilename = metadata.getOriginalFilename().toLowerCase();
-       if (!duplicateFiles.containsKey(originalFilename)) {
-         duplicateFiles.put(originalFilename, new ArrayList<FileMetadata>());
-       }
-       duplicateFiles.get(originalFilename).add(metadata);
-     }
- 
-     for (var metadataList : duplicateFiles.values()) {
-       for (var i = 1; i < metadataList.size(); ++i) {
-         var metadata = metadataList.get(i);
-         var oldOriginalFilename = metadata.getOriginalFilename();
-         var indexBeforeFileType = oldOriginalFilename.lastIndexOf('.');
-         var newOriginalFilename =
-             String.format("%s(%d)%s", oldOriginalFilename.substring(0, 
indexBeforeFileType), i + 1,
-                 oldOriginalFilename.substring(indexBeforeFileType));
-         metadata.setOriginalFilename(newOriginalFilename);
-         fileMetadataStorage.updateFileMetadata(metadata);
-       }
-     }
+     var fileMetadataStorage = StorageDispatcher.INSTANCE.getNoSqlStore()
+                                                         
.getFileMetadataStorage();
+ 
+     var filesToUpdate = 
getFilesToUpdate(fileMetadataStorage.getAllFileMetadataDescriptions());
  
+     filesToUpdate.forEach(fileMetadata -> 
fileMetadataStorage.updateFileMetadata(fileMetadata));
+   }
+ 
+ 
+   /**
+    * Takes the list of files and groups all files with the same name together.
+    * The result is a list for each file name that has more than one file 
associated with it.
+    */
+   private List<List<FileMetadata>> 
getListsOfFilesWithSameName(List<FileMetadata> filesWithOldName) {
+     var duplicateFileMap = filesWithOldName.stream()
+                                            .collect(
+                                                Collectors.groupingBy(file -> 
file.getOriginalFilename()
+                                                                               
   .toLowerCase()));
+     return duplicateFileMap.values()
+                            .stream()
+                            .filter(files -> files.size() > 1)
+                            .toList();
    }
  
    @Override

Reply via email to