From cc154b2eb849be9da34f2eca21fa128ae26b53ff Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 15 Jan 2024 17:24:37 +0000 Subject: [PATCH] Relevante Teile von FileManager in Klasse Lister und Mover verlegt, innere Klasse DirList ausgelagert --- src/de/uhilger/httpserver/cm/FileManager.java | 372 ++++------------------------------------------------ 1 files changed, 30 insertions(+), 342 deletions(-) diff --git a/src/de/uhilger/httpserver/cm/FileManager.java b/src/de/uhilger/httpserver/cm/FileManager.java index ea70988..5b0c5a2 100644 --- a/src/de/uhilger/httpserver/cm/FileManager.java +++ b/src/de/uhilger/httpserver/cm/FileManager.java @@ -17,6 +17,10 @@ */ package de.uhilger.httpserver.cm; +import de.uhilger.httpserver.cm.actor.Zipper; +import de.uhilger.httpserver.cm.actor.Eraser; +import de.uhilger.httpserver.cm.actor.Unzipper; +import de.uhilger.httpserver.cm.actor.Renamer; import com.google.gson.Gson; import com.sun.net.httpserver.Authenticator; import com.sun.net.httpserver.Headers; @@ -24,6 +28,8 @@ import de.uhilger.httpserver.base.HttpResponder; import de.uhilger.httpserver.base.HttpHelper; import de.uhilger.httpserver.base.handler.FileHandler; +import de.uhilger.httpserver.cm.actor.Lister; +import de.uhilger.httpserver.cm.actor.Mover; import de.uhilger.httpserver.image.Datei; import de.uhilger.httpserver.image.ImageActor; import de.uhilger.httpserver.image.ImageThread; @@ -96,7 +102,7 @@ * @author Ulrich Hilger * @version 1, 13. Mai 2021 */ -public class FileManager extends FileHandler implements ThreadListener { +public class FileManager extends FileHandler { /* private static final String[] specialChars = {new String("\u00c4"), new String("\u00d6"), @@ -124,18 +130,12 @@ public static final String ATTR_ROLE = "role"; - private final List waitingThreads; - private final int maxThreads; - private int threadCount; //private String role; //public FileManager(String absoluteDirectoryPathAndName, String role, String ctx) { public FileManager() { //super(absoluteDirectoryPathAndName, ctx); //super(absoluteDirectoryPathAndName); - waitingThreads = new ArrayList(); - maxThreads = 4; - threadCount = 0; //this.role = role; } @@ -152,7 +152,23 @@ HttpHelper helper = new HttpHelper(); switch (method) { case HttpHelper.HTTP_GET: - liste(e, helper); + String path = e.getRequestURI().toString(); + if (path.endsWith(STR_SLASH)) { + String json = new Lister().liste(helper.getFileName(e), + e.getHttpContext().getPath(), + e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), + path); + if(null != json) { + HttpResponder r = new HttpResponder(); + r.antwortSenden(e, SC_OK, json); + } else { + emptyListResponse(e); + } + } else { + new Lister().b64Action(helper.getFileName(e), + e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString()); + super.handle(e); + } break; case HttpHelper.HTTP_PUT: put(e, helper); @@ -188,13 +204,15 @@ break; case P_DUPLICATE: if(Boolean.parseBoolean(params[1])) { - String neuerDateiName = duplizieren(exchange, helper); + String neuerDateiName = new Mover().duplizieren( + exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), + helper.getFileName(exchange)); //logger.fine("neuer Name: " + neuerDateiName); standardHeaderUndAntwort(exchange, SC_OK, neuerDateiName); } break; case P_RENAME: - String neuerDateiName = umbenennen(exchange, helper, params[1]); + String neuerDateiName = new Renamer().umbenennen(exchange, helper, params[1]); //logger.fine("neuer Name: " + neuerDateiName); standardHeaderUndAntwort(exchange, SC_OK, neuerDateiName); break; @@ -224,155 +242,6 @@ } } - public class DirList { - private String pfad; - private List<Datei> dateien; - - public String getPfad() { - return pfad; - } - - public void setPfad(String pfad) { - this.pfad = pfad; - } - - public List<Datei> getDateien() { - return dateien; - } - - public void setDateien(List<Datei> dateien) { - this.dateien = dateien; - } - - - } - - private void liste(HttpExchange e, HttpHelper helper) throws IOException { - String path = e.getRequestURI().toString(); - //logger.fine(path); - String fName = helper.getFileName(e); - String dirListPath = e.getHttpContext().getPath() + fName; - if (path.endsWith(STR_SLASH)) { - //logger.fine("fName: " + fName); - File dir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fName); - //logger.fine("absPath: " + dir.getAbsolutePath()); - File[] files = dir.listFiles(new ImageFileFilter()); - if(files != null && files.length > 0) { - Arrays.sort(files); - ArrayList liste = new ArrayList(); - for (File file : files) { - Datei datei = new Datei(); - String dateiName = file.getName(); - datei.setName(dateiName); - if (file.isDirectory()) { - datei.setTyp(Datei.TYP_ORDNER); - } else { - datei.setTyp(Datei.TYP_DATEI); - } - //datei.setPfad(e.getHttpContext().getPath() + fName); - String lowerName = dateiName.toLowerCase(); - if (lowerName.endsWith(ImageActor.JPEG) - || lowerName.endsWith(ImageActor.JPG) - || lowerName.endsWith(ImageActor.PNG)) { - datei.setBild(true); - String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT)); - String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT)); - datei.setMiniurl(ohneExt + ImageActor.TN + ext); - buildImgSrc(file, datei, ohneExt, ext); - } - liste.add(datei); - } - while(threadCount > 0) { - try { - Thread.sleep(50); - } catch (InterruptedException ex) { - Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - if(liste.size() > 0) { - DirList list = new DirList(); - list.setPfad(dirListPath); - list.setDateien(liste); - Gson gson = new Gson(); - //String json = gson.toJson(liste); - String json = gson.toJson(list); - //byte[] bytes = json.getBytes(); - //logger.fine("json: '" + json + "'"); - HttpResponder r = new HttpResponder(); - r.antwortSenden(e, SC_OK, json); - } else { - emptyListResponse(e); - } - } else { - emptyListResponse(e); - } - } else { - String lowerName = fName.toLowerCase(); - if(lowerName.contains(ImageActor.B64)) { - ImageActor actor = new ImageActor(); - String fromName = fName.replace(ImageActor.B64, ""); - File fromFile = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fromName); - File toFile = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fName); - //logger.fine("from " + fromFile.getAbsolutePath() + ", to " + toFile.getAbsolutePath()); - if(!toFile.exists()) { - actor.b64Image(fromFile, toFile); - } - super.handle(e); - } else { - super.handle(e); - } - } - } - - // data:[<mime type>][;charset=<Zeichensatz>][;base64],<Daten> - /* - [So. Juni 13 13:23:32 MESZ 2021] FEIN: - file: /home/ulrich/helix-files/bild-test/10419903-14-2-1920-r.jpg, - relname: bild-test/10419903-14-2-1920-r.jpg, ohneExt: 10419903-14-2-1920-r, ext: .jpg (de.uhilger.helix.FileManager buildImgSrc) - - */ - private void buildImgSrc(File file, Datei datei, String ohneExt, String ext) throws IOException { - //logger.fine("file: " + file.getAbsolutePath() + ", ohneExt: " + ohneExt + ", ext: " + ext); - File dir = file.getParentFile(); - String newRelName = ohneExt + ImageActor.TN + ImageActor.B64 + ext; - File b64File = new File(dir, newRelName); - //logger.fine("b64File: " + b64File.getAbsolutePath()); - if(!b64File.exists()) { - //BildErzeuger be = new BildErzeuger(); - //be.bildErzeugen(dir, newRelName, BildErzeuger.TN, 120, b64File); - ImageThread it = new ImageThread(dir, newRelName, ImageActor.TN, 120, b64File, datei, ext); - it.addListener(this); - if(threadCount < maxThreads) { - ++threadCount; - //logger.fine("Thread started, threadCount: " + threadCount); - it.start(); - } else { - waitingThreads.add(it); - //logger.fine("Thread added to wait queue."); - } - } else { - ImageActor be = new ImageActor(); - be.setImgSrc(datei, ext, b64File); - } - } - - @Override - public void finished() { - --threadCount; - //logger.fine("Thread finished, threadCound now: " + threadCount); - if (threadCount < maxThreads) { - if (waitingThreads.size() > 0) { - Object o = waitingThreads.get(0); - if (o instanceof ImageThread) { - waitingThreads.remove(o); - ImageThread it = (ImageThread) o; - ++threadCount; - //logger.fine("Thread started from wait queue, threadCount now: " + threadCount); - it.start(); - } - } - } - } private void emptyListResponse(HttpExchange e) throws IOException { HttpResponder r = new HttpResponder(); @@ -458,51 +327,14 @@ private void copyOrMove(HttpExchange exchange, String quelle, String ziel, int op) throws IOException { //logger.fine("quelle: " + quelle + ", ziel: " + ziel); String[] dateiNamen = dateiliste(exchange); - copyOrMoveFiles(quelle, ziel, dateiNamen, op, exchange); + new Mover().copyOrMoveFiles(quelle, ziel, dateiNamen, op, exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString()); standardHeaderUndAntwort(exchange, SC_OK, "Dateien verarbeitet."); - } - - private String copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, int operation, HttpExchange e) throws IOException { - String result = null; - File srcDir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fromPath); - File targetDir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), toPath); - for (String fileName : fileNames) { - File srcFile = new File(srcDir, fileName); - //logger.fine("srcFile: " + srcFile); - if (srcFile.isDirectory()) { - //logger.fine("srcFile is directory."); - OrdnerBearbeiter bearbeiter = new OrdnerBearbeiter(); - bearbeiter.setTargetDir(targetDir.toPath()); - bearbeiter.setOperation(operation); - Files.walkFileTree(srcFile.toPath(), bearbeiter); - } else { - Path source = srcFile.toPath(); - File destFile = targetDir.toPath().resolve(source.getFileName()).toFile(); - if (destFile.exists()) { - FileTransporter trans = new FileTransporter(); - destFile = trans.getNewFileName(destFile); - } - if (operation == OP_MOVE) { - String fname = srcFile.getName().toLowerCase(); - if (fname.endsWith(ImageActor.JPEG) - || fname.endsWith(ImageActor.JPG) - || fname.endsWith(ImageActor.PNG)) { - moveImgFilesToDirectory(srcFile, srcDir, targetDir, false); - } else { - Files.move(source, destFile.toPath()); - } - } else { - Files.copy(source, destFile.toPath()); - } - } - } - return result; } private void loeschen(HttpExchange exchange, HttpHelper helper) throws IOException { String[] dateiNamen = dateiliste(exchange); String relPfad = helper.getFileName(exchange); - deleteFiles(relPfad, Arrays.asList(dateiNamen), exchange); + new Eraser().deleteFiles(relPfad, Arrays.asList(dateiNamen), exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString()); standardHeaderUndAntwort(exchange, SC_OK, "Dateien geloescht."); } @@ -513,154 +345,10 @@ return gson.fromJson(body, String[].class); } - public String duplizieren(HttpExchange exchange, HttpHelper helper) throws IOException { - String relPfad = helper.getFileName(exchange); - File srcFile = new File(exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), relPfad); - String fnameext = srcFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - String fname = fnameext.substring(0, dotpos); - String ext = fnameext.substring(dotpos); - File srcDir = srcFile.getParentFile(); - File destFile = new File(srcDir, fname + "-Kopie" + ext); - int i = 1; - while (destFile.exists()) { - destFile = new File(srcDir, fname + "-Kopie-" + Integer.toString(++i) + ext); - } - Files.copy(srcFile.toPath(), destFile.toPath()); - return destFile.getName(); - } - public String umbenennen(HttpExchange exchange, HttpHelper helper, String neuerName) throws IOException { - File neueDatei; - String relPfad = helper.getFileName(exchange); - File file = new File(exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), relPfad); - String fname = file.getName().toLowerCase(); - if(fname.endsWith(ImageActor.JPEG) || fname.endsWith(ImageActor.JPG) || fname.endsWith(ImageActor.PNG)) { - neueDatei = renameImgFiles(file.getParentFile(), file, neuerName); - } else { - neueDatei = new File(file.getParentFile(), neuerName); - file.renameTo(neueDatei); - } - return neueDatei.getName(); - } - - public File renameImgFiles(File targetDir, File targetFile, String newName) throws IOException { - String alt; - String neu; - File neueDatei = targetFile; - - int newdotpos = newName.lastIndexOf(STR_DOT); - String newfname = newName.substring(0, newdotpos); - String newext = newName.substring(newdotpos); - //logger.fine("newfname: " + newfname + ", newext: " + newext); - - String fnameext = targetFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - String fname = fnameext.substring(0, dotpos); - String ext = fnameext.substring(dotpos); - //logger.fine("fname: " + fname + ", ext: " + ext); - - DirectoryStream<Path> stream = Files.newDirectoryStream(targetDir.toPath(), fname + "*" + ext); //"*.{txt,doc,pdf,ppt}" - for (Path path : stream) { - //logger.fine(path.getFileName().toString()); - alt = path.getFileName().toString(); - //logger.fine("alt: " + alt); - if(alt.contains(ImageActor.TN)) { - neu = newfname + ImageActor.TN + newext; - } else if (alt.contains(ImageActor.KL)) { - neu = newfname + ImageActor.KL + newext; - } else if(alt.contains(ImageActor.GR)) { - neu = newfname + ImageActor.GR + newext; - } else if(alt.contains(ImageActor.MT)) { - neu = newfname + ImageActor.MT + newext; - } else if(alt.contains(ImageActor.SM)) { - neu = newfname + ImageActor.SM + newext; - } else { - neu = newName; - } - neueDatei = new File(targetDir, neu); - path.toFile().renameTo(neueDatei); - } - stream.close(); - return neueDatei; - } - - - private String deleteFiles(String relPath, List<String> fileNames, HttpExchange e) { - String result = null; - try { - //logger.fine(fileNames.toString()); - if (!relPath.startsWith(STR_DOT)) { - File targetDir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), relPath); // getTargetDir(relPath); - //logger.fine("targetDir: " + targetDir); - for (String fileName : fileNames) { - File targetFile = new File(targetDir, fileName); - //logger.fine(targetFile.getAbsolutePath()); - if (targetFile.isDirectory()) { - OrdnerBearbeiter bearbeiter = new OrdnerBearbeiter(); - bearbeiter.setOperation(OP_DELETE); - Files.walkFileTree(targetFile.toPath(), bearbeiter); - } else { - /* - Wenn targetFile mit jpg, jpeg oder png endet, - muss eine Unterfunktion eine Liste aller Dateien bilden, - die so heissen, also z.B. alle [Dateiname]*.jpg - */ - String fname = targetFile.getName().toLowerCase(); - if (fname.endsWith(ImageActor.JPEG) - || fname.endsWith(ImageActor.JPG) - || fname.endsWith(ImageActor.PNG)) { - deleteImgFiles(targetDir, targetFile); - } else { - targetFile.delete(); - } - } - } - result = "deleted"; - } - } catch (Throwable ex) { - //logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); - } - return result; - } - - private void deleteImgFiles(File targetDir, File targetFile) throws IOException { - String fnameext = targetFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - String fname = fnameext.substring(0, dotpos); - String ext = fnameext.substring(dotpos); - //logger.fine("fname: " + fname + ", ext: " + ext); - DirectoryStream<Path> stream = Files.newDirectoryStream(targetDir.toPath(), fname + "*" + ext); //"*.{txt,doc,pdf,ppt}" - for (Path path : stream) { - //logger.fine(path.getFileName().toString()); - Files.delete(path); - } - stream.close(); - } - - private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, boolean createDestDir) throws IOException { - String fnameext = srcFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - 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())); - } - stream.close(); - } - private void standardHeaderUndAntwort(HttpExchange exchange, int status, String antwort) throws IOException { Headers resHeaders = exchange.getResponseHeaders(); resHeaders.add(CONTENT_TYPE, HttpHelper.CT_TEXT_HTML); new HttpResponder().antwortSenden(exchange, status, antwort); } - - - - } -- Gitblit v1.9.3