From 1197b57302f1325ffb8b1878a4467cb13d710d74 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Sat, 25 Feb 2017 09:56:34 +0000 Subject: [PATCH] readme hinzugefuegt --- src/java/de/uhilger/filecms/api/FileMgr.java | 218 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 139 insertions(+), 79 deletions(-) diff --git a/src/java/de/uhilger/filecms/api/FileMgr.java b/src/java/de/uhilger/filecms/api/FileMgr.java index 89433b5..d70f816 100644 --- a/src/java/de/uhilger/filecms/api/FileMgr.java +++ b/src/java/de/uhilger/filecms/api/FileMgr.java @@ -1,5 +1,4 @@ /* - Dateiverwaltung - File management in your browser Copyright (C) 2017 Ulrich Hilger, http://uhilger.de @@ -15,16 +14,22 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. - */ package de.uhilger.filecms.api; +import de.uhilger.filecms.web.Initialiser; import de.uhilger.filesystem.FileRef; +import de.uhilger.filesystem.LocalFileSystem; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.StringReader; import java.security.Principal; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -35,111 +40,166 @@ public class FileMgr extends Api { private static final Logger logger = Logger.getLogger(FileMgr.class.getName()); - public static final String FILE_BASE = "fileBase"; + public static final String PUB_DIR_PATH = "www/"; + public static final String HOME_DIR_PATH = "home/"; + public static final String PUB_DIR_NAME = "Oeffentlich"; + public static final String HOME_DIR_NAME = "Persoenlicher Ordner"; public String hallo() { return "Hallo Welt!"; } - // http://localhost:8097/file-cms/rpc/de.uhilger.filecms.api.FileMgr/getBase/JSONNICE - public FileRef getBase() { - FileRef ref = null; - //String fileBase = getServletContext().getInitParameter(FILE_BASE); - // -Dfilecms.base=/pfad/zu/daten - //String fileBase = System.getProperty("filecms.base"); - //File file = new File(fileBase); - //logger.info(file.getAbsolutePath()); - //logger.info(getWebappsDir().getAbsolutePath()); - - /* - file = new File("."); liefert - /home/ulrich/dev/lib/java/tomcat/tomcat2-8.5.9/bin/. - - ..auf der WebBox aber - /home/ulrich/srv/wbx_probe/. - ..weil das Startskript dort liegt - - der Tomcat der WebBox ist unter - sys/jrs/tomcat/bin - - also z.B. - /home/ulrich/srv/wbx_probe/sys/jrs/tomcat/bin - - das Datenverzeichnis ist z.B. auf - /home/ulrich/srv/wbx_probe/daten - - dann ist das Datenverzeichnis unter - ../../../daten - - Der Ausdruck file = new File("."); liefert stets den - Ort von dem aus der Java-Prozess gestartet wurde. - - Die unten folgende Bestimmung des Datenverzeichnisses - ist beschraenkt auf das Datenverzeichnis der WebBox, - entweder relativ zum Startskript der WebBox oder - dem Startskript von Tomcat, wie es aus Netbeans heraus - waehrend der Entwicklung genutzt wird. - - Besser ware vielleicht eine Bestimmung ueber einen - Systemparameter -Dfilecms.base=... wie weiter oben - auskommentiert. Damit liesse sich das file-cms auch - ohne WebBox einsetzen. Allerdings muss dann das - Datenverzeichnis im Start-Skript gebildet werden, - also ausserhalb von Java, wenn es dynamisch aus - einem Pfad relativ zum Start-Skript erzeugt werden - soll. - */ - - File file = new File("."); - String path = file.getAbsolutePath(); - path = path.substring(0, path.length() - 1); - file = new File(path); - if(path.endsWith("bin")) { - file = file.getParentFile().getParentFile().getParentFile(); + public List<FileRef> list(String relPath) { + List<FileRef> files = new ArrayList(); + if(relPath.length() == 0) { + FileRef namedPublicFolder = new FileRef(PUB_DIR_NAME, true); + logger.finer(namedPublicFolder.getAbsolutePath()); + FileRef namedHomeFolder = new FileRef(HOME_DIR_NAME, true); + logger.finer(namedHomeFolder.getAbsolutePath()); + files = new ArrayList(); + files.add(namedHomeFolder); + files.add(namedPublicFolder); } else { - + String path = getTargetDir(relPath).getAbsolutePath(); + logger.fine(path); + LocalFileSystem fs = new LocalFileSystem(); + FileRef[] fileRefs = fs.list(new FileRef(getTargetDir(relPath).getAbsolutePath(), true)); + for(int i = 0; i < fileRefs.length; i++) { + files.add(fileRefs[i]); + logger.finer("added " + fileRefs[i].getAbsolutePath()); + } + } + return files; + } + + public FileRef newFolder(String relPath, String folderName) { + logger.finer(relPath); + String targetPath = null; + if(relPath.startsWith(PUB_DIR_NAME)) { + targetPath = PUB_DIR_PATH + getUserName() + "/" + relPath.substring(PUB_DIR_NAME.length()) + "/" + folderName; + } else if(relPath.startsWith(HOME_DIR_NAME)) { + targetPath = HOME_DIR_PATH + getUserName() + "/" + relPath.substring(HOME_DIR_NAME.length()) + "/" + folderName; + } else { + // kann eigentlich nicht sein.. } - file = new File(file, "daten/"); - ref = new FileRef(file.getAbsolutePath(), file.isDirectory()); - return ref; + logger.finer(targetPath); + File targetDir = new File(getBase().getAbsolutePath(), targetPath); + targetDir.mkdirs(); + return new FileRef(targetDir.getAbsolutePath(), true); + } + + public String getCode(String relPath, String fileName) { + String code = null; + + Object p = getRequest().getUserPrincipal(); + if(p instanceof Principal) { + FileReader reader = null; + try { + File targetFile = new File(getTargetDir(relPath), fileName); + reader = new FileReader(targetFile); + StringBuffer buf = new StringBuffer(); + char[] readBuffer = new char[1024]; + int charsRead = reader.read(readBuffer); + while(charsRead > -1) { + buf.append(readBuffer, 0, charsRead); + charsRead = reader.read(readBuffer); + } + code = buf.toString(); + } catch (FileNotFoundException ex) { + Logger.getLogger(FileMgr.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException ex) { + Logger.getLogger(FileMgr.class.getName()).log(Level.SEVERE, null, ex); + } finally { + try { + reader.close(); + } catch (IOException ex) { + Logger.getLogger(FileMgr.class.getName()).log(Level.SEVERE, null, ex); + } + } + + } + + return code; } public FileRef saveTextFile(String relPath, String fileName, String contents) { FileRef savedFile = null; try { FileRef datenRef = getBase(); - File daten = new File(datenRef.getAbsolutePath()); + //File daten = new File(datenRef.getAbsolutePath()); Object p = getRequest().getUserPrincipal(); if(p instanceof Principal) { - File userDir = new File(daten, "www/" + ((Principal) p).getName()); - File saveDir = new File(userDir, relPath); - File targetFile = new File(saveDir, fileName); - if(!targetFile.exists()) { + File targetFile = new File(getTargetDir(relPath), fileName); + if(targetFile.exists()) { + /* + muss delete() sein? + pruefen: ueberschreibt der FileWriter den alteen Inhalt oder + entsteht eine unerwuenschte Mischung aus altem und neuem + Inhalt? + */ + targetFile.delete(); + } else { targetFile.getParentFile().mkdirs(); - targetFile.createNewFile(); - FileWriter w = new FileWriter(targetFile); - w.write(contents); - w.flush(); - w.close(); - savedFile = new FileRef( - targetFile.getAbsolutePath(), - targetFile.isDirectory(), - targetFile.isHidden(), - targetFile.lastModified(), - targetFile.length()); } + targetFile.createNewFile(); + FileWriter w = new FileWriter(targetFile); + w.write(contents); + w.flush(); + w.close(); + savedFile = new FileRef( + targetFile.getAbsolutePath(), + targetFile.isDirectory(), + targetFile.isHidden(), + targetFile.lastModified(), + targetFile.length()); } } catch (IOException ex) { logger.log(Level.SEVERE, null, ex); } return savedFile; } + + /* ---- Hilfsfunktionen ---- */ + private File getTargetDir(String relPath) { + logger.finer(relPath); + String targetPath = null; + if(relPath.startsWith(PUB_DIR_NAME)) { + targetPath = PUB_DIR_PATH + getUserName() + "/" + relPath.substring(PUB_DIR_NAME.length()); + } else if(relPath.startsWith(HOME_DIR_NAME)) { + targetPath = HOME_DIR_PATH + getUserName() + "/" + relPath.substring(HOME_DIR_NAME.length()); + } else { + // kann eigentlich nicht sein.. + } + logger.finer(targetPath); + File targetDir = new File(getBase().getAbsolutePath(), targetPath); + return targetDir; + } + private FileRef getBase() { + FileRef base = null; + Object o = getServletContext().getAttribute(Initialiser.FILE_BASE); + if(o instanceof FileRef) { + base = (FileRef) o; + } + return base; + } + + private String getUserName() { + String userName = null; + Object p = getRequest().getUserPrincipal(); + if(p instanceof Principal) { + userName = ((Principal) p).getName(); + } + return userName; + } + + /* private File getWebappsDir() { File cfile = new File(this.getClass().getResource( this.getClass().getSimpleName() + ".class").getFile()); String path = cfile.getAbsolutePath(); return new File(path.substring(0, path.indexOf(getRequest().getContextPath()))); } - + */ + } -- Gitblit v1.9.3