Klassenbiliothek fuer Dateiverwaltung
ulrich
15 hours ago 1be785f6df00e3f36c00b58a2d0c623733c74621
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
  fm - File management class library
  Copyright (C) 2024  Ulrich Hilger
 
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as
  published by the Free Software Foundation, either version 3 of the
  License, or (at your option) any later version.
 
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Affero General Public License for more details.
 
  You should have received a copy of the GNU Affero General Public License
  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
package de.uhilger.fm;
 
import com.google.gson.Gson;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
 
 
/**
 * Eine Liste mit den Dateien eines Verzeichnisses bilden.
 * 
 * Varianten von Bilddateien werden ausgeblendet. Enthaelt ein Ordner die Dateien 
 * 
 * <pre>
 * mein-bild.jpg
 * mein-bild_tn.jpg
 * mein-bild_kl.jpg
 * </pre>
 * 
 * erscheint nur die Datei mein-bild.jpg in der Liste.
 * 
 * @author Ulrich Hilger
 * @version 0.1, 05.11.2024
 */
public class Catalog {
 
  private static final String STR_DOT = ".";
 
  /**
   * Eine Liste des Inhalts eines Ordners erstellen
   * 
   * @param relPathAndName Name und relativer Pfad des Ordners, dessen Inhalt aufgelistet werden soll
   * @param urlBase  Kontext Pfad zur Bildung des URL fuer Miniaturansicht und imgsrc bei Bilddateien
   * (koennte evtl. im Client gebildet werden, hier dann nur Mini-Dateiname zurueckgeben)
   * @param base  Basisverzeichnis, gegen das der relative Pfad aufgeloest werden soll
   * @return die Dateiliste als JSON String
   * @throws IOException 
   */
  public String list(String relPathAndName, String urlBase, String base) throws IOException {
    File[] files = new File(base, relPathAndName).listFiles(new ImageFileFilter());
    if (files != null && files.length > 0) {
      Arrays.sort(files);
      ArrayList liste = new ArrayList();
      for (File file : files) {
        FileRef datei = new FileRef();
        String dateiName = file.getName();
        datei.setName(dateiName);
        if (file.isDirectory()) {
          datei.setTyp(FileRef.TYP_ORDNER);
        } else {
          datei.setTyp(FileRef.TYP_DATEI);
        }
        String lowerName = dateiName.toLowerCase();
        if (lowerName.endsWith(ImageFileFilter.JPEG)
                || lowerName.endsWith(ImageFileFilter.JPG)
                || lowerName.endsWith(ImageFileFilter.PNG)) {
          datei.setBild(true);
          String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT));
          String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT));
          datei.setMiniurl(urlBase + /*"/" + */ relPathAndName + ohneExt + ImageFileFilter.TN + ext);
          //buildImgSrc(file, datei, ohneExt, ext);
        }
        liste.add(datei);
      }
      //while(threadCount > 0) {
      //  try {
      //    Thread.sleep(50);
      //  } catch (InterruptedException ex) {
      //    Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex);
      //  }
      //}
      if (!liste.isEmpty()) {
        DirList list = new DirList();
        list.setDirectory(urlBase + relPathAndName);
        list.setFiles(liste);
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
      } else {
        return null;
      }
    } else {
      return null;
    }
    //} else {
    //}
  }
 
}