New file |
| | |
| | | /*
|
| | |
|
| | | 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>");
|
| | | }
|
| | | |
| | | |
| | | |
| | | }
|