Dateiverwaltung für die WebBox
ulrich
2017-02-18 9159275f8efe97da69e138ef3378931181447370
commit | author | age
c7c502 1 package de.uhilger.filecms.api;
U 2
3 import de.uhilger.filesystem.FileRef;
8e51b7 4 import de.uhilger.transit.web.RequestKontext;
c7c502 5 import de.uhilger.transit.web.WebKontext;
8e51b7 6 import java.io.File;
e5ff42 7 import java.io.FileWriter;
U 8 import java.io.IOException;
9 import java.security.Principal;
10 import java.util.logging.Level;
8e51b7 11 import java.util.logging.Logger;
c7c502 12 import javax.servlet.ServletContext;
8e51b7 13 import javax.servlet.http.HttpServletRequest;
c7c502 14
U 15 /**
16  *
17  * @author ulrich
18  */
8e51b7 19 public class FileMgr implements WebKontext, RequestKontext {
U 20   private static final Logger logger = Logger.getLogger(FileMgr.class.getName());
c7c502 21   
U 22   public static final String FILE_BASE = "fileBase";
23   
24   private ServletContext ctx;
8e51b7 25   private HttpServletRequest req;
c7c502 26   
ea7193 27   public String hallo() {
U 28     return "Hallo Welt!";
29   }
30   
31   // http://localhost:8097/file-cms/rpc/de.uhilger.filecms.api.FileMgr/getBase/JSONNICE
c7c502 32   public FileRef getBase() {
U 33     FileRef ref = null;
8e51b7 34     //String fileBase = getServletContext().getInitParameter(FILE_BASE);
U 35     // -Dfilecms.base=/pfad/zu/daten
ea7193 36     //String fileBase = System.getProperty("filecms.base");
U 37     //File file = new File(fileBase);
38     //logger.info(file.getAbsolutePath());
39     //logger.info(getWebappsDir().getAbsolutePath());
40     
41     /* 
42         file = new File("."); liefert 
43         /home/ulrich/dev/lib/java/tomcat/tomcat2-8.5.9/bin/.
44     
45         ..auf der WebBox aber
46         /home/ulrich/srv/wbx_probe/.
47         ..weil das Startskript dort liegt
48     
49         der Tomcat der WebBox ist unter
50         sys/jrs/tomcat/bin
51     
52         also z.B.
53         /home/ulrich/srv/wbx_probe/sys/jrs/tomcat/bin
54
55         das Datenverzeichnis ist z.B. auf
56         /home/ulrich/srv/wbx_probe/daten
57     
58         dann ist das Datenverzeichnis unter
59         ../../../daten
60     
61         Der Ausdruck file = new File("."); liefert stets den 
62         Ort von dem aus der Java-Prozess gestartet wurde.
63     
64         Die unten folgende Bestimmung des Datenverzeichnisses 
65         ist beschraenkt auf das Datenverzeichnis der WebBox, 
66         entweder relativ zum Startskript der WebBox oder 
67         dem Startskript von Tomcat, wie es aus Netbeans heraus 
68         waehrend der Entwicklung genutzt wird.
69     
70         Besser ware vielleicht eine Bestimmung ueber einen 
71         Systemparameter -Dfilecms.base=... wie weiter oben 
72         auskommentiert. Damit liesse sich das file-cms auch 
73         ohne WebBox einsetzen. Allerdings muss dann das 
74         Datenverzeichnis im Start-Skript gebildet werden, 
75         also ausserhalb von Java, wenn es dynamisch aus 
76         einem Pfad relativ zum Start-Skript erzeugt werden 
77         soll.
78     */
79     
80     File file = new File(".");
81     String path = file.getAbsolutePath();
82     path = path.substring(0, path.length() - 1);
83     file = new File(path);
84     if(path.endsWith("bin")) {
85       file = file.getParentFile().getParentFile().getParentFile();
86     } else {
87       
88     }
89     file = new File(file, "daten/");
8e51b7 90     ref = new FileRef(file.getAbsolutePath(), file.isDirectory());
c7c502 91     return ref;
8e51b7 92   }
U 93   
ea7193 94   public FileRef saveTextFile(String relPath, String fileName, String contents) {
U 95     FileRef savedFile = null;
e5ff42 96     try {
U 97       FileRef datenRef = getBase();
98       File daten = new File(datenRef.getAbsolutePath());
99       Object p = getRequest().getUserPrincipal();
100       if(p instanceof Principal) {
101         File userDir = new File(daten, "www/" + ((Principal) p).getName());
102         File saveDir = new File(userDir, relPath);
103         File targetFile = new File(saveDir, fileName);
104         if(!targetFile.exists()) {
915927 105           targetFile.getParentFile().mkdirs();
e5ff42 106           targetFile.createNewFile();
U 107           FileWriter w = new FileWriter(targetFile);
108           w.write(contents);
109           w.flush();
110           w.close();
915927 111           savedFile = new FileRef(targetFile.getAbsolutePath(), targetFile.isDirectory(), targetFile.isHidden(), targetFile.lastModified(), targetFile.length());
e5ff42 112         }
U 113       }
114     } catch (IOException ex) {
115       logger.log(Level.SEVERE, null, ex);
116     }
ea7193 117     return savedFile;
U 118   }
119   
8e51b7 120   private File getWebappsDir() {
U 121     File cfile = new File(this.getClass().getResource(this.getClass().getSimpleName() + ".class").getFile());
122     String path = cfile.getAbsolutePath();
123     return new File(path.substring(0, path.indexOf(req.getContextPath())));
c7c502 124   }
U 125
126   @Override
127   public ServletContext getServletContext() {
128     return ctx;
129   }
130
131   @Override
132   public void setServletContext(ServletContext servletContext) {
133     this.ctx = servletContext;
134   }
135
8e51b7 136   @Override
U 137   public HttpServletRequest getRequest() {
138     return req;
139   }
140
141   @Override
142   public void setRequest(HttpServletRequest r) {
143     this.req = r;
144   }
145
c7c502 146   
U 147 }