Klassenbiliothek fuer Dateiverwaltung
ulrich
19 hours ago 8bde6f998b7112a15624e24e2ee070ebf24a9172
commit | author | age
e369b9 1 /*
c45b52 2   fm - File management class library
e369b9 3   Copyright (C) 2024  Ulrich Hilger
U 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 <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.fm;
19
20 import com.google.gson.Gson;
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25
26
27 /**
28  * Eine Klasse zur Bildung einer Liste mit den Dateien eines Verzeichnisses.
29  * 
30  * Varianten von Bilddateien werden ausgeblendet. Enthaelt ein Ordner die Dateien 
31  * mein-bild.jpg
32  * mein-bild_tn.jpg
33  * mein-bild_kl.jpg
34  * erscheint nur die Datei mein-bild.jpg in der Liste.
35  * 
36  * 
37  * @author Ulrich Hilger
38  * @version 0.1, 05.11.2024
39  */
8bde6f 40 public class Catalog {
e369b9 41
U 42   public static final String STR_DOT = ".";
43
269203 44   /**
U 45    * 
8bde6f 46    * @param relPathAndName Name und relativer Pfad des Ordners, dessen Inhalt aufgelistet werden soll
U 47    * @param urlBase  Kontext Pfad zur Bildung des URL fuer Miniaturansicht und imgsrc bei Bilddateien
269203 48    * (koennte evtl. im Client gebildet werden, hier dann nur Mini-Dateiname zurueckgeben)
U 49    * @param base  Basisverzeichnis, gegen das der relative Pfad aufgeloest werden soll
50    * @return die Dateiliste als JSON String
51    * @throws IOException 
52    */
8bde6f 53   public String list(String relPathAndName, String urlBase, String base) throws IOException {
U 54     File[] files = new File(base, relPathAndName).listFiles(new ImageFileFilter());
e369b9 55     if (files != null && files.length > 0) {
U 56       Arrays.sort(files);
57       ArrayList liste = new ArrayList();
58       for (File file : files) {
8bde6f 59         FileRef datei = new FileRef();
e369b9 60         String dateiName = file.getName();
U 61         datei.setName(dateiName);
62         if (file.isDirectory()) {
8bde6f 63           datei.setTyp(FileRef.TYP_ORDNER);
e369b9 64         } else {
8bde6f 65           datei.setTyp(FileRef.TYP_DATEI);
e369b9 66         }
U 67         String lowerName = dateiName.toLowerCase();
973951 68         if (lowerName.endsWith(ImageFileFilter.JPEG)
U 69                 || lowerName.endsWith(ImageFileFilter.JPG)
70                 || lowerName.endsWith(ImageFileFilter.PNG)) {
e369b9 71           datei.setBild(true);
U 72           String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT));
73           String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT));
8bde6f 74           datei.setMiniurl(urlBase + /*"/" + */ relPathAndName + ohneExt + ImageFileFilter.TN + ext);
e369b9 75           //buildImgSrc(file, datei, ohneExt, ext);
U 76         }
77         liste.add(datei);
78       }
79       //while(threadCount > 0) {
80       //  try {
81       //    Thread.sleep(50);
82       //  } catch (InterruptedException ex) {
83       //    Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex);
84       //  }
85       //}
86       if (!liste.isEmpty()) {
87         DirList list = new DirList();
8bde6f 88         list.setDirectory(urlBase + relPathAndName);
U 89         list.setFiles(liste);
e369b9 90         Gson gson = new Gson();
U 91         String json = gson.toJson(list);
92         return json;
93       } else {
94         return null;
95       }
96     } else {
97       return null;
98     }
99     //} else {
100     //}
101   }
102
103 }