From cfc1869716f245658559acebf5651ca0968107a8 Mon Sep 17 00:00:00 2001 From: Ulrich <undisclosed> Date: Tue, 28 Feb 2017 11:28:14 +0000 Subject: [PATCH] Bestimmung des Orts der Dateiablage ueber Parameter oder hart kodiert fuer WebBox-Struktur --- src/java/de/uhilger/filecms/web/Initialiser.java | 132 ++++++++++++++++++++----------------------- 1 files changed, 62 insertions(+), 70 deletions(-) diff --git a/src/java/de/uhilger/filecms/web/Initialiser.java b/src/java/de/uhilger/filecms/web/Initialiser.java index 05b2d89..02e8b04 100644 --- a/src/java/de/uhilger/filecms/web/Initialiser.java +++ b/src/java/de/uhilger/filecms/web/Initialiser.java @@ -18,8 +18,6 @@ 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; @@ -27,8 +25,7 @@ import javax.servlet.ServletContextListener; /** - * - * @author ulrich + * Initialisieren der Dateiverwaltung */ public class Initialiser implements ServletContextListener { @@ -36,79 +33,74 @@ 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()); + public static final String DATENABLAGE = "datenAblage"; - /* - 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()); + ablageErmitteln(ctx); + } + + /** + * Die Dateiablage wird entweder auf einen absoluten Pfad gesetzt, + * der im Deployment Descriptor hinterlegt werden kann oder, wenn + * dort nichts eingetragen ist, auf den hart kodierten Pfad + * der WebBox. + * + * @param ctx der ServletContext, in den die Angabe eingetragen wird. Dort + * ist anschliessend die Angabe unter Initialiser.FILE_BASE abrufbar + */ + private void ablageErmitteln(ServletContext ctx) { + Object o = ctx.getInitParameter(DATENABLAGE); + try { + if(o instanceof String) { + String pfad = o.toString(); + if(pfad.trim().length() > 0) { + ctx.setAttribute(FILE_BASE, pfad); + logger.fine("Basis: " + pfad); + } else { + ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx)); + } + } else { + ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx)); + } + } catch(Exception ex) { + ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx)); + } + } + + /** + * Bei der WebBox ist das Datenverzeichnis relativ zum Verzeichnis + * $CATALINA_BASE/webapps untergebracht. + * Die Abfrage ServletContext.getRealPath + * liefert das Verzeichnis des Context dieser Webanwendung, also + * $CATALINA_BASE/webapps/file-cms + * oder + * $WBX/sys/base/webapps/file-cms + * + * Unter Windows z.B. + * C:\Users\fred\Documents\srv\wbx\sys\base\webapps\file-cms + * Unter Linux oder Mac OS z.B. + * /home/fred/srv/wbx/sys/base/webapps/file-cms + * + * Das Datenverzeichis liegt dann auf + * $WBX/daten + * + * Mit dem Verzeichnis des Context dieser Webanwendung ist das + * Datenverzeichnis der WebBox hart kodierbar mit dieser Methode + * + * @return Verzeichnis 'daten' der WebBox + */ + private File getWbxDataDir(ServletContext ctx) { + String path = ctx.getRealPath("/"); + logger.fine("getRealPath: " + path); // file-cms in webapps + File file = new File(path); + file = file.getParentFile().getParentFile().getParentFile().getParentFile(); + logger.fine("Basis: " + file.getAbsolutePath()); + return file; } @Override -- Gitblit v1.9.3