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 |  106 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 80 insertions(+), 26 deletions(-)

diff --git a/src/de/uhilger/fm/Mover.java b/src/de/uhilger/fm/Mover.java
index f7b6ea6..5b452db 100644
--- a/src/de/uhilger/fm/Mover.java
+++ b/src/de/uhilger/fm/Mover.java
@@ -24,24 +24,67 @@
 import java.nio.file.Path;
 
 /**
- * Eine Klasse mit Methoden zum Kopieren und Verschieben von Dateien
+ * Verschieben und Kopieren von Dateien und Ordnern
+ * 
+ * Handhabung von Bilddateien: 
+ * 
+ * Fuer jede Datei mit Endung jpg, jpeg und png werden alle Varianten wie zum Beispiel 
+ * dateiname.jpg, dateiname_kl.jpg, dateiname_gr.jpg, dateiname_gr_b64.jpg usw. 
+ * beruecksichtigt.
  *
  * @author Ulrich Hilger, 15. Janaur 2024
  */
 public class Mover extends FileHelper {
 
-
-  public String copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, 
+  public static final int OP_COPY = 1;
+  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
+   * @param toPath der Pfad zum Ziel der Verschiebe- oder Kopieraktion
+   * @param fileNames die Liste der Dateien und Ordner, die verschoben oder kopiert werden sollen
+   * @param operation die gewuenschte Dateioperation, OP_COPY oder OP_MOVE
+   * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen
+   * @throws IOException wenn etwas schief geht
+   */
+  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);
@@ -51,37 +94,48 @@
         if (destFile.exists()) {
           destFile = getNewFileName(destFile);
         }
-        if (operation == Const.OP_MOVE) {
-          String fname = srcFile.getName().toLowerCase();
-          if (fname.endsWith(Const.JPEG)
-                  || fname.endsWith(Const.JPG)
-                  || fname.endsWith(Const.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;
   }
 
-  private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, 
-          boolean createDestDir) throws IOException {
+  /**
+   * Eine Bilddatei mit allen Varianten verschieben oder kopieren
+   * 
+   * Fuer jede Datei mit Endung jpg, jpeg und png werden alle Varianten wie zum Beispiel 
+   * dateiname.jpg, dateiname_kl.jpg, dateiname_gr.jpg, dateiname_gr_b64.jpg usw. 
+   * beruecksichtigt, also dateiname*.jpg.
+   * 
+   * @param srcFile die Bilddatei, deren Varianten beruecksichtigt werden sollen
+   * @param srcDir der Herkunftsort
+   * @param targetDir der Zielort
+   * @throws IOException wenn etwas schief geht
+   */
+  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