From 26115ecfe17ecd438a0aca7686bac1670709905e Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Thu, 05 Apr 2018 18:34:49 +0000
Subject: [PATCH] collect aufgenommen

---
 src/java/de/uhilger/filecms/api/FileMgr.java |  114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 112 insertions(+), 2 deletions(-)

diff --git a/src/java/de/uhilger/filecms/api/FileMgr.java b/src/java/de/uhilger/filecms/api/FileMgr.java
index 563734f..f96d2f0 100644
--- a/src/java/de/uhilger/filecms/api/FileMgr.java
+++ b/src/java/de/uhilger/filecms/api/FileMgr.java
@@ -22,7 +22,12 @@
 import de.uhilger.filecms.pub.AbstractComparator;
 import de.uhilger.filecms.pub.FileNameComparator;
 import de.uhilger.wbx.Bild;
+import de.uhilger.wbx.WbxUtils;
+import static de.uhilger.wbx.WbxUtils.EMPTY_STRING;
+import static de.uhilger.wbx.WbxUtils.WBX_FILE_BASE;
+import de.uhilger.wbx.data.Inhalt;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
@@ -33,13 +38,19 @@
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.zip.Adler32;
+import java.util.zip.CheckedOutputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+import javax.servlet.http.HttpServletRequest;
 import net.coobird.thumbnailator.Thumbnails;
 import org.apache.commons.io.FileUtils;
 
@@ -127,7 +138,9 @@
             }
             logger.fine(fname);
             if(!fname.contains("WEB-INF") && !fname.contains("META-INF")) {
-              FileRef ref = new FileRef(fname, fileArray[i].isDirectory());
+              long fLen = fileArray[i].length();
+              long lastMod = fileArray[i].lastModified();
+              FileRef ref = new FileRef(fname, fileArray[i].isDirectory(), fileArray[i].isHidden(), lastMod, fLen);
               ref.setMimetype(bild.getMimeType(fileArray[i]));
               files.add(ref);
             }
@@ -137,7 +150,15 @@
     }
     return files;
   }
-  
+
+  public List<Inhalt> collect(String relativePath, int maxTiefe, int maxAnzahl, int len) {
+    
+    WbxUtils wu = new WbxUtils();
+    HttpServletRequest req = getRequest();
+    String requestUrl = req.getRequestURL().toString();
+    String contextPath = req.getContextPath();
+    return wu.collectFiles(requestUrl, contextPath, relativePath, maxTiefe, maxAnzahl, len);
+  }
   
   public FileRef newFolder(String relPath, String folderName) {
     if (!relPath.startsWith(".")) {
@@ -445,6 +466,9 @@
       return "Pfad micht erlaubt.";
     }
   }
+  
+  /* --------- ZIP entpacken ---------------- */
+  
   public String extractZipfile(String relPath, String filename) {
     String result = null;
     if (!relPath.startsWith(".")) {    
@@ -509,6 +533,92 @@
 		}
 	}
 
+  /* ------------- Ornder als ZIP packen --------------- */
+  
+  public String packFolder(String relPath) {
+    if (!relPath.startsWith(".")) {    
+      try {
+        File targetDir = getTargetDir(relPath);
+        File parentDir = targetDir.getParentFile();
+        StringBuffer fname = new StringBuffer();
+        fname.append(targetDir.getName());
+        fname.append(".zip");
+        File archiveFile = new File(parentDir, fname.toString());
+        FileRef folderToPack = new FileRef(targetDir.getAbsolutePath());
+        FileRef archive = new FileRef(archiveFile.getAbsolutePath());
+        pack(folderToPack, archive);
+        return "ok";
+      } catch(Exception ex) {
+        String result = ex.getLocalizedMessage();
+        logger.log(Level.SEVERE, result, ex);
+        return result;
+      }
+    } else {
+      return "Falsche relative Pfadangabe";
+    }
+  }
+  
+	/**
+	 * pack the contents of a given folder into a new ZIP compressed archive
+	 * @param folder  the folder to pack
+	 * @param archive  the archive to create from the given files
+	 * @throws Exception
+	 */
+	private boolean pack(FileRef folder, FileRef archive) throws Exception {
+		File file = new File(archive.getAbsolutePath());
+		FileOutputStream fos = new FileOutputStream(file);
+		CheckedOutputStream checksum = new CheckedOutputStream(fos, new Adler32());
+		ZipOutputStream zos = new ZipOutputStream(checksum);
+		pack(zos, folder.getAbsolutePath(), "");
+		zos.flush();
+		zos.finish();
+		zos.close();
+		fos.flush();
+		fos.close();
+		return true;
+	}
+
+	/**
+	 * go through the given file structure recursively
+	 * @param zipFile  the ZIP file to write to
+	 * @param srcDir  the directory to pack during this cycle
+	 * @param subDir  the subdirectory to append to names of file entries inside the archive
+	 * @throws IOException
+	 */
+	private void pack(ZipOutputStream zipFile, String srcDir, String subDir) throws IOException {
+		File[] files = new File(srcDir).listFiles();
+		for(int i = 0; i < files.length; i++) {
+			if(files[i].isDirectory()) {
+				pack(zipFile, files[i].getAbsolutePath(), subDir + File.separator + files[i].getName());
+			}
+			else {
+				packFile(zipFile, subDir, files[i]);
+			}
+		}
+	}
+
+	/**
+	 * pack a given file
+	 * @param zipFile  the ZIP archive to pack to
+	 * @param dir  the directory name to append to name of file entry inside archive
+	 * @param file  the file to pack
+	 * @throws IOException
+	 */
+	private void packFile(ZipOutputStream zipFile, String dir, File file) throws IOException
+	{
+		FileInputStream fileinputstream = new FileInputStream(file);
+		byte buf[] = new byte[fileinputstream.available()];
+		fileinputstream.read(buf);
+		String dirWithSlashes = dir.replace('\\', '/');
+		//System.out.println("zipping " + dirWithSlashes + "/" + file.getName());
+		ZipEntry ze = new ZipEntry(dirWithSlashes + "/" + file.getName());
+		ze.setMethod(ZipEntry.DEFLATED);
+		zipFile.putNextEntry(ze);
+		zipFile.write(buf, 0, buf.length);
+		zipFile.closeEntry();
+		fileinputstream.close();
+	}
+
   
 
   /* ---- Hilfsfunktionen ---- */

--
Gitblit v1.9.3