From 1385d2dd22c7bf8189c68a876037779555a22443 Mon Sep 17 00:00:00 2001
From: ulrich <ulrich@ulrich-vaio>
Date: Thu, 16 Apr 2020 07:56:12 +0000
Subject: [PATCH] Asciidoctor Servlet eingebaut

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

diff --git a/src/de/uhilger/wbx/web/AdocServlet.java b/src/de/uhilger/wbx/web/AdocServlet.java
new file mode 100644
index 0000000..7b219b6
--- /dev/null
+++ b/src/de/uhilger/wbx/web/AdocServlet.java
@@ -0,0 +1,174 @@
+/*
+    WebBox - Dein Server.
+    Copyright (C) 2020 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.wbx.web;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+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;
+
+
+
+/**
+ * Das AdocServlet wandelt AsciiDoc-Inhalte (*.adoc) 
+ * zu HTML-Seiten
+ * 
+ */
+public class AdocServlet extends HttpServlet  {
+  
+  private static final String DOT = ".";
+  private static final String HTMLEXT = ".html";
+  
+  /**
+   * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
+   * methods.
+   *
+   * @param request servlet request
+   * @param response servlet response
+   * @throws ServletException if a servlet-specific error occurs
+   * @throws IOException if an I/O error occurs
+   */
+  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);
+      }
+      
+      FileInputStream in = new FileInputStream(htmlfile);
+      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+      String line;
+      while ((line = reader.readLine()) != null) {
+        out.println(line);
+      }
+    }
+  }
+  
+  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.
+   *
+   * @param request servlet request
+   * @param response servlet response
+   * @throws ServletException if a servlet-specific error occurs
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  protected void doGet(HttpServletRequest request, HttpServletResponse response)
+          throws ServletException, IOException {
+    processRequest(request, response);
+  }
+
+  /**
+   * Handles the HTTP <code>POST</code> method.
+   *
+   * @param request servlet request
+   * @param response servlet response
+   * @throws ServletException if a servlet-specific error occurs
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  protected void doPost(HttpServletRequest request, HttpServletResponse response)
+          throws ServletException, IOException {
+    processRequest(request, response);
+  }
+
+  /**
+   * Returns a short description of the servlet.
+   *
+   * @return a String containing servlet description
+   */
+  @Override
+  public String getServletInfo() {
+    return "AdocServlet";
+  }// </editor-fold>
+
+}

--
Gitblit v1.9.3