Dateiverwaltung für die WebBox
ulrich
2017-04-08 bf105c1879dbe483cda1beebcd744abb6f528e8f
HtmlExportService um die Erzeugung von Miniaturansichten erweitert
1 files modified
88 ■■■■■ changed files
src/java/de/uhilger/filecms/api/HtmlExportService.java 88 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/api/HtmlExportService.java
@@ -20,6 +20,11 @@
package de.uhilger.filecms.api;
import de.uhilger.filecms.data.Bild;
import java.awt.Container;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
@@ -51,9 +56,9 @@
   * 
   * Es werden nur .htmi-Dateien exortiert, die im mit relPath bezeichneten 
   * Ordner liegen. Eventuell in darin befindlichen Unterordnern befindliche 
   * .htmk-Dateien werden nicht exportiert.
   * .htmi-Dateien werden nicht exportiert.
   * 
   * Es sollten also keine komplexen Webseiten-Strukturen mit dieser Methode
   * Es sollen keine komplexen Webseiten-Strukturen mit dieser Methode
   * erzeugt werden sondern einfache Dokumente mit einer oder wenigen 
   * einzelnen Dateien.
   * 
@@ -126,12 +131,72 @@
      if(stile.exists()) {
        FileUtils.copyFile(stile, new File(outDir, "stile.css"), true);
      }
      buildThumbnailImages(outDir, new Bild());
      result = "Export nach HTML ausgefuehrt.";
    } catch (IOException ex) {
      result = ex.getLocalizedMessage();
      logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
    }
    return result;
  }
  /**
   * Minituransichten der Bilddateien erzeugen, die beim HTML-Export
   * entstanden sind.
   *
   * Die Methode erstellt fuer alle Dateien mit Endung png oder jpg
   * eine weitere Bilddatei mit Namen [Name]_tn.[Endung]. Also z.B.
   * bild_tn.jpg fuer die Datei bild.jpg
   */
  private void buildThumbnailImages(File dir, Bild bild) {
    logger.fine("Minituransichten dir: " + dir.getAbsolutePath());
    File[] files = dir.listFiles(new ImageFileFilter());
    if(files != null) {
      for(int i = 0; i < files.length; i++) {
        if(files[i].isDirectory()) {
          buildThumbnailImages(files[i], bild);
        } else {
          String absPath = files[i].getAbsolutePath();
          logger.fine("Miniaturansicht fuer Bild " + absPath);
          String fname = files[i].getName();
          logger.fine("fname: " + fname);
          int dotPos = fname.lastIndexOf(".");
          logger.fine("dotPos: " + dotPos);
          StringBuffer tnFileName = new StringBuffer();
          if(dotPos > -1) {
            String fname_no_ext = fname.substring(0, dotPos);
            logger.fine("fname_no_ext: " + fname_no_ext);
            String fext = fname.substring(dotPos);
            logger.fine("fext: " + fext);
            tnFileName.append(fname_no_ext);
            tnFileName.append("_tn");
            //tnFileName.append(".");
            tnFileName.append(fext);
          } else {
            tnFileName.append(fname);
            tnFileName.append("_tn");
          }
          String outFileName = new File(dir, tnFileName.toString()).getAbsolutePath();
          logger.fine("outFileName: " + outFileName);
          Image image = Toolkit.getDefaultToolkit().getImage(absPath);
          MediaTracker mediaTracker = new MediaTracker(new Container());
          mediaTracker.addImage(image, 0);
          try {
            mediaTracker.waitForID(0);
            if (!mediaTracker.isErrorAny()) {
              bild.writeImageFile(image, bild.getVariantenGroesse(Bild.WINZIG), bild.getMimeType(files[i]), outFileName);
            } else {
              logger.fine("Fehler: Miniaturansicht konnte nicht erzeugt werden");
            }
          } catch (InterruptedException | IOException ex) {
            logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
          }
        }
      }
    } else {
      logger.fine("files ist null");
    }
  }
  
  private String stripExt(String name) {
@@ -155,6 +220,25 @@
  
  }  
  
  public class ImageFileFilter implements FileFilter {
    @Override
    public boolean accept(File pathname) {
      boolean doAccept = false;
      String lcName = pathname.getName().toLowerCase();
      if( lcName.endsWith(".jpg") ||
          lcName.endsWith(".jpeg") ||
          lcName.endsWith(".png") ||
          pathname.isDirectory()) {
        if(!lcName.contains("_tn")) {
          doAccept = true;
        }
      }
      return doAccept;
    }
  }
  private void printHeader(PrintWriter out) throws IOException {
    out.print("<!DOCTYPE html><html><head>\r\n");
    out.print("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>");