Dateiverwaltung für die WebBox
ulrich
2017-02-20 5dfab6ee05a6926a84c068ee0ebcabab1480c9c5
commit | author | age
8931b7 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
c7c502 19 package de.uhilger.filecms.api;
U 20
7342b1 21 import de.uhilger.filecms.web.Initialiser;
c7c502 22 import de.uhilger.filesystem.FileRef;
5dfab6 23 import de.uhilger.filesystem.LocalFileSystem;
8e51b7 24 import java.io.File;
e5ff42 25 import java.io.FileWriter;
U 26 import java.io.IOException;
27 import java.security.Principal;
7342b1 28 import java.util.ArrayList;
5dfab6 29 import java.util.Arrays;
7342b1 30 import java.util.List;
e5ff42 31 import java.util.logging.Level;
8e51b7 32 import java.util.logging.Logger;
c7c502 33
U 34 /**
35  *
36  * @author ulrich
37  */
8931b7 38 public class FileMgr extends Api {
8e51b7 39   private static final Logger logger = Logger.getLogger(FileMgr.class.getName());
c7c502 40   
7342b1 41   public static final String PUB_DIR_PATH = "www/";
U 42   public static final String HOME_DIR_PATH = "home/";
43   public static final String PUB_DIR_NAME = "Oeffentlich";
44   public static final String HOME_DIR_NAME = "Persoenlicher Ordner";
c7c502 45   
7342b1 46   private FileRef homeFolder;
U 47   private FileRef publicFolder;
48   private FileRef namedHomeFolder;
49   private FileRef namedPublicFolder;
50   
51       
ea7193 52   public String hallo() {
U 53     return "Hallo Welt!";
54   }
55   
7342b1 56   public List<FileRef> list(String relPath) {
5dfab6 57     List<FileRef> files = new ArrayList();
ea7193 58     
7342b1 59     if(relPath.length() == 0) {
5dfab6 60       /*
7342b1 61       publicFolder = new FileRef(getUserPubDir().getAbsolutePath(), true);
U 62       logger.info(publicFolder.getAbsolutePath());
63       homeFolder = new FileRef(getUserHomeDir().getAbsolutePath(), true);
64       logger.info(homeFolder.getAbsolutePath());
5dfab6 65       */
7342b1 66       namedPublicFolder = new FileRef(PUB_DIR_NAME, true);
5dfab6 67       logger.finer(namedPublicFolder.getAbsolutePath());
7342b1 68       namedHomeFolder = new FileRef(HOME_DIR_NAME, true);
5dfab6 69       logger.finer(namedHomeFolder.getAbsolutePath());
7342b1 70       files = new ArrayList<FileRef>();
U 71       files.add(namedHomeFolder);
72       files.add(namedPublicFolder);
ea7193 73     } else {
5dfab6 74       logger.info(relPath);
U 75       String targetPath = null;
76       if(relPath.startsWith(PUB_DIR_NAME)) {
77         targetPath = PUB_DIR_PATH + getUserName() + "/" + relPath.substring(PUB_DIR_NAME.length());
78       } else if(relPath.startsWith(HOME_DIR_NAME)) {
79         targetPath = HOME_DIR_PATH + getUserName() + "/" + relPath.substring(HOME_DIR_NAME.length());
80       } else {
81         // kann eigentlich nicht sein..
82       }
83       logger.info(targetPath);
84       File targetDir = new File(getBase().getAbsolutePath(), targetPath);
ea7193 85       
5dfab6 86       LocalFileSystem fs = new LocalFileSystem();
U 87       FileRef[] fileRefs = fs.list(new FileRef(targetDir.getAbsolutePath(), true));
88       for(int i = 0; i < fileRefs.length; i++) {
89         files.add(fileRefs[i]);
90       }
91       //files = Arrays.asList(fileRefs);
ea7193 92     }
7342b1 93     
U 94     return files;
95   }
96   
97   private FileRef getBase() {
98     FileRef base = null;
99     Object o = getServletContext().getAttribute(Initialiser.FILE_BASE);
100     if(o instanceof FileRef) {
101       base = (FileRef) o;
102     }
103     return base;
104   }
105   
106   private File getUserPubDir() {
107     File userDir = null;
108     File daten = new File(getBase().getAbsolutePath());
109     Object p = getRequest().getUserPrincipal();
110     if(p instanceof Principal) {
111       userDir = new File(daten, PUB_DIR_PATH + ((Principal) p).getName());
112     }
113     return userDir;
114   }
115   
5dfab6 116   private String getUserName() {
U 117     String userName = null;
118     Object p = getRequest().getUserPrincipal();
119     if(p instanceof Principal) {
120       userName = ((Principal) p).getName();
121     }
122     return userName;
123   }
124   
7342b1 125   private File getUserHomeDir() {
U 126     File userDir = null;
127     File daten = new File(getBase().getAbsolutePath());
128     Object p = getRequest().getUserPrincipal();
129     if(p instanceof Principal) {
130       userDir = new File(daten, HOME_DIR_PATH + ((Principal) p).getName());
131     }
132     return userDir;
8e51b7 133   }
U 134   
ea7193 135   public FileRef saveTextFile(String relPath, String fileName, String contents) {
U 136     FileRef savedFile = null;
e5ff42 137     try {
U 138       FileRef datenRef = getBase();
139       File daten = new File(datenRef.getAbsolutePath());
140       Object p = getRequest().getUserPrincipal();
141       if(p instanceof Principal) {
142         File userDir = new File(daten, "www/" + ((Principal) p).getName());
143         File saveDir = new File(userDir, relPath);
144         File targetFile = new File(saveDir, fileName);
7342b1 145         if(targetFile.exists()) {
U 146           /*
147             muss delete() sein?
148             pruefen: ueberschreibt der FileWriter den alteen Inhalt oder 
149             entsteht eine unerwuenschte Mischung aus altem und neuem 
150             Inhalt?
151           */
152           targetFile.delete();
153         } else {
915927 154           targetFile.getParentFile().mkdirs();
e5ff42 155         }
7342b1 156         targetFile.createNewFile();
U 157         FileWriter w = new FileWriter(targetFile);
158         w.write(contents);
159         w.flush();
160         w.close();
161         savedFile = new FileRef(
162                 targetFile.getAbsolutePath(), 
163                 targetFile.isDirectory(), 
164                 targetFile.isHidden(), 
165                 targetFile.lastModified(), 
166                 targetFile.length());
e5ff42 167       }
U 168     } catch (IOException ex) {
169       logger.log(Level.SEVERE, null, ex);
170     }
ea7193 171     return savedFile;
U 172   }
173   
8e51b7 174   private File getWebappsDir() {
8931b7 175     File cfile = new File(this.getClass().getResource(
U 176             this.getClass().getSimpleName() + ".class").getFile());
8e51b7 177     String path = cfile.getAbsolutePath();
8931b7 178     return new File(path.substring(0, path.indexOf(getRequest().getContextPath())));
c7c502 179   }
7342b1 180     
c7c502 181 }