From bf412a896b52694891bc4b72dee092e026f6e667 Mon Sep 17 00:00:00 2001
From: ulrich@undisclosed <ulrich@ulrich-vaio>
Date: Thu, 28 May 2020 08:06:37 +0000
Subject: [PATCH] Revert "Fehler bei PDF-Umwandlung behoben"

---
 src/de/uhilger/wbx/web/AdocServlet.java |  190 +++++++++++++++++++++++++---------------------
 1 files changed, 103 insertions(+), 87 deletions(-)

diff --git a/src/de/uhilger/wbx/web/AdocServlet.java b/src/de/uhilger/wbx/web/AdocServlet.java
index 7b219b6..af4736b 100644
--- a/src/de/uhilger/wbx/web/AdocServlet.java
+++ b/src/de/uhilger/wbx/web/AdocServlet.java
@@ -24,63 +24,84 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.util.HashMap;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
-import static org.asciidoctor.AttributesBuilder.attributes;
-import static org.asciidoctor.OptionsBuilder.options;
 import static org.asciidoctor.Asciidoctor.Factory.create;
 import org.asciidoctor.Asciidoctor;
+import static org.asciidoctor.AttributesBuilder.attributes;
+import static org.asciidoctor.OptionsBuilder.options;
 
 
 
 /**
  * Das AdocServlet wandelt AsciiDoc-Inhalte (*.adoc) 
- * zu HTML-Seiten
+ * zu HTML-Seiten und PDF-Dokumenten
  * 
+ * Mit Angabe des Parameters ?pdf=true im URL wird PDF erzeugt, andernfalls HTML
  */
 public class AdocServlet extends HttpServlet  {
   
   private static final String DOT = ".";
-  private static final String HTMLEXT = ".html";
+  private static final String HTML = "html";
+  private static final String PDF = "pdf";
+  private static final String SERVLET_NAME = "AdocServlet";
   
   /**
-   * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
-   * methods.
+   * Die Methode processRequest verarbeitet HTTP-Anfragen des Typs  
+   * <code>GET</code> und <code>POST</code>.
    *
-   * @param request servlet request
-   * @param response servlet response
-   * @throws ServletException if a servlet-specific error occurs
-   * @throws IOException if an I/O error occurs
+   * @param request die Servlet-Anfrage
+   * @param response die Servlet-Antwort
+   * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert
+   * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert
    */
   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException 
   {
-    response.setContentType("text/html;charset=UTF-8");
-    try (PrintWriter out = response.getWriter()) {
 
-      // Asciidoc-Quelldatei aus HTTP-Request ermitteln
-      String vPath = request.getServletPath();
-      String absname = getServletContext().getRealPath(vPath);
-      File adocfile = new File(absname);
-      
-      // HTML-Datei ermitteln
-      String nameext = adocfile.getName();
-      String fname = nameext.substring(0, nameext.lastIndexOf(DOT));
-      File htmlfile = new File(adocfile.getParentFile(), fname + HTMLEXT);
-      
-      /*
-        transformieren, wenn die Quelle sich geandert hat oder 
-        die HTML-Datei noch nicht existiert
-      */
-      if(!htmlfile.exists() || adocfile.lastModified() > htmlfile.lastModified()) {
-        transform(absname);
+    // Asciidoc-Quelldatei aus HTTP-Request ermitteln
+    String vPath = request.getServletPath();
+    String absname = getServletContext().getRealPath(vPath);
+    File adocfile = new File(absname);
+
+    // HTML-Datei ermitteln
+    String nameext = adocfile.getName();
+    String fname = nameext.substring(0, nameext.lastIndexOf(DOT));
+    File htmlfile = new File(adocfile.getParentFile(), fname + DOT + HTML);
+    File outfile = htmlfile; // Standardmaessig wird HTML zurueckgegeben
+    response.setContentType("text/html;charset=UTF-8");
+
+    /*
+      nach HTML transformieren, wenn die Quelle sich geandert hat oder 
+      die HTML-Datei noch nicht existiert
+    */
+    if(!htmlfile.exists() || adocfile.lastModified() > htmlfile.lastModified()) {
+      transform(absname);
+    }
+
+    /*
+      nach PDF transformieren, wenn der Parameter pdf=true existiert und 
+      wenn die Quelle sich geandert hat oder 
+      die PDF-Datei noch nicht existiert
+    */
+    String pdf = request.getParameter(PDF);
+    if(null != pdf && pdf.equalsIgnoreCase(Boolean.TRUE.toString())) {
+      File pdffile = new File(adocfile.getParentFile(), fname + DOT + PDF);
+      outfile = pdffile; // PDF soll zurueckgegeben werden
+      response.setContentType("application/pdf;charset=UTF-8");
+      if(!pdffile.exists() || adocfile.lastModified() > pdffile.lastModified()) {
+        transform(absname, PDF);
       }
+    }
       
-      FileInputStream in = new FileInputStream(htmlfile);
+    try (PrintWriter out = response.getWriter()) {
+      // abhaengig vom Parameter pdf HTML- oder PDF-Datei ausgeben
+      FileInputStream in = new FileInputStream(outfile);
       BufferedReader reader = new BufferedReader(new InputStreamReader(in));
       String line;
       while ((line = reader.readLine()) != null) {
@@ -89,57 +110,52 @@
     }
   }
   
-  private void transform(String absoluteFileName) {
-    Asciidoctor asciidoctor = create();    
-    Map<String, Object> attributes = attributes()
-                                        .noFooter(false)
-                                        //.tableOfContents(true) 
-                                        //.sectionNumbers(true)
-                                        .asMap();
-    Map<String, Object> options = options().inPlace(false)
-                                       .attributes(attributes) 
-                                       .asMap();     
-    asciidoctor.convertFile(new File(absoluteFileName), options);
-  }  
-
-  private void test(HttpServletRequest request, HttpServletResponse response) 
-          throws IOException 
-  {
-    response.setContentType("text/html;charset=UTF-8");
-    try (PrintWriter out = response.getWriter()) {
-      /* TODO output your page here. You may use following sample code. */
-      out.println("<!DOCTYPE html>");
-      out.println("<html>");
-      out.println("<head>");
-      out.println("<title>Servlet AdocServlet</title>");      
-      out.println("</head>");
-      out.println("<body>");
-      out.println("<h1>Servlet AdocServlet at " + request.getContextPath() + "</h1>");
-      
-      out.println("<p>request.getRequestURI(): " + request.getRequestURI() + "</p>");
-      out.println("<p>request.getRequestURL(): " + request.getRequestURL() + "</p>");
-      out.println("<p>request.getServletPath(): " + request.getServletPath() + "</p>");
-      out.println("<p>request.getPathInfo(): " + request.getPathInfo() + "</p>");
-
-      String vPath = request.getServletPath();
-      out.println("<p>vPath: " + vPath);
-      out.println("<p>getServletContext().getRealPath(vPath): " + 
-              getServletContext().getRealPath(vPath) + "</p>");
-      
-      out.println("</body>");
-      out.println("</html>");
-    }
-    
-  }
-  
-  // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
   /**
-   * Handles the HTTP <code>GET</code> method.
+   * Nach HTML transformieren
+   * @param fileName der Dateiname der Quelldatei samt absoluter Pfadangabe
+   */
+  private void transform(String fileName) {
+    transform(fileName, null);
+  }  
+  
+  /**
+   * In ein Format transformieren, das von einem 'Backend' von Asciidoctor 
+   * unterstuetzt wird
+   * @param fileName der Dateiname der Quelldatei samt absoluter Pfadangabe
+   * @param backend das Kuerzel des Backends, z.B. der String 'pdf', wenn 
+   * nach PDF transformiert werden soll
+   */
+  private void transform(String fileName, String backend) {    
+    /*
+    Map<String, Object> attributes = new HashMap<>();
+    attributes.put("no_footer", false);
+    //attributes.put("source_highlighter", "highlightjs");
+
+    Map<String, Object> options = new HashMap<>();
+    options.put("attributes", attributes); 
+    options.put("in_place", false); 
+    if(null != backend) {
+      options.put("backend", backend);
+    }
+    */
+    
+    Map<String, Object> attributes = attributes().sourceHighlighter("highlightjs")
+                                       .asMap();
+    Map<String, Object> options = options().inPlace(false).attributes(attributes)
+                                       .asMap();
+
+    
+    Asciidoctor asciidoctor = create();    
+    asciidoctor.convertFile(new File(fileName), options);    
+  }
+
+  /**
+   * Die HTTP-<code>GET</code>-Methode verarbeiten.
    *
-   * @param request servlet request
-   * @param response servlet response
-   * @throws ServletException if a servlet-specific error occurs
-   * @throws IOException if an I/O error occurs
+   * @param request die Servlet-Anfrage
+   * @param response die Servlet-Antwort
+   * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert
+   * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert
    */
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
@@ -148,12 +164,12 @@
   }
 
   /**
-   * Handles the HTTP <code>POST</code> method.
+   * Die HTTP-<code>POST</code>-Methode verarbeiten.
    *
-   * @param request servlet request
-   * @param response servlet response
-   * @throws ServletException if a servlet-specific error occurs
-   * @throws IOException if an I/O error occurs
+   * @param request die Servlet-Anfrage
+   * @param response die Servlet-Antwort
+   * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert
+   * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert
    */
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
@@ -162,13 +178,13 @@
   }
 
   /**
-   * Returns a short description of the servlet.
+   * Eine Kurzbeschreibung des Servlets ausgeben.
    *
-   * @return a String containing servlet description
+   * @return einen String mit der Kurzbeschreibung des Servlets
    */
   @Override
   public String getServletInfo() {
-    return "AdocServlet";
-  }// </editor-fold>
+    return SERVLET_NAME;
+  }
 
 }

--
Gitblit v1.9.3