From fad71945f44fd188b2ef78b88e638eb9d1cd0674 Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Wed, 22 Mar 2017 17:01:28 +0000
Subject: [PATCH] HTML-Export

---
 web/ui/index.html                                      |    1 
 web/ui/api.js                                          |   11 ++
 src/java/de/uhilger/filecms/api/HtmlExportService.java |  167 +++++++++++++++++++++++++++++++++++++++++
 web/ui/ui.js                                           |    5 +
 4 files changed, 184 insertions(+), 0 deletions(-)

diff --git a/src/java/de/uhilger/filecms/api/HtmlExportService.java b/src/java/de/uhilger/filecms/api/HtmlExportService.java
new file mode 100644
index 0000000..c389d9a
--- /dev/null
+++ b/src/java/de/uhilger/filecms/api/HtmlExportService.java
@@ -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>");
+  }
+  
+  
+  
+}
diff --git a/web/ui/api.js b/web/ui/api.js
index 5c79a96..3084d6c 100644
--- a/web/ui/api.js
+++ b/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) {
diff --git a/web/ui/index.html b/web/ui/index.html
index 2782775..0f7846a 100644
--- a/web/ui/index.html
+++ b/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>
diff --git a/web/ui/ui.js b/web/ui/ui.js
index 09ef609..15fed16 100644
--- a/web/ui/ui.js
+++ b/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() {

--
Gitblit v1.9.3