From 21b0e461d272751b3d6c2721395bf6375b41c5b3 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Fri, 19 Jun 2026 11:35:30 +0000
Subject: [PATCH] move to new repo

---
 moteur-zip-megatim/src/main/java/com/megatim/module/compression/impl/JavaZipZip4Impl.java |  421 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 421 insertions(+), 0 deletions(-)

diff --git a/moteur-zip-megatim/src/main/java/com/megatim/module/compression/impl/JavaZipZip4Impl.java b/moteur-zip-megatim/src/main/java/com/megatim/module/compression/impl/JavaZipZip4Impl.java
new file mode 100644
index 0000000..d8e6824
--- /dev/null
+++ b/moteur-zip-megatim/src/main/java/com/megatim/module/compression/impl/JavaZipZip4Impl.java
@@ -0,0 +1,421 @@
+package com.megatim.module.compression.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.CompressionLevel;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+import com.megatim.module.compression.ifaces.CompressionFace;
+import java.util.Arrays;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.enums.CompressionMethod;
+
+/**
+ * Classe implementant l'algorithme Zip4J
+ *
+ * @author derteuffel
+ *
+ */
+public class JavaZipZip4Impl implements CompressionFace {
+
+    public void zipFile(File sourceFile, File destinationFolder, int splitLength) throws ZipException {
+        ZipParameters zipParameters = new ZipParameters();
+        zipParameters.setCompressionMethod(CompressionMethod.DEFLATE);
+        zipParameters.setCompressionLevel(CompressionLevel.NORMAL);
+
+        ZipFile zipFile = new ZipFile(new File(destinationFolder.getAbsolutePath(), removeExtension(sourceFile.getName()) + ".zip"));
+
+        // Create the split zip file from a single file
+        zipFile.createSplitZipFile(Arrays.asList(sourceFile), zipParameters, true, splitLength * 1024 * 1024);
+
+    }
+
+    public void mergeSplitFiles(File mainZip, File destinationDir, String outputName) throws ZipException {
+        // Create a ZipFile instance for the first part
+        ZipFile zipFile = new ZipFile(mainZip);
+        File mergedZipFile = new File(destinationDir, outputName);
+
+        // Merge the split files into a single ZIP file
+        zipFile.mergeSplitFiles(mergedZipFile);
+    }
+
+    public File zipFile(File fichierAZipper) throws IOException {
+        // TODO Auto-generated method stub
+
+        ZipFile zipFile = new ZipFile(removeExtension(fichierAZipper.getPath()) + ".zip");
+        zipFile.addFile(new File(fichierAZipper.getPath()));
+
+        // return new File(removeExtension(fichierAZipper.getPath()) + ".zip");
+        return zipFile.getFile();
+    }
+
+    public File zipFile(File fichierAZipper, File destination) throws IOException {
+        // TODO Auto-generated method stub
+
+        ZipFile zipFile = new ZipFile(new File(destination.getPath(), removeExtension(fichierAZipper.getName()) + ".zip"));
+        zipFile.addFile(fichierAZipper);
+
+        return zipFile.getFile();
+    }
+
+    public File zipRepository(File repertoireAZipper, File destination) throws IOException {
+        // TODO Auto-generated method stub
+
+        ZipFile zipFile = new ZipFile(new File(destination.getPath(), removeExtension(repertoireAZipper.getName()) + ".zip"));
+        zipFile.addFolder(repertoireAZipper);
+
+        return zipFile.getFile();
+    }
+
+    public File zipFile(File fichierAZipper, File repertoireDestination, String password) throws IOException {
+        String sourceFile = fichierAZipper.getAbsolutePath();
+
+        ZipParameters zipParameters = new ZipParameters();
+
+        zipParameters.setEncryptFiles(true);
+
+        zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
+
+        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+        File fileToAdd = new File(sourceFile);
+
+        if (!fileToAdd.exists()) {
+
+            fileToAdd.createNewFile();
+
+        }
+        ZipFile zipFile = new ZipFile(new File(repertoireDestination.getPath(), removeExtension(fichierAZipper.getName()) + ".zip"), password.toCharArray());
+        zipFile.addFile(fichierAZipper, zipParameters);
+
+        zipFile.close();
+
+        return zipFile.getFile();
+    }
+
+    // Zip directory
+    public File zipRepository(File repertoireAZipper) throws IOException {
+        // TODO Auto-generated method stub
+
+        new ZipFile(removeExtension(repertoireAZipper.getPath()) + ".zip").addFolder(new File(repertoireAZipper.getPath()));
+
+        return new File(removeExtension(repertoireAZipper.getPath()) + ".zip");
+    }
+
+    // Dezipper un fichier zipper
+    public void unZipFile(File fichierZipper, File repertoireSorti) throws IOException {
+        // TODO Auto-generated method stub
+
+        new ZipFile(removeExtension(fichierZipper.getPath()) + ".zip").extractAll(repertoireSorti.getPath());
+
+    }
+
+    // Dezipper un repertoir 
+    public void unZipRepository(File repertoireZipper, File repertoireSorti) throws IOException {
+        // TODO Auto-generated method stub
+
+        new ZipFile(removeExtension(repertoireZipper.getPath()) + ".zip").extractAll(repertoireSorti.getPath());
+
+    }
+
+    public void addFile(File fichier, File zipFile) throws Exception {
+        // TODO Auto-generated method stub
+
+        if (zipFile.createNewFile()) {
+
+            System.out.println("Zip file created");
+
+        } else {
+
+            System.out.println("Zip file already exist");
+
+        }
+
+        new ZipFile(zipFile.getPath()).addFile(new File(fichier.getPath()));
+
+    }
+
+    // Add repository to existed zip file
+    public void addRepository(File repository, File zipFile) throws Exception {
+        // TODO Auto-generated method stub
+
+        if (zipFile.createNewFile()) {
+
+            System.out.println("Zip file created");
+
+        } else {
+
+            System.out.println("Zip file already exist");
+
+        }
+
+        new ZipFile(zipFile.getPath()).addFolder(new File(repository.getPath()));
+
+    }
+
+    // Zip file with password
+    public File zipFile(File fichierAZipper, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        String sourceFile = fichierAZipper.getAbsolutePath();
+
+        ZipParameters zipParameters = new ZipParameters();
+
+        zipParameters.setEncryptFiles(true);
+
+        zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
+
+        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+        File fileToAdd = new File(sourceFile);
+
+        if (!fileToAdd.exists()) {
+
+            fileToAdd.createNewFile();
+
+        }
+
+        ZipFile zipFile = new ZipFile(removeExtension(fileToAdd.getPath()) + ".zip", password.toCharArray());
+
+        zipFile.addFile(fileToAdd, zipParameters);
+
+        zipFile.close();
+
+        return new File(removeExtension(fileToAdd.getPath()) + ".zip");
+    }
+
+    // Zip directory with passwor
+    public File zipRepository(File repertoireAZipper, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        String sourceFile = repertoireAZipper.getAbsolutePath();
+
+        ZipParameters zipParameters = new ZipParameters();
+
+        zipParameters.setEncryptFiles(true);
+
+        zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
+
+        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+
+        File fileToAdd = new File(sourceFile);
+
+        if (!fileToAdd.exists()) {
+
+            fileToAdd.mkdirs();
+
+        }
+
+        ZipFile zipFile = new ZipFile(removeExtension(fileToAdd.getPath()) + ".zip", password.toCharArray());
+
+        zipFile.addFolder(fileToAdd, zipParameters);
+
+        zipFile.close();
+
+        return new File(removeExtension(fileToAdd.getPath()) + ".zip");
+
+    }
+
+    // dezippage d'un fichier zipper
+    public void unZipFile(File fichierZipper, File repertoireSorti, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        String sourceFile = repertoireSorti.getAbsolutePath();
+
+        File outFile = new File(sourceFile);
+
+        // Check if directory exist
+        if (!outFile.exists()) {
+
+            outFile.mkdirs();
+
+        }
+
+        // Initialize zip file reader to prepare extraction
+        ZipFile zipFile = new ZipFile(fichierZipper.getPath(), password.toCharArray());
+
+        zipFile.extractAll(outFile.getPath());
+
+        // Close the reader
+        zipFile.close();
+
+    }
+
+    // Dezipper un repertoire
+    public void unZipRepository(File repertoireZipper, File repertoireSorti, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        String sourceFile = repertoireSorti.getAbsolutePath();
+
+        File outFile = new File(sourceFile);
+
+        // Check if directory exist
+        if (!outFile.exists()) {
+
+            outFile.mkdirs();
+
+        }
+
+        // Initialize zip file reader to prepare extraction
+        ZipFile zipFile = new ZipFile(repertoireZipper.getPath(), password.toCharArray());
+
+        zipFile.extractAll(outFile.getPath());
+
+        // Close the reader
+        zipFile.close();
+
+    }
+
+    public void addFile(File fichier, File zipFile, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        // Test d'existance du repertoire de destination
+        if (zipFile.createNewFile()) {
+
+            System.out.println("Zip file created");
+
+        } else {
+
+            System.out.println("Zip file already exist");
+
+        }
+
+        ZipParameters zipParameters = new ZipParameters();
+
+        zipParameters.setEncryptFiles(true);
+
+        zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
+
+        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+
+        //Ajouter le fichier dans le fichier zipper et association du mot de passe
+        new ZipFile(zipFile.getPath(), password.toCharArray()).addFile(new File(fichier.getPath()), zipParameters);
+
+    }
+
+    public void addRepository(File repository, File zipFile, String password) throws Exception {
+        // TODO Auto-generated method stub
+
+        //Test d'existance du repertoire de destination
+        if (zipFile.createNewFile()) {
+
+            System.out.println("Zip file created");
+
+        } else {
+
+            System.out.println("Zip file already exist");
+
+        }
+
+        ZipParameters zipParameters = new ZipParameters();
+
+        zipParameters.setEncryptFiles(true);
+
+        zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
+
+        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+
+        //Ajouter le repertoire dans le fichier zipper et association du mot de passe
+        new ZipFile(zipFile.getPath(), password.toCharArray()).addFolder(new File(repository.getPath()), zipParameters);
+
+    }
+
+    // Remove extension before zip file
+    public static String removeExtension(String s) {
+
+        String separator = System.getProperty("file.separator");
+
+        String filename;
+
+        // Remove the path upto the filename.
+        /*
+		 * int lastSeparatorIndex = s.lastIndexOf(separator); if (lastSeparatorIndex ==
+		 * -1) { filename = s; } else { filename = s.substring(lastSeparatorIndex + 1);
+		 * }
+         */
+        // Remove the extension.
+        int extensionIndex = s.lastIndexOf(".");
+
+        if (extensionIndex == -1) {
+            return s;
+        }
+
+        return s.substring(0, extensionIndex);
+    }
+
+    // create directory and check if there are many contained files
+    private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
+
+        if (fileToZip.isHidden()) {
+
+            return;
+
+        }
+
+        if (fileToZip.isDirectory()) {
+
+            if (fileName.endsWith("/")) {
+
+                zipOut.putNextEntry(new ZipEntry(fileName));
+
+                zipOut.closeEntry();
+
+            } else {
+
+                zipOut.putNextEntry(new ZipEntry(fileName + "/"));
+
+                zipOut.closeEntry();
+
+            }
+            File[] children = fileToZip.listFiles();
+
+            for (File childFile : children) {
+
+                zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
+
+            }
+
+            return;
+
+        }
+
+        FileInputStream fis = new FileInputStream(fileToZip);
+
+        ZipEntry zipEntry = new ZipEntry(fileName);
+
+        zipOut.putNextEntry(zipEntry);
+
+        byte[] bytes = new byte[1024];
+
+        int length;
+
+        while ((length = fis.read(bytes)) >= 0) {
+
+            zipOut.write(bytes, 0, length);
+
+        }
+
+        fis.close();
+    }
+
+    // Create new file after unzip
+    public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
+
+        File destFile = new File(destinationDir, zipEntry.getName());
+
+        String destDirPath = destinationDir.getCanonicalPath();
+
+        String destFilePath = destFile.getCanonicalPath();
+
+        if (!destFilePath.startsWith(destDirPath + File.separator)) {
+
+            throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
+
+        }
+
+        return destFile;
+    }
+}

--
Gitblit v1.10.0