From 2121ccd4015d7c0dc81485fcaf8655bde28ea396 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Mon, 20 Feb 2017 15:35:43 +0000 Subject: [PATCH] Dateien bearbeiten in Arbeit --- src/java/de/uhilger/filecms/web/Initialiser.java | 4 web/WEB-INF/web.xml | 9 + web/ui/index.html | 4 src/java/logging.properties | 67 +++++++++++++ src/java/de/uhilger/filecms/web/HomeFilter.java | 98 +++++++++++++++++++ src/java/de/uhilger/filecms/api/FileMgr.java | 49 +++++++-- web/ui/ui.js | 68 ++++++++++-- 7 files changed, 269 insertions(+), 30 deletions(-) diff --git a/src/java/de/uhilger/filecms/api/FileMgr.java b/src/java/de/uhilger/filecms/api/FileMgr.java index 55fead9..20277a1 100644 --- a/src/java/de/uhilger/filecms/api/FileMgr.java +++ b/src/java/de/uhilger/filecms/api/FileMgr.java @@ -26,7 +26,6 @@ import java.io.IOException; import java.security.Principal; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -43,10 +42,10 @@ 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; + //private FileRef homeFolder; + //private FileRef publicFolder; + //private FileRef namedHomeFolder; + //private FileRef namedPublicFolder; public String hallo() { @@ -63,15 +62,16 @@ homeFolder = new FileRef(getUserHomeDir().getAbsolutePath(), true); logger.info(homeFolder.getAbsolutePath()); */ - namedPublicFolder = new FileRef(PUB_DIR_NAME, true); + FileRef namedPublicFolder = new FileRef(PUB_DIR_NAME, true); logger.finer(namedPublicFolder.getAbsolutePath()); - namedHomeFolder = new FileRef(HOME_DIR_NAME, true); + FileRef namedHomeFolder = new FileRef(HOME_DIR_NAME, true); logger.finer(namedHomeFolder.getAbsolutePath()); - files = new ArrayList<FileRef>(); + files = new ArrayList(); files.add(namedHomeFolder); files.add(namedPublicFolder); } else { - logger.info(relPath); + /* + logger.finer(relPath); String targetPath = null; if(relPath.startsWith(PUB_DIR_NAME)) { targetPath = PUB_DIR_PATH + getUserName() + "/" + relPath.substring(PUB_DIR_NAME.length()); @@ -80,18 +80,37 @@ } else { // kann eigentlich nicht sein.. } - logger.info(targetPath); + logger.finer(targetPath); File targetDir = new File(getBase().getAbsolutePath(), targetPath); + */ LocalFileSystem fs = new LocalFileSystem(); - FileRef[] fileRefs = fs.list(new FileRef(targetDir.getAbsolutePath(), true)); + String path = getTargetDir(relPath).getAbsolutePath(); + logger.fine(path); + 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()); } //files = Arrays.asList(fileRefs); } return files; + } + + 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() { @@ -103,6 +122,7 @@ return base; } + /* private File getUserPubDir() { File userDir = null; File daten = new File(getBase().getAbsolutePath()); @@ -112,6 +132,7 @@ } return userDir; } + */ private String getUserName() { String userName = null; @@ -122,6 +143,7 @@ return userName; } + /* private File getUserHomeDir() { File userDir = null; File daten = new File(getBase().getAbsolutePath()); @@ -131,6 +153,7 @@ } return userDir; } + */ public FileRef saveTextFile(String relPath, String fileName, String contents) { FileRef savedFile = null; @@ -139,9 +162,11 @@ 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); + */ + File targetFile = new File(getTargetDir(relPath), fileName); if(targetFile.exists()) { /* muss delete() sein? diff --git a/src/java/de/uhilger/filecms/web/HomeFilter.java b/src/java/de/uhilger/filecms/web/HomeFilter.java new file mode 100644 index 0000000..262c2ff --- /dev/null +++ b/src/java/de/uhilger/filecms/web/HomeFilter.java @@ -0,0 +1,98 @@ +/* + 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 java.io.IOException; +import java.util.logging.Logger; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +/** + * Filter fuer das home-Verzeichnis + * + * Nur Inhalte des angemeldeten Benutzers werden ausgegeben + * + * @author Copyright (c) Ulrich Hilger, http://uhilger.de + * @author Published under the terms and conditions of the + * <a href="http://www.gnu.org/licenses/agpl-3.0" target="_blank">GNU Affero + * General Public License</a> + * + * @version 2, February 1, 2017 + */ +public class HomeFilter implements Filter { + + private static final Logger logger = Logger.getLogger(HomeFilter.class.getName()); + + private static final String ZIEL = "../api?c=de.uhilger.um.api.UserMgr&m="; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // ... + } + + /* + + Dieser Filter laesst nur Anfragen durch, die in username + denselben Eintrag haben wie der Name des angemeldeten Benutzers. + + http]://example.com/file-cms/home/username/test.txt + + + hier wird ein URL wie z.B. + http]://example.com/um/svc/testmethode + umgesetzt auf + http]://example.com/um/api?c=de.uhilger.um.api.UserMgr&m=testmethode + + der Teil 'svc' ist im Filter Mapping des Deployment Descriptor + deklariert. Der Teil 'api' zeigt mit Hilfe eines Servlet + Mappings im Deployment Descriptor auf das Transit-Servlet. + + der statische Teil des Ziel-URL ist hier hart kodiert, das kann man + freilich je nach Bedarf noch dynamisch gestalten + */ + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + + if(request instanceof HttpServletRequest) { + HttpServletRequest hr = (HttpServletRequest) request; + logger.info("requestURL: " + hr.getRequestURL().toString()); + chain.doFilter(request, response); + } + /* + if(request instanceof HttpServletRequest) { + HttpServletRequest hr = (HttpServletRequest) request; + String servletPath = hr.getServletPath(); + String[] path = servletPath.split("/"); + request.getRequestDispatcher(ZIEL + path[2]).forward(request, response); + } + */ + } + + @Override + public void destroy() { + // ... + } + +} diff --git a/src/java/de/uhilger/filecms/web/Initialiser.java b/src/java/de/uhilger/filecms/web/Initialiser.java index 05b2d89..9fe110c 100644 --- a/src/java/de/uhilger/filecms/web/Initialiser.java +++ b/src/java/de/uhilger/filecms/web/Initialiser.java @@ -87,7 +87,7 @@ */ File file = new File("."); - logger.info(file.getAbsolutePath()); + logger.finer(file.getAbsolutePath()); String path = file.getAbsolutePath(); path = path.substring(0, path.length() - 1); file = new File(path); @@ -98,7 +98,7 @@ } file = new File(file, "daten/"); ref = new FileRef(file.getAbsolutePath(), file.isDirectory()); - logger.info(ref.getAbsolutePath()); + logger.finer(ref.getAbsolutePath()); return ref; } diff --git a/src/java/logging.properties b/src/java/logging.properties new file mode 100644 index 0000000..bddad56 --- /dev/null +++ b/src/java/logging.properties @@ -0,0 +1,67 @@ +############################################################ +# Default Logging Configuration File +# +# You can use a different file by specifying a filename +# with the java.util.logging.config.file system property. +# For example java -Djava.util.logging.config.file=myfile +############################################################ + +############################################################ +# Global properties +############################################################ + +# "handlers" specifies a comma separated list of log Handler +# classes. These handlers will be installed during VM startup. +# Note that these classes must be on the system classpath. +# By default we only configure a ConsoleHandler, which will only +# show messages at the INFO and above levels. +# handlers= java.util.logging.ConsoleHandler + +# To also add the FileHandler, use the following line instead. +handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler + +# Default global logging level. +# This specifies which kinds of events are logged across +# all loggers. For any given facility this global level +# can be overriden by a facility specific level +# Note that the ConsoleHandler also has a separate level +# setting to limit messages printed to the console. +# .level= FINE +.level = NONE + +############################################################ +# Handler specific properties. +# Describes specific configuration info for Handlers. +############################################################ + +# default file output is in user's home directory. +# java.util.logging.FileHandler.pattern = %h/java%u.log +# java.util.logging.FileHandler.pattern = /media/extmirror/tomcat747/logs/tv_%u.log +java.util.logging.FileHandler.pattern = ${catalina.base}/logs/file-cms_%u.log +java.util.logging.FileHandler.limit = 50000 +# java.util.logging.FileHandler.count = 1 +java.util.logging.FileHandler.count = 2 +# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.level = OFF + +# Limit the message that are printed on the console to INFO and above. +# java.util.logging.ConsoleHandler.level = INFO +java.util.logging.ConsoleHandler.level = FINER +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter + +# Example to customize the SimpleFormatter output format +# to print one-line log message like this: +# <level>: <log message> [<date/time>] +# +# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n + +############################################################ +# Facility specific properties. +# Provides extra control for each logger. +############################################################ + +# For example, set the com.xyz.foo logger to only log SEVERE +# messages: +# com.xyz.foo.level = SEVERE +de.uhilger.filecms.level = FINER diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml index d3d1747..2a121af 100644 --- a/web/WEB-INF/web.xml +++ b/web/WEB-INF/web.xml @@ -6,6 +6,15 @@ <param-name>fileBase</param-name> <param-value>daten</param-value> </context-param> + <filter> + <description>Inhalte ausgeben</description> + <filter-name>HomeFilter</filter-name> + <filter-class>de.uhilger.filecms.web.HomeFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>HomeFilter</filter-name> + <url-pattern>/home/*</url-pattern> + </filter-mapping> <listener> <description>Der Initialiser setzt globale Variable fuer die Dateiverwaltung</description> <listener-class>de.uhilger.filecms.web.Initialiser</listener-class> diff --git a/web/ui/index.html b/web/ui/index.html index fc650ef..be73900 100644 --- a/web/ui/index.html +++ b/web/ui/index.html @@ -13,7 +13,7 @@ {{#files}} <figure class="figure datei-figure text-center text-warning align-top"> <i class="fa {{ typeClass }} fa-3x"></i> - <figcaption class="figure-caption">{{ fr.absolutePath }}</figcaption> + <figcaption class="figure-caption">{{ fileName }}</figcaption> </figure> {{/files}} @@ -47,7 +47,7 @@ <a class="dropdown-item" href="#">Ansehen als Code</a> <a class="dropdown-item" href="#">Ansehen als Dokument</a> <div class="dropdown-divider"></div> - <a class="dropdown-item" href="#">Bearbeiten als Code</a> + <a id="editTextFile" class="dropdown-item" href="#">Bearbeiten als Code</a> <a class="dropdown-item" href="#">Bearbeiten als Dokument</a> <div class="dropdown-divider"></div> <a id="saveFile" class="dropdown-item" href="#">Speichern</a> diff --git a/web/ui/ui.js b/web/ui/ui.js index b37ed2f..dfa880e 100644 --- a/web/ui/ui.js +++ b/web/ui/ui.js @@ -5,6 +5,7 @@ $('.codeeditor-space').hide(); $('.code-editor-container').hide(); $('#newTextFile').on('click', fm_menu_neue_textdatei); + $('#editTextFile').on('click', fm_menu_textdatei_bearbeiten); $('#saveFile').on('click', fm_menu_datei_speichern); $('#closeFile').on('click', fm_menu_datei_schliessen); $('#myModal').on('hidden.bs.modal', function (e) { @@ -20,6 +21,16 @@ $('.codeeditor-space').show(); $('.code-editor-container').show(); fm_code_edit('Test'); +} + +function fm_menu_textdatei_bearbeiten() { + /* + $('#dateiansicht').hide(); + $('.codeeditor-space').show(); + $('.code-editor-container').show(); + fm_code_edit('Test'); + */ + fm_get_file_content(); } function fm_menu_datei_schliessen() { @@ -58,28 +69,47 @@ }); } +function fm_get_file_content() { + + var fname = $('.datei-gewaehlt').text(); + + console.log(pfad + '/' + fname); + + + /* + var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPath; + var u = '../svc' + m; + fm_get(u, "json", function(resp) { + + }); + */ +} + // 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) { - //if(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])); + if(resp.List[0].FileRef !== undefined) { + 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 + $('.figure').attr('onclick','').unbind('click'); + $('#dateien').empty(); + $('#dateien').html(Mustache.render(template, fl)); + $('.figure').click(fm_dateiwahl); + } else { + $('#dateien').empty(); } - var fl = new FileList(files); - var template = $('#tpl-kacheln').html(); - Mustache.parse(template); // optional, speeds up future uses - $('.figure').attr('onclick','').unbind('click'); - $('#dateien').empty(); - $('#dateien').html(Mustache.render(template, fl)); - $('.figure').click(fm_dateiwahl); var dirList = new Array(); var rp = ''; var dirs = relPath.split('/'); - dirList.push(new BcrFile(rp, 'Home')) + dirList.push(new BcrFile(rp, 'Home')); if(dirs.length > 0) { for(var i = 0; i < dirs.length; i++) { if(rp.length > 0 ) { @@ -105,7 +135,7 @@ // hier speichern var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile'; var u = '../svc' + m; - fm_post(u, {p1: '', p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) { + fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) { }); }); @@ -220,7 +250,17 @@ } else { return 'fa-file'; } - } + }; + + this.fileName = function() { + var namen = self.fr.absolutePath.split('/'); + if(namen.length > 0) { + return namen[namen.length - 1]; + } else { + return self.fr.absolutePath; + } + + }; } function BcrFiles(fl) { -- Gitblit v1.9.3