Make old content jbake-compatible and clean.
Project: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/commit/3538e28d Tree: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/tree/3538e28d Diff: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/diff/3538e28d Branch: refs/heads/master Commit: 3538e28d8b0c74a9760de39ac4b0c252ae4ef491 Parents: b34e23c Author: dblevins <[email protected]> Authored: Mon Nov 26 03:22:55 2018 -0800 Committer: dblevins <[email protected]> Committed: Mon Nov 26 03:22:55 2018 -0800 ---------------------------------------------------------------------- .../java/org/apache/tomee/website/Docs.java | 61 +++++++-- .../java/org/apache/tomee/website/Example.java | 6 +- .../org/apache/tomee/website/Examples2.java | 95 +------------ .../org/apache/tomee/website/FixMarkdown.java | 15 ++- .../org/apache/tomee/website/JbakeHeaders.java | 134 +++++++++++++++++++ 5 files changed, 201 insertions(+), 110 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/3538e28d/src/main/java/org/apache/tomee/website/Docs.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/Docs.java b/src/main/java/org/apache/tomee/website/Docs.java index 547837a..9fc6e4b 100644 --- a/src/main/java/org/apache/tomee/website/Docs.java +++ b/src/main/java/org/apache/tomee/website/Docs.java @@ -47,8 +47,42 @@ public class Docs { throw new RuntimeException(e); } + try { + Files.walk(destDocs.toPath()) + .filter(path -> path.toFile().isFile()) + .filter(path -> path.toFile().getName().endsWith(".mdtext")) + .forEach(path -> renameMdtextFile(path.toFile())); + + } catch (Exception e) { + throw new RuntimeException(e); + } + + final List<Doc> docs; + try { + docs = Files.walk(destDocs.toPath()) + .filter(path -> path.toFile().isFile()) + .filter(this::isRendered) + .map(Path::toFile) + .map(path -> toLink(destDocs, path)) + .collect(Collectors.toList()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + docs.stream() + .peek(JbakeHeaders::addJbakeHeader) + .forEach(FixMarkdown::process); + ; + if (!hasIndex(destDocs)) { - buildIndex(destDocs); + buildIndex(destDocs, docs); + } + } + + private void renameMdtextFile(final File file) { + final File newName = new File(file.getParentFile(), file.getName().replace(".mdtext", ".md")); + if (!file.renameTo(newName)) { + throw new IllegalStateException("Couldn't rename: " + file.getAbsolutePath() + "\n to: " + newName.getAbsolutePath()); } } @@ -60,13 +94,10 @@ public class Docs { .findFirst().isPresent(); } - private void buildIndex(final File destDocs) { + private void buildIndex(final File destDocs, final List<Doc> docs) { try { - final List<String> links = Files.walk(destDocs.toPath()) - .filter(path -> path.toFile().isFile()) - .filter(this::isRendered) - .map(path -> toLink(destDocs, path)) - .map(Link::toAdoc) + final List<String> links = docs.stream() + .map(Doc::toAdoc) .collect(Collectors.toList()); final StringBuilder index = new StringBuilder(); @@ -86,25 +117,31 @@ public class Docs { } } - private Link toLink(final File base, final Path path) { + private Doc toLink(final File base, final File file) { final int baseLength = base.getAbsolutePath().length() + 1; - final String href = path.toFile().getAbsolutePath().substring(baseLength) + final String href = file.getAbsolutePath().substring(baseLength) .replace(".adoc", ".html") .replace(".mdtext", ".html") .replace(".md", ".html"); final String name = href.replace(".html", ""); - return new Link(href, name); + return new Doc(href, name, file); } - public static class Link { + public static class Doc { private final String href; private final String name; + private final File source; - public Link(final String href, final String name) { + public Doc(final String href, final String name, final File source) { this.href = href; this.name = name; + this.source = source; + } + + public File getSource() { + return source; } public String getHref() { http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/3538e28d/src/main/java/org/apache/tomee/website/Example.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/Example.java b/src/main/java/org/apache/tomee/website/Example.java index 152729b..f8ec9a9 100644 --- a/src/main/java/org/apache/tomee/website/Example.java +++ b/src/main/java/org/apache/tomee/website/Example.java @@ -67,9 +67,13 @@ public class Example { } public static Example from(final File readme) { - final String ext = readme.getName().replaceFirst("[^.]+\\.", ""); + final String ext = getExtension(readme); final String exampleName = readme.getParentFile().getName(); return new Example(readme, exampleName, ext, exampleName + ".html", "Example"); } + + public static String getExtension(final File readme) { + return readme.getName().replaceFirst("[^.]+\\.", ""); + } } http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/3538e28d/src/main/java/org/apache/tomee/website/Examples2.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/Examples2.java b/src/main/java/org/apache/tomee/website/Examples2.java index f75e885..8b3baec 100644 --- a/src/main/java/org/apache/tomee/website/Examples2.java +++ b/src/main/java/org/apache/tomee/website/Examples2.java @@ -17,12 +17,9 @@ package org.apache.tomee.website; import org.apache.openejb.loader.IO; -import org.apache.openejb.util.Join; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -49,7 +46,7 @@ public class Examples2 { .map(Example::from) .peek(example -> example.updateDestination(destDir)) .peek(this::copyToDest) - .peek(this::addJbakeHeader) + .peek(JbakeHeaders::addJbakeHeader) .peek(FixMarkdown::process) .collect(Collectors.toList()); @@ -81,96 +78,6 @@ public class Examples2 { // https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServletMapping.html } - private void addJbakeHeader(final Example example) { - - if (example.getExt().startsWith("md")) { - - addMarkdownHeader(example); - - } else if (example.getExt().startsWith("a")) { - - addAsciidocHeader(example); - } - } - - private void addAsciidocHeader(final Example example) { - try { - String content = IO.slurp(example.getDestReadme()); - if (content.contains(":jbake-type:")) return; - - String header = "" + - ":jbake-type: page\n" + - ":jbake-status: published\n"; - - // The legacy Apache CMS setup for TomEE allowed a very similar header - // called "Title: " to specify the title in the created html page. - // If found, we convert it to the JBake version - // TODO all docs should be updated and this code removed - if (content.startsWith("Title:") || content.startsWith("title:")) { - final List<String> lines = new ArrayList<>(); - Collections.addAll(lines, content.split("\n")); - - // remove the legacy title syntax - final String titleLine = lines.remove(0); - - // update the header - header += ":jbake-title:" + titleLine.substring("title:".length()).trim() + "\n"; - - // update the content - content = Join.join("\n", lines); - } - - - // Prepend the JBake header for Asciidoc - content = header + content; - - // Update the destination readme file - IO.copy(IO.read(content), example.getDestReadme()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private void addMarkdownHeader(final Example example) { - try { - final File readme = example.getDestReadme(); - String content = IO.slurp(readme); - - if (content.contains("~~~~~~")) return; - - - String header = "" + - "type=page\n" + - "status=published\n"; - - // The legacy Apache CMS setup for TomEE allowed a very similar header - // called "Title: " to specify the title in the created html page. - // If found, we convert it to the JBake version - // TODO all docs should be updated and this code removed - if (content.startsWith("Title:") || content.startsWith("title:")) { - final List<String> lines = new ArrayList<>(); - Collections.addAll(lines, content.split("\n")); - - // remove the legacy title syntax - final String titleLine = lines.remove(0); - - // update the header - header += "title=" + titleLine.substring("title:".length()).trim() + "\n"; - - // update the content - content = Join.join("\n", lines); - } - - // Prepend the JBake header for Markdown - content = header + "~~~~~~\n" + content; - - // Update the destination readme file - IO.copy(IO.read(content), example.getDestReadme()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - /** * Copy all the readme.mdtext to examples/foo-bar.mdtext */ http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/3538e28d/src/main/java/org/apache/tomee/website/FixMarkdown.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/FixMarkdown.java b/src/main/java/org/apache/tomee/website/FixMarkdown.java index daad57d..6936375 100644 --- a/src/main/java/org/apache/tomee/website/FixMarkdown.java +++ b/src/main/java/org/apache/tomee/website/FixMarkdown.java @@ -19,6 +19,7 @@ package org.apache.tomee.website; import org.apache.openejb.loader.IO; import org.apache.openejb.util.Join; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -32,13 +33,21 @@ public class FixMarkdown { private Consumer<String> processor = this::findJbakeHeader; public static void process(final Example example) { - if (!example.getExt().startsWith("md")) return; + process(example.getDestReadme()); + } + + public static void process(final Docs.Doc doc) { + process(doc.getSource()); + } + + public static void process(final File destReadme) { + if (!Example.getExtension(destReadme).startsWith("md")) return; final FixMarkdown fixMarkdown = new FixMarkdown(); try { final List<String> lines = new ArrayList<>(); - Collections.addAll(lines, IO.slurp(example.getDestReadme()).split("\n")); + Collections.addAll(lines, IO.slurp(destReadme).split("\n")); for (final String line : lines) { fixMarkdown.process(line); @@ -47,7 +56,7 @@ public class FixMarkdown { fixMarkdown.process(""); // Update the destination readme file - IO.copy(IO.read(Join.join("\n", fixMarkdown.completed)), example.getDestReadme()); + IO.copy(IO.read(Join.join("\n", fixMarkdown.completed)), destReadme); } catch (IOException e) { throw new RuntimeException(e); http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/3538e28d/src/main/java/org/apache/tomee/website/JbakeHeaders.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/JbakeHeaders.java b/src/main/java/org/apache/tomee/website/JbakeHeaders.java new file mode 100644 index 0000000..51226d9 --- /dev/null +++ b/src/main/java/org/apache/tomee/website/JbakeHeaders.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomee.website; + +import org.apache.openejb.loader.IO; +import org.apache.openejb.util.Join; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class JbakeHeaders { + + public static void addJbakeHeader(final Docs.Doc doc) { + + final String extension = Example.getExtension(doc.getSource()); + + if (extension.startsWith("md")) { + + addMarkdownHeader(doc.getSource()); + + } else if (extension.startsWith("a")) { + + addAsciidocHeader(doc.getSource()); + } + } + + public static void addJbakeHeader(final Example example) { + + if (example.getExt().startsWith("md")) { + + addMarkdownHeader(example.getDestReadme()); + + } else if (example.getExt().startsWith("a")) { + + addAsciidocHeader(example.getDestReadme()); + } + } + + private static void addAsciidocHeader(final File destReadme) { + try { + String content = IO.slurp(destReadme); + if (content.contains(":jbake-type:")) return; + + String header = "" + + ":jbake-type: page\n" + + ":jbake-status: published\n"; + + // The legacy Apache CMS setup for TomEE allowed a very similar header + // called "Title: " to specify the title in the created html page. + // If found, we convert it to the JBake version + // TODO all docs should be updated and this code removed + if (content.startsWith("Title:") || content.startsWith("title:")) { + final List<String> lines = new ArrayList<>(); + Collections.addAll(lines, content.split("\n")); + + // remove the legacy title syntax + final String titleLine = lines.remove(0); + + // update the header + header += ":jbake-title:" + titleLine.substring("title:".length()).trim() + "\n"; + + // update the content + content = Join.join("\n", lines); + } + + + // Prepend the JBake header for Asciidoc + content = header + content; + + // Update the destination readme file + IO.copy(IO.read(content), destReadme); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static void addMarkdownHeader(final File destReadme) { + try { + final File readme = destReadme; + String content = IO.slurp(readme); + + if (content.contains("~~~~~~")) return; + + + String header = "" + + "type=page\n" + + "status=published\n"; + + // The legacy Apache CMS setup for TomEE allowed a very similar header + // called "Title: " to specify the title in the created html page. + // If found, we convert it to the JBake version + // TODO all docs should be updated and this code removed + if (content.startsWith("Title:") || content.startsWith("title:")) { + final List<String> lines = new ArrayList<>(); + Collections.addAll(lines, content.split("\n")); + + // remove the legacy title syntax + final String titleLine = lines.remove(0); + + // update the header + header += "title=" + titleLine.substring("title:".length()).trim() + "\n"; + + // update the content + content = Join.join("\n", lines); + } + + // Prepend the JBake header for Markdown + content = header + "~~~~~~\n" + content; + + // Update the destination readme file + IO.copy(IO.read(content), destReadme); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +}
