From 7342b1f3850299264b571d1d63778173c9a30703 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Mon, 20 Feb 2017 10:53:46 +0000 Subject: [PATCH] list in Arbeit --- src/java/de/uhilger/filecms/web/Initialiser.java | 121 ++++++++++++++++++++ web/WEB-INF/web.xml | 4 web/ui/index.html | 11 + src/java/de/uhilger/filecms/api/FileMgr.java | 151 +++++++++++++------------ web/ui/ui.js | 36 ++++++ 5 files changed, 250 insertions(+), 73 deletions(-) diff --git a/src/java/de/uhilger/filecms/api/FileMgr.java b/src/java/de/uhilger/filecms/api/FileMgr.java index 89433b5..a985185 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,18 @@ 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 java.io.File; import java.io.FileWriter; import java.io.IOException; import java.security.Principal; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -35,73 +36,71 @@ 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"; + private FileRef homeFolder; + private FileRef publicFolder; + private FileRef namedHomeFolder; + private FileRef namedPublicFolder; + + 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()); + public List<FileRef> list(String relPath) { + List<FileRef> files = null; - /* - file = new File("."); liefert - /home/ulrich/dev/lib/java/tomcat/tomcat2-8.5.9/bin/. + if(relPath.length() == 0) { + publicFolder = new FileRef(getUserPubDir().getAbsolutePath(), true); + logger.info(publicFolder.getAbsolutePath()); + homeFolder = new FileRef(getUserHomeDir().getAbsolutePath(), true); + logger.info(homeFolder.getAbsolutePath()); - ..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(); + namedPublicFolder = new FileRef(PUB_DIR_NAME, true); + logger.info(namedPublicFolder.getAbsolutePath()); + namedHomeFolder = new FileRef(HOME_DIR_NAME, true); + logger.info(namedHomeFolder.getAbsolutePath()); + files = new ArrayList<FileRef>(); + files.add(namedHomeFolder); + files.add(namedPublicFolder); } else { } - file = new File(file, "daten/"); - ref = new FileRef(file.getAbsolutePath(), file.isDirectory()); - return ref; + + return files; + } + + private FileRef getBase() { + FileRef base = null; + Object o = getServletContext().getAttribute(Initialiser.FILE_BASE); + if(o instanceof FileRef) { + base = (FileRef) o; + } + return base; + } + + private File getUserPubDir() { + File userDir = null; + File daten = new File(getBase().getAbsolutePath()); + Object p = getRequest().getUserPrincipal(); + if(p instanceof Principal) { + userDir = new File(daten, PUB_DIR_PATH + ((Principal) p).getName()); + } + return userDir; + } + + private File getUserHomeDir() { + File userDir = null; + File daten = new File(getBase().getAbsolutePath()); + Object p = getRequest().getUserPrincipal(); + if(p instanceof Principal) { + userDir = new File(daten, HOME_DIR_PATH + ((Principal) p).getName()); + } + return userDir; } public FileRef saveTextFile(String relPath, String fileName, String contents) { @@ -114,20 +113,28 @@ File userDir = new File(daten, "www/" + ((Principal) p).getName()); File saveDir = new File(userDir, relPath); File targetFile = new File(saveDir, fileName); - if(!targetFile.exists()) { + 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); @@ -141,5 +148,5 @@ String path = cfile.getAbsolutePath(); return new File(path.substring(0, path.indexOf(getRequest().getContextPath()))); } - + } diff --git a/src/java/de/uhilger/filecms/web/Initialiser.java b/src/java/de/uhilger/filecms/web/Initialiser.java new file mode 100644 index 0000000..05b2d89 --- /dev/null +++ b/src/java/de/uhilger/filecms/web/Initialiser.java @@ -0,0 +1,121 @@ +/* + Dateiverwaltung - File management in your browser + Copyright (C) 2017 Ulrich Hilger, http://uhilger.de + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + 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.web; + +import de.uhilger.filecms.api.FileMgr; +import de.uhilger.filesystem.FileRef; +import java.io.File; +import java.util.logging.Logger; +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +/** + * + * @author ulrich + */ +public class Initialiser implements ServletContextListener { + + private static final Logger logger = Logger.getLogger(Initialiser.class.getName()); + + + public static final String FILE_BASE = "filebase"; + + // http://localhost:8097/file-cms/rpc/de.uhilger.filecms.api.FileMgr/getBase/JSONNICE + private 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("."); + logger.info(file.getAbsolutePath()); + String path = file.getAbsolutePath(); + path = path.substring(0, path.length() - 1); + file = new File(path); + if(path.endsWith("bin")) { + file = file.getParentFile().getParentFile().getParentFile(); + } else { + + } + file = new File(file, "daten/"); + ref = new FileRef(file.getAbsolutePath(), file.isDirectory()); + logger.info(ref.getAbsolutePath()); + return ref; + } + + /* ----- ServletContextListener Implementation ----- */ + + @Override + public void contextInitialized(ServletContextEvent sce) { + // hier kann etwas initialisiert werden + ServletContext ctx = sce.getServletContext(); + ctx.setAttribute(FILE_BASE, getBase()); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + // hier wird alles wieder aufgeraeumt + ServletContext ctx = sce.getServletContext(); + ctx.removeAttribute(FILE_BASE); + } + +} diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml index 88a01a6..d3d1747 100644 --- a/web/WEB-INF/web.xml +++ b/web/WEB-INF/web.xml @@ -6,6 +6,10 @@ <param-name>fileBase</param-name> <param-value>daten</param-value> </context-param> + <listener> + <description>Der Initialiser setzt globale Variable fuer die Dateiverwaltung</description> + <listener-class>de.uhilger.filecms.web.Initialiser</listener-class> + </listener> <servlet> <servlet-name>TransitRS</servlet-name> <servlet-class>de.uhilger.transit.web.TransitServletRS</servlet-class> diff --git a/web/ui/index.html b/web/ui/index.html index 4ae374a..bcd6555 100644 --- a/web/ui/index.html +++ b/web/ui/index.html @@ -9,6 +9,15 @@ <link rel="stylesheet" type="text/css" href="/jslib/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="/jslib/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="stile.css"> + <script id="tpl-kacheln" type="x-tmpl-mustache"> + {{#files}} + <figure class="figure datei-figure text-center text-warning align-top"> + <i class="fa {{ typeClass }} fa-folder fa-3x"></i> + <figcaption class="figure-caption">{{ fr.absolutePath }}</figcaption> + </figure> + {{/files}} + + </script> </head> <body> <!-- Kopfzeile --> @@ -107,7 +116,7 @@ </div> <!-- Breadcrumb Ende --> <!-- Dateikacheln Start --> - <div class="zentrum-liste"> + <div class="zentrum-liste" id="dateien"> <figure class="figure datei-figure text-center text-warning align-top"> <i class="fa fa-folder fa-3x"></i> <figcaption class="figure-caption">Kurzer Text</figcaption> diff --git a/web/ui/ui.js b/web/ui/ui.js index 6d50cfd..c2a6c42 100644 --- a/web/ui/ui.js +++ b/web/ui/ui.js @@ -11,6 +11,7 @@ }); $('#logout').click(fm_logout); fm_get_login(); + fm_get_list(''); } function fm_menu_neue_textdatei() { @@ -34,6 +35,23 @@ var u = '../../um/pub' + m; fm_get(u, "json", function(resp) { $('#userMenu').text(resp.UserData.firstName); + }); +} + +// http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p= +function fm_get_list(relPath) { + var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPath; + var u = '../svc' + m; + fm_get(u, "json", function(resp) { + var files = new Array(); + for(var i = 0; i < resp.List[0].FileRef.length; i++) { + files.push(new FileRef(resp.List[0].FileRef[i])); + } + var fl = new FileList(files); + var template = $('#tpl-kacheln').html(); + Mustache.parse(template); // optional, speeds up future uses + $('#dateien').empty(); + $('#dateien').html(Mustache.render(template, fl)); }); } @@ -142,3 +160,21 @@ return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}'; } +/* ----- Objekte ----- */ + +function FileList(fl) { + this.files = fl; +} + +function FileRef(obj) { + var self = this; + this.fr = obj; + + this.typeClass = function() { + if(self.fr.isDirectory) { + return 'fa-folder'; + } else { + return 'fa-file'; + } + } +} -- Gitblit v1.9.3