Dateiverwaltung für die WebBox
ulrich
2017-03-22 fad71945f44fd188b2ef78b88e638eb9d1cd0674
HTML-Export
3 files modified
1 files added
184 ■■■■■ changed files
src/java/de/uhilger/filecms/api/HtmlExportService.java 167 ●●●●● patch | view | raw | blame | history
web/ui/api.js 11 ●●●●● patch | view | raw | blame | history
web/ui/index.html 1 ●●●● patch | view | raw | blame | history
web/ui/ui.js 5 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/api/HtmlExportService.java
New file
@@ -0,0 +1,167 @@
/*
    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.api;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
/**
 * Die Klasse HtmlExportService stellt Methoden bereit, mit denen
 * .htmi-Dateien der WebBox zusammen mit Bildern und Stylesheets als
 * Ordner exportierten werden koennen, aus denen heraus die Inhalte
 * als HTML-Seiten im Browser zu oeffnen sind.
 */
public class HtmlExportService extends Api {
  private static final Logger logger = Logger.getLogger(HtmlExportService.class.getName());
  /**
   * Den Inhalt eines Ordners als HTML exportieren
   *
   * Annahme hierbei ist, dass der Ordner, auf den im Parameter relPath
   * verwiesen wird eine oder mehrere .htmi-Dateien enthaelt. Optional
   * koennen Bilder im Ordner oder seinen Unterordnern enthalten sein, die
   * dann in derselben Struktur im Ausgabeordner landen.
   *
   * Es werden nur .htmi-Dateien exortiert, die im mit relPath bezeichneten
   * Ordner liegen. Eventuell in darin befindlichen Unterordnern befindliche
   * .htmk-Dateien werden nicht exportiert.
   *
   * Es sollten also keine komplexen Webseiten-Strukturen mit dieser Methode
   * erzeugt werden sondern einfache Dokumente mit einer oder wenigen
   * einzelnen Dateien.
   *
   * Die Ausgabe erfolgt in den Ordner, in dem der mit relPath bezeichnete
   * Ordner liegt, also in dessen Eltern-Ordner. Der ausgegebene Ordner heisst
   * genauso wir der mit relPath bezeichnete Ordner und wird mit der
   * Ergaenzung _html versehen.
   *
   * @param relPath
   * @return 'ok' oder Fehlermeldung
   */
  public String exportHtml(String relPath) {
    String result = null;
    File dir = getTargetDir(relPath);
    File parentDir = dir.getParentFile();
    File outDir = new File(parentDir, dir.getName() + "_html/");
    File[] files = dir.listFiles(new HtmiFileFilter());
    for(int i = 0; i < files.length; i++) {
      if (files[i].isDirectory()) {
        try {
          FileUtils.copyDirectoryToDirectory(files[i], outDir);
        } catch (IOException ex) {
          result = ex.getLocalizedMessage();
          logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
        }
      } else {
        BufferedReader br = null;
        try {
          File out = new File(outDir, stripExt(files[i].getName()) + ".html");
          PrintWriter w = new PrintWriter(out);
          printHeader(w);
          br = new BufferedReader(new FileReader(files[i]));
          String line = br.readLine();
          while(line != null) {
            w.print(line);
            line = br.readLine();
          }
          printFooter(w);
          w.flush();
          w.close();
          br.close();
        } catch (FileNotFoundException ex) {
          result = ex.getLocalizedMessage();
          logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
          result = ex.getLocalizedMessage();
          logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
        } finally {
          try {
            if(br != null) {
              br.close();
            }
          } catch (IOException ex) {
            result = ex.getLocalizedMessage();
            logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
          }
        }
      }
    }
    File catalinaBase = new File(getCatalinaBase());
    File bsDir = new File(catalinaBase, "webapps/jslib/bootstrap/css/");
    try {
      FileUtils.copyFile(new File(bsDir, "bootstrap.min.css"), new File(outDir, "bootstrap.min.css"), true);
      File stile = new File(dir, "stile.css");
      if(stile.exists()) {
        FileUtils.copyFile(stile, new File(outDir, "stile.css"), true);
      }
    } catch (IOException ex) {
      result = ex.getLocalizedMessage();
      logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
    }
    return result;
  }
  private String stripExt(String name) {
    int dotpos = name.indexOf(".");
    if(dotpos > -1) {
      name = name.substring(0, dotpos);
    }
    return name;
  }
  public class HtmiFileFilter implements FileFilter {
    @Override
    public boolean accept(File pathname) {
      boolean doAccept = false;
      if(pathname.getName().endsWith(".htmi") || pathname.isDirectory()) {
        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\"/>");
    out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"bootstrap.min.css\">\r\n");
    out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"stile.css\">\r\n");
    out.print("</head><body class=\"p-3\">\r\n");
  }
  private void printFooter(PrintWriter out) throws IOException {
    out.print("</body></html>");
  }
}
web/ui/api.js
@@ -187,6 +187,17 @@
  });  
}
function fm_export_html() {
  var m = '?c=de.uhilger.filecms.api.HtmlExportService&m=exportHtml';
  m = m + '&p=' + pfad;
  var u = '../svc' + m;
  fm_get(u, "text", function(resp) {
    $('.system-out').empty();
    $('.system-out').append('Rueckmeldung vom HTML-Export: ' + resp);
    fm_fusszeile_zeigen();
  });
}
/* ------------------- Dateiinhalte --------------------- */
function fm_save_file(saveFileName, method, callback) {
web/ui/index.html
@@ -91,6 +91,7 @@
              <div class="dropdown-divider"></div>
              <a id="renameFile" class="dropdown-item" href="#">Umbenennen..</a>
              <a id="m-unzip" class="dropdown-item" href="#">Entpacken</a>
              <a id="m-html-export" class="dropdown-item" href="#">Export HTML</a>
              <div class="dropdown-divider"></div>
              <a id="closeFile" class="dropdown-item" href="#">Schliessen</a>
            </div>
web/ui/ui.js
@@ -57,6 +57,7 @@
  $('#closeFile').on('click', fm_menu_datei_schliessen);
  $('#renameFile').on('click', fm_menu_datei_umbenennen);
  $('#m-unzip').on('click', fm_menu_datei_entpacken);
  $('#m-html-export').on('click', fm_menu_html_export);
  $('#m-del').on('click', fm_menu_delete);
  $('#m-cut').on('click', fm_menu_cut);
  $('#m-copy').on('click', fm_menu_copy);
@@ -298,6 +299,10 @@
  return liste;
}
function fm_menu_html_export() {
  fm_export_html();
}
/* --------- Dateifunktionen Ende ---------- */
function fm_menu_test() {