From 3bbfbc4952bf689a2f9024edc542ef609bc5c672 Mon Sep 17 00:00:00 2001
From: ulrich@undisclosed
Date: Tue, 21 Apr 2020 15:41:33 +0000
Subject: [PATCH] Code fuer die Transformation ueberarbeitet

---
 src/de/uhilger/wbx/web/AdocServlet.java |   85 ++++++++++++++++++++----------------------
 1 files changed, 40 insertions(+), 45 deletions(-)

diff --git a/src/de/uhilger/wbx/web/AdocServlet.java b/src/de/uhilger/wbx/web/AdocServlet.java
index 7b219b6..73f459e 100644
--- a/src/de/uhilger/wbx/web/AdocServlet.java
+++ b/src/de/uhilger/wbx/web/AdocServlet.java
@@ -24,6 +24,7 @@
 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;
@@ -34,18 +35,22 @@
 import static org.asciidoctor.OptionsBuilder.options;
 import static org.asciidoctor.Asciidoctor.Factory.create;
 import org.asciidoctor.Asciidoctor;
+import org.asciidoctor.OptionsBuilder;
 
 
 
 /**
  * Das AdocServlet wandelt AsciiDoc-Inhalte (*.adoc) 
- * zu HTML-Seiten
+ * zu HTML-Seiten und PDF-Dokumenten
  * 
+ * ?pdf=true im URL fuegt PDF-Ausgabe hinzu
  */
 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>
@@ -70,16 +75,30 @@
       // HTML-Datei ermitteln
       String nameext = adocfile.getName();
       String fname = nameext.substring(0, nameext.lastIndexOf(DOT));
-      File htmlfile = new File(adocfile.getParentFile(), fname + HTMLEXT);
+      File htmlfile = new File(adocfile.getParentFile(), fname + DOT + HTML);
       
       /*
-        transformieren, wenn die Quelle sich geandert hat oder 
+        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.length() > 0 && pdf.equalsIgnoreCase(Boolean.TRUE.toString())) {
+        File pdffile = new File(adocfile.getParentFile(), fname + DOT + PDF);
+        if(!pdffile.exists() || adocfile.lastModified() > pdffile.lastModified()) {
+          transform(absname, PDF);
+        }
+      }
       
+      // HTML-Datei ausgeben
       FileInputStream in = new FileInputStream(htmlfile);
       BufferedReader reader = new BufferedReader(new InputStreamReader(in));
       String line;
@@ -89,50 +108,26 @@
     }
   }
   
-  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 transform(String fileName) {
+    transform(fileName, null);
   }  
+  
+  private void transform(String fileName, String backend) {    
+    Map<String, Object> attributes = new HashMap<>();
+    attributes.put("no_footer", false);
+    attributes.put("source_highlighter", "highlightjs");
 
-  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>");
+    Map<String, Object> options = new HashMap<>();
+    options.put("attributes", attributes); 
+    options.put("in_place", false); 
+    if(null != backend) {
+      options.put("backend", backend);
     }
     
+    Asciidoctor asciidoctor = create();    
+    asciidoctor.convertFile(new File(fileName), options);    
   }
-  
-  // <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.
    *
@@ -168,7 +163,7 @@
    */
   @Override
   public String getServletInfo() {
-    return "AdocServlet";
-  }// </editor-fold>
+    return SERVLET_NAME;
+  }
 
 }

--
Gitblit v1.9.3