WebBox Klassenbibliothek
ulrich@undisclosed
2020-04-21 3bbfbc4952bf689a2f9024edc542ef609bc5c672
Code fuer die Transformation ueberarbeitet
1 files modified
62 ■■■■ changed files
src/de/uhilger/wbx/web/AdocServlet.java 62 ●●●● patch | view | raw | blame | history
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,6 +35,7 @@
import static org.asciidoctor.OptionsBuilder.options;
import static org.asciidoctor.Asciidoctor.Factory.create;
import org.asciidoctor.Asciidoctor;
import org.asciidoctor.OptionsBuilder;
@@ -46,8 +48,7 @@
public class AdocServlet extends HttpServlet  {
  
  private static final String DOT = ".";
  private static final String HTMLEXT = ".html";
  private static final String PDFEXT = ".pdf";
  private static final String HTML = "html";
  private static final String PDF = "pdf";
  private static final String SERVLET_NAME = "AdocServlet";
  
@@ -74,21 +75,26 @@
      // 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, htmlfile);
        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 + PDFEXT);
        File pdffile = new File(adocfile.getParentFile(), fname + DOT + PDF);
        if(!pdffile.exists() || adocfile.lastModified() > pdffile.lastModified()) {
          transform(absname, pdffile);
          transform(absname, PDF);
        }
      }
      
@@ -102,31 +108,25 @@
    }
  }
  
  private void transform(String absoluteFileName, File target) {
    Map<String, Object> options = null;
    Map<String, Object> attributes;
    Asciidoctor asciidoctor = create();
    String fname = target.getName().toLowerCase();
    if(fname.endsWith(HTMLEXT)) {
      attributes = attributes().noFooter(false)
                                .sourceHighlighter("highlightjs")
                                //.tableOfContents(true)
                                //.sectionNumbers(true)
                                .asMap();
      options = options().inPlace(false)
                                .attributes(attributes)
                                .asMap();
    } else if(fname.endsWith(PDFEXT)) {
      attributes = attributes().noFooter(false)
                                .asMap();
      options = options().inPlace(false)
                          .attributes(attributes)
                          .backend("pdf")
                          .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");
    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);
  }
  /**
   * Handles the HTTP <code>GET</code> method.