Dateiverwaltung für die WebBox
ulrich@undisclosed
2020-04-18 f9ce7f5a92371eac9c242a02b62e42049a26025f
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
/*
    Dateiverwaltung - File management in your browser
    Copyright (C) 2017 Ulrich Hilger, http://uhilger.de
 
    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 <http://www.gnu.org/licenses/>.
*/
 
package de.uhilger.filecms.pub;
 
import de.uhilger.filecms.api.Api;
import de.uhilger.wbx.Bild;
import de.uhilger.filecms.data.FileRef;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;
 
/**
 * Methoden zur Arbeit mit Inhalten in der oeffentlichen 
 * Ablage einer WebBox
 */
public class Catalog extends Api {
 
  private static final Logger logger = Logger.getLogger(Catalog.class.getName());
  
  /**
   * Inhalte der WebBox listen. Hier wird nur ausgegeben was mit 
   * einer relativen Pfadangabe ausgehend von www, der oeffentlichen 
   * Ablage einer WeBox, erreichbar ist. 
   * 
   * Andere Inhalte werden nicht ausgegeben.
   * 
   * @param relPath der relative Pfad, der von www aus gelistet werden soll, ohne www
   * @return Liste der Dateien und Ordner am Ort relPath
   */
  public List<FileRef> list(String relPath) {
    return listInt(relPath, null, null);
  }
  
  /**
   * Inhalte der WebBox listen. Hier wird nur ausgegeben was mit 
   * einer relativen Pfadangabe ausgehend von www, der oeffentlichen 
   * Ablage einer WeBox, erreichbar ist. 
   * 
   * Andere Inhalte werden nicht ausgegeben.
   * 
   * @param relPath der relative Pfad, der von www aus gelistet werden soll, ohne www
   * @return Liste der Dateien und Ordner am Ort relPath
   */
  public List<FileRef> listOrdered(String relPath, String orderBy, String order) {
    return listInt(relPath, orderBy, order);
  }
  
  private List<FileRef> listInt(String relPath, String orderBy, String order) {
    List<FileRef> files = new ArrayList();
    if(!relPath.startsWith(".")) {
      Bild bild = new Bild();
      StringBuffer path = new StringBuffer(PUB_DIR_PATH); // www/
      path.append(relPath);
      File dir = new File(getBase().getAbsolutePath(), path.toString());
      if(dir.exists()) {
        File[] fileArray = dir.listFiles(new ImgFileFilter());
        if(orderBy != null && orderBy.equalsIgnoreCase("date")) {
          Arrays.sort(fileArray, new FileDateComparator(order));
        }
        for(int i = 0; i < fileArray.length; i++) {
          logger.fine(fileArray[i].toURI().toString());
          String fname = fileArray[i].toURI().toString().replace("file:/", "");
          if(fileArray[i].isDirectory()) {
            fname = fname.substring(0, fname.length() - 1);
          }
          logger.fine(fname);
          FileRef ref = new FileRef(fname, fileArray[i].isDirectory());
          ref.setMimetype(bild.getMimeType(fileArray[i]));
          files.add(ref);
        }
      }
    }
    return files;
 }
  
}