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