WebBox Klassenbibliothek
ulrich
2018-04-03 96d8cfc0368d09ee25b846d4aa47f1ff0d9e8ae1
commit | author | age
a01889 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.wbx;
20
96d8cf 21 import java.io.File;
U 22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.Iterator;
26 import java.util.List;
5ebac8 27 import java.util.logging.Level;
a01889 28 import java.util.logging.Logger;
5ebac8 29 import javax.naming.Context;
U 30 import javax.naming.InitialContext;
31 import javax.naming.NamingException;
a01889 32
U 33 /**
34  *
35  */
36 public class WbxUtils {
37   
38   private static final Logger logger = Logger.getLogger(WbxUtils.class.getName());
39   
5ebac8 40   public static final String JNDI_CTX_NAME = "java:comp/env";
U 41   
42   public static final String NOT_FOUND = " nicht gefunden";
43   public static final String NO_STRING = " ist kein String";  
44   public static final String EMPTY_STRING = "";
96d8cf 45   
U 46   public static final String WBX_PUB_DIR_NAME = "wbxPubDirName";
47   public static final String WBX_DEFAULT_PUB_DIR_NAME = "/www";
48   
49   /**
50    * Diese Methode funktioniert nur, wenn entweder ein Ordner uebergeben 
51    * wird, der keine Unterordner enthaelt wie zum Beispiel der Ordner 'neu' 
52    * der Bildersammlung oder ein Ordner, dessen Unterordner 
53    * nach dem Schema Jahr, Monat benannt sind wie bei einem Journal, das 
54    * die Beitraege wie folgt enthaelt:
55    * Journal-Ordner
56    *   2018
57    *     12
58    *     11
59    *     10
60    *     usw.
61    *   2017
62    *     12
63    *     11
64    *     10
65    *     usw.
66    * 
67    * @param out
68    * @param dir
69    * @param tiefe
70    * @param dateizaehler 
71    */
72   public void collectFiles(File dir, int tiefe, List beitraege, int maxTiefe, int maxBeitraege) {
73     List dirs = new ArrayList();
74     List beitraegeHier = new ArrayList();
75     File[] files = dir.listFiles();
76     for(int i = 0; i < files.length; i++) {
77       if(files[i].isDirectory()) {
78         if(tiefe < maxTiefe) {
79           dirs.add(files[i]);
80         }
81       } else {
82         beitraegeHier.add(files[i]);
83       }
84     }
85       
86     if(dirs.size() > 0) {
87       // hier zuvor die Verzeichnissse absteigend nach Name sortieren      
88       Collections.sort(dirs, new Comparator<File>() {
89         @Override
90         public int compare(File o1, File o2) {
91           return o2.getName().compareTo(o1.getName());
92         }
93       });
94       
95       Iterator i = dirs.iterator();
96       while(i.hasNext() && beitraege.size() < maxBeitraege) {
97         collectFiles((File) i.next(), tiefe+1, beitraege, maxTiefe, maxBeitraege);
98       }
99     } 
100     if(beitraegeHier.size() > 0) {
101       // hier zuvor die Liste der Beitraege dieses Ordners nach lastModified absteigend sortieren
102       // dann die neuesten in beitraege aufnehmen, bis die maximale Zahl gesuchter 
103       // neuer Beitraege erreicht ist.
104       
105       Collections.sort(beitraegeHier, new Comparator<File>() {
106         @Override
107         public int compare(File o1, File o2) {
108           int ergebnis;
109           if(o1.lastModified() > o2.lastModified()) {
110             ergebnis = -1;
111           } else if(o2.lastModified() > o1.lastModified()) {
112             ergebnis = 1;
113           } else {
114             ergebnis = 0;
115           }
116           return ergebnis;
117         }
118       });
119       
120       Iterator i = beitraegeHier.iterator();
121       while(i.hasNext() && beitraege.size() < maxBeitraege) {
122         File bf = (File) i.next();
123         String nm = bf.getName().toLowerCase();
124         if(nm.endsWith(".htmi") || nm.endsWith(".html") || nm.endsWith(".htm") || 
125            nm.endsWith(".jpg") || nm.endsWith(".jpeg") || nm.endsWith(".png") || 
126            nm.endsWith(".txt")) {
127           beitraege.add(bf);
128         }
129       }
130       
131     }
132   }
133   
5ebac8 134
U 135   public int getJNDIInt(String paramName, int defaultVal) {
136     String jndiStr = getJNDIParameter(paramName, Integer.toString(defaultVal));
137     try {
138       return Integer.parseInt(jndiStr);
139     } catch(NumberFormatException ex) {
140       logger.log(Level.FINE, ex.getMessage());
141       return defaultVal;
142     }
143   }
144   
145   public String getJNDIParameter(String pname, String defaultVal) {
146     try {
147       // unseren environment naming context ermitteln
148       Context initCtx = new InitialContext();
149       Context envCtx = (Context) initCtx.lookup(JNDI_CTX_NAME);
150       
151       // unseren Parameter lesen
152       Object o = envCtx.lookup(pname);
153       if(o instanceof String) {
154         return o.toString();      
155       } else {
156         return defaultVal;
157       }
158     } catch (NamingException ex) {
159       logger.log(Level.FINE, ex.getMessage());
160       return defaultVal;
161     }
162   }  
a01889 163 }