Dateiverwaltung für die WebBox
Ulrich
2017-02-28 9e296453bf0b7ee35e2ed3c992198584bf2f2c0a
commit | author | age
7342b1 1 /*
U 2     Dateiverwaltung - File management in your browser
3     Copyright (C) 2017 Ulrich Hilger, http://uhilger.de
4
5     This program is free software: you can redistribute it and/or modify
6     it under the terms of the GNU Affero General Public License as
7     published by the Free Software Foundation, either version 3 of the
8     License, or (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU Affero General Public License for more details.
14
15     You should have received a copy of the GNU Affero General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 package de.uhilger.filecms.web;
20
21 import java.io.File;
22 import java.util.logging.Logger;
23 import javax.servlet.ServletContext;
24 import javax.servlet.ServletContextEvent;
25 import javax.servlet.ServletContextListener;
26
27 /**
2b3e7e 28  * Initialisieren der Dateiverwaltung
7342b1 29  */
U 30 public class Initialiser implements ServletContextListener {
31   
32   private static final Logger logger = Logger.getLogger(Initialiser.class.getName());
33   
34   
35   public static final String FILE_BASE = "filebase";
2b3e7e 36   public static final String DATENABLAGE = "datenAblage";
7342b1 37     
U 38   /* ----- ServletContextListener Implementation ----- */
39
40   @Override
41   public void contextInitialized(ServletContextEvent sce) {
42     // hier kann etwas initialisiert werden
43     ServletContext ctx = sce.getServletContext();
2b3e7e 44     ablageErmitteln(ctx);
U 45   }
46   
47   /**
48    * Die Dateiablage wird entweder auf einen absoluten Pfad gesetzt, 
49    * der im Deployment Descriptor hinterlegt werden kann oder, wenn 
50    * dort nichts eingetragen ist, auf den hart kodierten Pfad 
51    * der WebBox.
52    * 
53    * @param ctx der ServletContext, in den die Angabe eingetragen wird. Dort 
54    * ist anschliessend die Angabe unter Initialiser.FILE_BASE abrufbar
55    */
56   private void ablageErmitteln(ServletContext ctx) {
57     Object o = ctx.getInitParameter(DATENABLAGE);
58     try {
59       if(o instanceof String) {
60         String pfad = o.toString();
61         if(pfad.trim().length() > 0) {
62           ctx.setAttribute(FILE_BASE, pfad);
63           logger.fine("Basis: " + pfad);
64         } else {
9e2964 65           ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx).getAbsolutePath());  
2b3e7e 66         }
U 67       } else {
9e2964 68         ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx).getAbsolutePath());      
2b3e7e 69       }    
U 70     } catch(Exception ex) {
9e2964 71       ctx.setAttribute(FILE_BASE, getWbxDataDir(ctx).getAbsolutePath());
2b3e7e 72     }
U 73   }
74   
75   /**
76    * Bei der WebBox ist das Datenverzeichnis relativ zum Verzeichnis 
77    * $CATALINA_BASE/webapps untergebracht. 
78    * Die Abfrage ServletContext.getRealPath 
79    * liefert das Verzeichnis des Context dieser Webanwendung, also 
80    * $CATALINA_BASE/webapps/file-cms
81    * oder
82    * $WBX/sys/base/webapps/file-cms
83    * 
84    * Unter Windows z.B.
85    * C:\Users\fred\Documents\srv\wbx\sys\base\webapps\file-cms
86    * Unter Linux oder Mac OS z.B.
87    * /home/fred/srv/wbx/sys/base/webapps/file-cms
88    * 
89    * Das Datenverzeichis liegt dann auf 
90    * $WBX/daten
91    * 
92    * Mit dem Verzeichnis des Context dieser Webanwendung ist das 
93    * Datenverzeichnis der WebBox hart kodierbar mit dieser Methode
94    * 
95    * @return Verzeichnis 'daten' der WebBox
96    */
97   private File getWbxDataDir(ServletContext ctx) {
3c4b10 98     String path = ctx.getRealPath("/");
U 99     logger.fine("getRealPath: " + path); // file-cms in webapps
100     File file = new File(path);
2b3e7e 101     file = file.getParentFile().getParentFile().getParentFile().getParentFile();    
9e2964 102     file = new File(file, "daten/");
3c4b10 103     logger.fine("Basis: " + file.getAbsolutePath());
2b3e7e 104     return file;
7342b1 105   }
U 106
107   @Override
108   public void contextDestroyed(ServletContextEvent sce) {
109     // hier wird alles wieder aufgeraeumt
110     ServletContext ctx = sce.getServletContext();
111     ctx.removeAttribute(FILE_BASE);
112   }
113   
114 }