You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/01/28 09:49:11 UTC
[causeway] branch master updated: CAUSEWAY-3344: adds plantuml source block to bottom of diagrams
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 7fd436e08a CAUSEWAY-3344: adds plantuml source block to bottom of diagrams
7fd436e08a is described below
commit 7fd436e08aabc3fa5e035e6f9f897ef43f165ff6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 28 10:49:06 2023 +0100
CAUSEWAY-3344: adds plantuml source block to bottom of diagrams
---
.../domainobjects/EntityDiagramPageAbstract.java | 9 +++-
.../docgen/topics/domainobjects/_DiagramUtils.java | 30 ++++++++++--
.../applib/CausewayModuleValAsciidocApplib.java | 54 ++++++++++++++++++----
3 files changed, 79 insertions(+), 14 deletions(-)
diff --git a/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/EntityDiagramPageAbstract.java b/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/EntityDiagramPageAbstract.java
index 38faf7748d..16db814e94 100644
--- a/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/EntityDiagramPageAbstract.java
+++ b/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/EntityDiagramPageAbstract.java
@@ -45,9 +45,14 @@ public abstract class EntityDiagramPageAbstract implements HelpPage {
@Override
public AsciiDoc getContent() {
+ val title = getTitle();
+ val plantumlSource = entityTypesAsDiagram();
+
return AsciiDoc.valueOf(
- "== Entities\n\n"
- + _DiagramUtils.plantumlBlock(entityTypesAsDiagram()));
+ "== " + title + "\n\n"
+ + _DiagramUtils.plantumlBlock(plantumlSource)
+ + "\n"
+ + _DiagramUtils.plantumlSourceBlock(plantumlSource));
}
/** governs which entities to include */
diff --git a/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/_DiagramUtils.java b/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/_DiagramUtils.java
index 43a5b00adc..90a3552b5f 100644
--- a/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/_DiagramUtils.java
+++ b/extensions/core/docgen/src/main/java/org/apache/causeway/extensions/docgen/topics/domainobjects/_DiagramUtils.java
@@ -30,10 +30,32 @@ import lombok.experimental.UtilityClass;
class _DiagramUtils {
String plantumlBlock(final String diagramSource) {
- return "[plantuml]\n"
- + "--\n"
- + diagramSource
- + "--\n";
+ return adocBlockHeader("plantuml")
+ + adocDelimited("----", diagramSource);
+ }
+
+ String plantumlSourceBlock(final String diagramSource) {
+ return adocLabel("Diagram Source")
+ + adocCollapsibeBlock(
+ adocBlockHeader("source")
+ + adocLabel("Plantuml Syntax")
+ + adocDelimited("----", diagramSource));
+ }
+
+ String adocCollapsibeBlock(final String content) {
+ return "[%collapsible]\n"
+ + adocDelimited("====", content);
+ }
+ String adocBlockHeader(final String entry) {
+ return "[" + entry + "]\n";
+ }
+ String adocDelimited(final String delimiter, final String content) {
+ return delimiter + "\n"
+ + content
+ + "\n" + delimiter + "\n";
+ }
+ String adocLabel(final String label) {
+ return "." + label + "\n";
}
String multilineLabel(final String...lines) {
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
index 86dbace53c..3d8bd3ac2b 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/causeway/valuetypes/asciidoc/applib/CausewayModuleValAsciidocApplib.java
@@ -26,10 +26,10 @@ import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
+import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
import java.util.zip.Deflater;
import org.asciidoctor.Asciidoctor;
@@ -122,19 +122,57 @@ public class CausewayModuleValAsciidocApplib {
}
/**
- * Normalizes 'open' blocks, such that these are recognized by the
+ * Converts 'plantuml' blocks to 'open' blocks, such that these are recognized by the
* {@link PlantumlBlockProcessor}. Not needed otherwise.
*/
public static class OpenBlockPreProcessor extends Preprocessor {
+
+ private static enum State {
+ DISABLED,
+ BEFORE_BLOCK_START,
+ AFTER_BLOCK_STARTED;
+ State next() {
+ val values = State.values();
+ return values[(this.ordinal() + 1) % values.length];
+ }
+ }
+
@Override
public void process(final Document document, final PreprocessorReader reader) {
+
+ var state = State.DISABLED;
+
+ final List<String> processedLines = new ArrayList<>();
final List<String> lines = reader.readLines();
- val processedLines = lines.stream()
- .map(line->
- line.trim().equals("----")
- ? "--"
- : line)
- .collect(Collectors.toList());
+ for(val line : lines) {
+ val trimmedLine = line.trim();
+
+ switch(state) {
+ case DISABLED: {
+ if(trimmedLine.startsWith("[plantuml")) {
+ // condition causes a state transition
+ state = state.next();
+ }
+ }
+ case BEFORE_BLOCK_START: {
+ if(trimmedLine.equals("----")) {
+ // condition causes a state transition
+ state = state.next();
+ processedLines.add("--");
+ continue;
+ }
+ }
+ case AFTER_BLOCK_STARTED: {
+ if(trimmedLine.equals("----")) {
+ // condition causes a state transition
+ state = state.next();
+ processedLines.add("--");
+ continue;
+ }
+ }}
+ processedLines.add(line);
+ }
+
reader.restoreLines(processedLines);
}
}