| | |
| | | package de.uhilger.httpserver.adoc; |
| | | |
| | | import com.sun.net.httpserver.HttpExchange; |
| | | import de.uhilger.httpserver.base.HttpResponder; |
| | | import com.sun.net.httpserver.HttpHandler; |
| | | import de.uhilger.httpserver.base.handler.FileHandler; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.net.URI; |
| | | import java.util.logging.Logger; |
| | | |
| | | /** |
| | | * Der AdocHandler verwendet den FileHandler zur Auslieferung statischer |
| | | * Inhalte und einen AdocFilter, um vorab zu pruefen, ob fuer eine |
| | | * Asciidoctor-Quelldatei bereits eine HTML-Version vorliegt. Wenn nicht, |
| | | * verwendet der AdocFilter den AdocActor, um eine HTML-Version zu erzeugen, |
| | | * die dann vom AdocHandler mit Hilfe der Methoden des FileHandler |
| | | * ausgeliefert werden kann. |
| | | * Der AdocHandler liefert die HTML-Version einer Asciidoc-Quelldatei aus. |
| | | * |
| | | * Dazu muss ein AdocHandler mit dem PatternDelegator an einen Pfad |
| | | * geknuepft werden, der Dateien mit der Endung adoc bezeichnet. |
| | | * |
| | | * Ein dafuer geeigneter regulaerer Ausdruck ist z.B. <br /> |
| | | * <pre> |
| | | * .+\\.adoc |
| | | * </pre> |
| | | * |
| | | * Zum Ausliefern der HTML-Version delegiert der AdocHandler an eine |
| | | * Instanz des AdocActors. |
| | | * |
| | | * Zum Erzeugen der HTML-Version muss ein AdocFilter mit dem HttpContext |
| | | * verbunden sein, an den der AdocHandler gebunden ist. |
| | | * |
| | | * Benoetigt das Attribut |
| | | * FileHandler.ATTR_FILE_BASE |
| | | * |
| | | * @author Ulrich Hilger |
| | | * @version 1, 16.06.2021 |
| | | */ |
| | | public class AdocHandler extends FileHandler { |
| | | public class AdocHandler implements HttpHandler { |
| | | |
| | | private static final Logger logger = Logger.getLogger(AdocHandler.class.getName()); |
| | | |
| | | public AdocHandler(String absoluteDirectoryPathAndName) { |
| | | super(absoluteDirectoryPathAndName); |
| | | } |
| | | |
| | | @Override |
| | | public void handle(HttpExchange e) throws IOException { |
| | | URI uri = e.getRequestURI(); |
| | | logger.fine(uri.toString()); |
| | | String query = uri.getQuery(); |
| | | //String[] params = query.split("?&"); // hier noch Regex ermitteln |
| | | String requestPathStr = uri.getPath(); |
| | | //logger.fine("filter: " + requestUriStr); |
| | | if(requestPathStr.toLowerCase().endsWith(AdocFilter.ADOC)) { |
| | | File adocfile = new File(fileBase, getFileName(e)); |
| | | logger.fine("adocfile: " + adocfile.getAbsolutePath()); |
| | | AdocActor actor = new AdocActor(); |
| | | File outfile = actor.getTargetFile(adocfile, AdocActor.HTML); |
| | | logger.fine("outfile: " + outfile.getAbsolutePath()); |
| | | HttpResponder fs = new HttpResponder(); |
| | | fs.serveFile(e, outfile); |
| | | } else { |
| | | super.handle(e); // andere Inhalte zu FileHandler delegieren |
| | | } |
| | | |
| | | String ctxPath = e.getHttpContext().getPath(); |
| | | String uriPath = e.getRequestURI().getPath(); |
| | | String fName = uriPath.substring(ctxPath.length()); |
| | | |
| | | AdocActor actor = new AdocActor(); |
| | | actor.handle(e, e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fName); |
| | | } |
| | | |
| | | public String getFileBase() { |
| | | return this.fileBase; |
| | | } |
| | | |
| | | |
| | | } |