Link documentation to new (work in progress) docs index
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/a9b50301 Tree: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/tree/a9b50301 Diff: http://git-wip-us.apache.org/repos/asf/tomee-site-generator/diff/a9b50301 Branch: refs/heads/master Commit: a9b50301eab3460c8d69698c395accecf2e25a14 Parents: efed31f Author: dblevins <[email protected]> Authored: Mon Nov 26 01:04:27 2018 -0800 Committer: dblevins <[email protected]> Committed: Mon Nov 26 01:04:27 2018 -0800 ---------------------------------------------------------------------- .../java/org/apache/tomee/website/Docs.java | 91 ++++++++++++++++++++ .../java/org/apache/tomee/website/JBake.java | 8 +- .../java/org/apache/tomee/website/Sources.java | 18 ++-- .../org/apache/tomee/website/VersionIndex.java | 67 ++++++++++++++ .../org/apache/tomee/website/VersionsIndex.java | 70 +++++++++++++++ src/main/jbake/templates/menu.gsp | 1 - 6 files changed, 245 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/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 500cf3a..547837a 100644 --- a/src/main/java/org/apache/tomee/website/Docs.java +++ b/src/main/java/org/apache/tomee/website/Docs.java @@ -17,9 +17,15 @@ 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.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class Docs { @@ -40,5 +46,90 @@ public class Docs { } catch (IOException e) { throw new RuntimeException(e); } + + if (!hasIndex(destDocs)) { + buildIndex(destDocs); + } + } + + private boolean hasIndex(final File destDocs) { + return Stream.of(destDocs.listFiles()) + .filter(File::isFile) + .filter(file -> file.getName().startsWith("index.")) + .filter(this::isRendered) + .findFirst().isPresent(); + } + + private void buildIndex(final File destDocs) { + 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) + .collect(Collectors.toList()); + + final StringBuilder index = new StringBuilder(); + index.append(":jbake-type: page\n") + .append(":jbake-status: published\n") + .append(":jbake-title: Documentation\n") + .append("\n") + .append("Documentation\n\n") + ; + + index.append(Join.join("\n", links)); + + IO.copy(IO.read(index.toString()), new File(destDocs, "index.adoc")); + + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private Link toLink(final File base, final Path path) { + final int baseLength = base.getAbsolutePath().length() + 1; + + final String href = path.toFile().getAbsolutePath().substring(baseLength) + .replace(".adoc", ".html") + .replace(".mdtext", ".html") + .replace(".md", ".html"); + + final String name = href.replace(".html", ""); + return new Link(href, name); + } + + public static class Link { + private final String href; + private final String name; + + public Link(final String href, final String name) { + this.href = href; + this.name = name; + } + + public String getHref() { + return href; + } + + public String getName() { + return name; + } + + public String toAdoc() { + return " - link:" + href + "[" + name + "]"; + } + } + + private boolean isRendered(final Path path) { + final File file = path.toFile(); + return isRendered(file); + } + + private boolean isRendered(final File file) { + if (file.getName().endsWith(".mdtext")) return true; + if (file.getName().endsWith(".md")) return true; + if (file.getName().endsWith(".adoc")) return true; + if (file.getName().endsWith(".html")) return true; + return false; } } http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/src/main/java/org/apache/tomee/website/JBake.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/JBake.java b/src/main/java/org/apache/tomee/website/JBake.java index e2e2ea9..20bbbd0 100755 --- a/src/main/java/org/apache/tomee/website/JBake.java +++ b/src/main/java/org/apache/tomee/website/JBake.java @@ -42,10 +42,10 @@ public class JBake { new File("target/jbake"), new File("repos"), new File("src/main/jbake"), - new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "master", "master"), + new Source("https://github.com/dblevins/tomee.git", "tomee-8.0.x-docs", "tomee-8.0", true), new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-7.1.0", "tomee-7.1"), new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-7.0.5", "tomee-7.0"), - new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "tomee-8.0.0-M1", "tomee-8.0", true) + new Source("https://git-wip-us.apache.org/repos/asf/tomee.git", "master", "master") ); sources.prepare(); @@ -200,11 +200,11 @@ public class JBake { final File fileLayoutPdf = new File(adminFolder, "file-layout.pdf"); final File dirStructurePdf = new File(adminFolder, "directory-structure.pdf"); - if(fileLayoutPdf.exists()){ + if (fileLayoutPdf.exists()) { FileUtils.copyFile(fileLayoutPdf, dirStructurePdf); } - if(fileLayoutHtml.exists()){ + if (fileLayoutHtml.exists()) { FileUtils.copyFile(fileLayoutHtml, dirStructureHtml); } } http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/src/main/java/org/apache/tomee/website/Sources.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/Sources.java b/src/main/java/org/apache/tomee/website/Sources.java index c8592a4..3af5ca4 100644 --- a/src/main/java/org/apache/tomee/website/Sources.java +++ b/src/main/java/org/apache/tomee/website/Sources.java @@ -64,6 +64,10 @@ public class Sources { return destination; } + public List<Source> getSources() { + return sources; + } + /** * This is the heart of the code to merge several documentation * sources into one tree. @@ -71,20 +75,24 @@ public class Sources { public void prepare() { final Docs docs = new Docs(this); final Examples2 examples = new Examples2(this); + final VersionIndex versionIndex = new VersionIndex(this); + + try { + IO.copyDirectory(mainSource, destination); + } catch (IOException e) { + throw new RuntimeException(e); + } sources.stream() .peek(source -> source.setDir(new File(repos, source.getName()))) .peek(Repos::download) .peek(docs::prepare) .peek(examples::prepare) + .peek(versionIndex::prepare) .forEach(Sources::done); ; - try { - IO.copyDirectory(mainSource, destination); - } catch (IOException e) { - throw new RuntimeException(e); - } + VersionsIndex.prepare(this); } public File getDestinationFor(final Source source, final String... parts) { http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/src/main/java/org/apache/tomee/website/VersionIndex.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/VersionIndex.java b/src/main/java/org/apache/tomee/website/VersionIndex.java new file mode 100644 index 0000000..68960aa --- /dev/null +++ b/src/main/java/org/apache/tomee/website/VersionIndex.java @@ -0,0 +1,67 @@ +/* + * 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.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class VersionIndex { + + private final Sources sources; + + public VersionIndex(final Sources sources) { + this.sources = sources; + } + + public void prepare(final Source source) { + final File docs = sources.getDestinationFor(source, "docs"); + final File examples = sources.getDestinationFor(source, "examples"); + + try { + final StringBuilder index = new StringBuilder(); + index.append(":jbake-type: page\n") + .append(":jbake-status: published\n") + .append(":jbake-title: ") + .append(source.getName()) + .append(" resources") + .append("\n") + .append("\n") + ; + + if (docs.exists()) { + index.append(" - link:docs[Documentation]\n"); + } + if (examples.exists()) { + index.append(" - link:examples[Examples]\n"); + } + + IO.copy(IO.read(index.toString()), new File(docs.getParentFile(), "index.adoc")); + + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/src/main/java/org/apache/tomee/website/VersionsIndex.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/tomee/website/VersionsIndex.java b/src/main/java/org/apache/tomee/website/VersionsIndex.java new file mode 100644 index 0000000..d44def4 --- /dev/null +++ b/src/main/java/org/apache/tomee/website/VersionsIndex.java @@ -0,0 +1,70 @@ +/* + * 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 java.io.File; +import java.io.IOException; + +public class VersionsIndex { + + + public static void prepare(final Sources sources) { + + + try { + final StringBuilder index = new StringBuilder(); + index.append(":jbake-type: page\n") + .append(":jbake-status: published\n") + .append(":jbake-title: Apache TomEE Documentation\n") + .append("\n") + ; + + + for (final Source source : sources.getSources()) { + if ("master".equals(source.getName())) continue; + if ("latest".equals(source.getName())) continue; + + index.append("*").append(source.getName()); + if (source.isLatest()) { + index.append(" (latest)"); + } + + index.append("*\n\n"); + + final File docs = sources.getDestinationFor(source, "docs"); + final File examples = sources.getDestinationFor(source, "examples"); + + if (docs.exists()) { + index.append(" - link:").append(source.getName()).append("/docs[Documentation]\n"); + } + if (examples.exists()) { + index.append(" - link:").append(source.getName()).append("/examples[Examples]\n"); + } + index.append("\n\n"); + } + + IO.copy(IO.read(index.toString()), new File(sources.getDestination(), "content/documentation.adoc")); + IO.copy(IO.read(index.toString()), new File(sources.getDestination(), "content/docs.adoc")); + + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/a9b50301/src/main/jbake/templates/menu.gsp ---------------------------------------------------------------------- diff --git a/src/main/jbake/templates/menu.gsp b/src/main/jbake/templates/menu.gsp index d4c46c7..d84aceb 100755 --- a/src/main/jbake/templates/menu.gsp +++ b/src/main/jbake/templates/menu.gsp @@ -27,7 +27,6 @@ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right main-nav"> <li><a href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>docs.html">Documentation</a></li> - <li><a href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>examples/index.html">Examples</a></li> <li><a href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>community/index.html">Community</a></li> <li><a href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>security/index.html">Security</a></li> <li><a href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>download-ng.html">Downloads</a></li>
