From 0cd5e868890043ce0544444cbf87a753b4119a93 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Fri, 15 Nov 2024 09:35:07 +0000
Subject: [PATCH] Beruecksichtigung aller Varianten eines Bildes auch beim Kopieren von Bilddateien

---
 src/de/uhilger/fm/Mover.java |   74 ++++++++++++++++++++++++------------
 1 files changed, 49 insertions(+), 25 deletions(-)

diff --git a/src/de/uhilger/fm/Mover.java b/src/de/uhilger/fm/Mover.java
index 66986aa..5b452db 100644
--- a/src/de/uhilger/fm/Mover.java
+++ b/src/de/uhilger/fm/Mover.java
@@ -24,7 +24,7 @@
 import java.nio.file.Path;
 
 /**
- * Die Klasse Mover verschiebt und kopiert Dateien und Ordner
+ * Verschieben und Kopieren von Dateien und Ordnern
  * 
  * Handhabung von Bilddateien: 
  * 
@@ -40,6 +40,34 @@
   public static final int OP_MOVE = 2;
   
   /**
+   * Dateien und Ordner kopieren
+   * 
+   * @param fromPath der Pfad zur Quelle  der Kopieraktion
+   * @param toPath der Pfad zum Ziel der Kopieraktion
+   * @param fileNames die Liste der Dateien und Ordner, die kopiert werden sollen
+   * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen
+   * @throws IOException wenn etwas schief geht
+   */
+  public void copy(String fromPath, String toPath, String[] fileNames, String base) 
+          throws IOException {
+    copyOrMoveFiles(fromPath, toPath, fileNames, OP_COPY, base);
+  }
+  
+  /**
+   * Dateien und Ordner verschieben
+   * 
+   * @param fromPath der Pfad zur Quelle  der Verschiebeaktion
+   * @param toPath der Pfad zum Ziel der Verschiebeaktion
+   * @param fileNames die Liste der Dateien und Ordner, die verschoben werden sollen
+   * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen
+   * @throws IOException wenn etwas schief geht
+   */
+  public void move(String fromPath, String toPath, String[] fileNames, String base) 
+          throws IOException {
+    copyOrMoveFiles(fromPath, toPath, fileNames, OP_MOVE, base);    
+  }
+  
+  /**
    * Dateien und Ordner verschieben oder kopieren
    * 
    * @param fromPath der Pfad zur Quelle  der Verschiebe- oder Kopieraktion
@@ -49,17 +77,14 @@
    * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen
    * @throws IOException wenn etwas schief geht
    */
-  public void copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, 
+  private void copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, 
           int operation, String base) throws IOException {
-    //String result = null;
     File srcDir = new File(base, fromPath);
     File targetDir = new File(base, toPath);
     for (String fileName : fileNames) {
       File srcFile = new File(srcDir, fileName);
-      //logger.fine("srcFile: " + srcFile);
       if (srcFile.isDirectory()) {
-        //logger.fine("srcFile is directory.");
-        CopyMoveVisitor bearbeiter = new CopyMoveVisitor();
+        FileOpsVisitor bearbeiter = new FileOpsVisitor();
         bearbeiter.setTargetDir(targetDir.toPath());
         bearbeiter.setOperation(operation);
         Files.walkFileTree(srcFile.toPath(), bearbeiter);
@@ -69,21 +94,20 @@
         if (destFile.exists()) {
           destFile = getNewFileName(destFile);
         }
-        if (operation == OP_MOVE) {
-          String fname = srcFile.getName().toLowerCase();
-          if (fname.endsWith(ImageFileFilter.JPEG)
-                  || fname.endsWith(ImageFileFilter.JPG)
-                  || fname.endsWith(ImageFileFilter.PNG)) {
-            moveImgFilesToDirectory(srcFile, srcDir, targetDir/*, false*/);
-          } else {
-            Files.move(source, destFile.toPath());
-          }
+        String fname = srcFile.getName().toLowerCase();
+        if (fname.endsWith(ImageFileFilter.JPEG)
+                || fname.endsWith(ImageFileFilter.JPG)
+                || fname.endsWith(ImageFileFilter.PNG)) {
+          copyOrMoveImgFilesToDirectory(srcFile, srcDir, targetDir/*, false*/, operation);
         } else {
-          Files.copy(source, destFile.toPath());
-        }
+          if (operation == OP_MOVE) {
+            Files.move(source, destFile.toPath());
+          } else {
+            Files.copy(source, destFile.toPath());
+          }
+        }        
       }
     }
-    //return result;
   }
 
   /**
@@ -98,20 +122,20 @@
    * @param targetDir der Zielort
    * @throws IOException wenn etwas schief geht
    */
-  private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir/*, 
-          boolean createDestDir*/) throws IOException {
+  private void copyOrMoveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, 
+          int operation) throws IOException {
     String fnameext = srcFile.getName();
     int dotpos = fnameext.lastIndexOf(".");
     String fname = fnameext.substring(0, dotpos);
     String ext = fnameext.substring(dotpos);
-    //logger.fine("fname: " + fname + ", ext: " + ext);
     Path targetPath = targetDir.toPath();
     DirectoryStream<Path> stream = Files.newDirectoryStream(srcDir.toPath(), fname + "*" + ext); 
-                                                //"*.{txt,doc,pdf,ppt}"
     for (Path path : stream) {
-      //logger.fine(path.getFileName().toString());
-      //Files.delete(path);
-      Files.move(path, targetPath.resolve(path.getFileName()));
+      if(operation == OP_COPY) {
+        Files.copy(path, targetPath.resolve(path.getFileName()));
+      } else {
+        Files.move(path, targetPath.resolve(path.getFileName()));
+      }
     }
     stream.close();
   }

--
Gitblit v1.9.3