/*
|
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 {
|
//}
|
}
|
|
}
|