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 cc0cc3eaca CAUSEWAY-3565: moving and renaming assets for d3js graph 
renderer
cc0cc3eaca is described below

commit cc0cc3eaca584549d867cb5e0443926577cc521f
Author: andi-huber <[email protected]>
AuthorDate: Sat Sep 9 05:16:07 2023 +0200

    CAUSEWAY-3565: moving and renaming assets for d3js graph renderer
---
 .../objgraph/d3js/ObjectGraphRendererD3js.java     | 41 +++++++++++++++-------
 .../force-directed-graph.css}                      |  0
 .../force-directed-graph.js}                       |  4 +--
 .../{svgCheckBox.js => assets/svg-checkbox.js}     |  0
 .../objgraph/d3js/ObjectGraphRendererD3jsTest.java | 21 +++++++++++
 5 files changed, 52 insertions(+), 14 deletions(-)

diff --git 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3js.java
 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3js.java
index 7553430908..07959e5308 100644
--- 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3js.java
+++ 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3js.java
@@ -18,17 +18,22 @@
  */
 package org.apache.causeway.valuetypes.asciidoc.builder.objgraph.d3js;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.causeway.applib.services.metamodel.ObjectGraph;
-import org.apache.causeway.commons.io.DataSource;
+import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.io.JsonUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.Builder;
 import lombok.Getter;
+import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.val;
 
 @RequiredArgsConstructor
@@ -58,7 +63,9 @@ public class ObjectGraphRendererD3js implements 
ObjectGraph.Renderer {
         public static class Node {
             int id;
             String label;
-            String group; // future use
+            /** Governs node color. */
+            String group;
+            /** Shown as tooltip. */
             String description;
         }
         @lombok.Value
@@ -109,12 +116,15 @@ public class ObjectGraphRendererD3js implements 
ObjectGraph.Renderer {
     }
 
     protected void renderSvg(final StringBuilder sb, final D3jsGraph 
d3jsGraph) {
+
+        val noteText = "Note: Dragging nodes leaves them sticky. 
Double-clicking releases them.";
+
         sb.append("<div class=\"svg-container\">\n");
         sb.append("<svg xmlns=\"http://www.w3.org/2000/svg\"; 
class=\"force-directed-graph\">\n");
         sb.append("<script>\n");
         sb.append("var d3jsGraph =\n");
         sb.append(JsonUtils.toStringUtf8(d3jsGraph)).append("\n");
-        sb.append("renderForceDirectedGraph(d3jsGraph);\n");
+        sb.append(String.format("renderForceDirectedGraph(d3jsGraph, 
\"%s\");\n", noteText));
         sb.append("</script>\n");
         sb.append("</svg>\n");
         sb.append("</div>\n");
@@ -126,9 +136,7 @@ public class ObjectGraphRendererD3js implements 
ObjectGraph.Renderer {
         // -- CSS
 
         sb.append("<style>\n");
-        sb.append(DataSource.ofResource(ObjectGraphRendererD3js.class, 
"g-style.css")
-                .tryReadAsStringUtf8()
-                .valueAsNonNullElseFail());
+        sb.append(readAsset("force-directed-graph.css"));
         sb.append("\n</style>\n");
 
         // -- JS
@@ -137,15 +145,24 @@ public class ObjectGraphRendererD3js implements 
ObjectGraph.Renderer {
         sb.append("var ropts = ")
             .append(graphRenderOptions.toJavaScript())
             .append(";\n");
-        sb.append(DataSource.ofResource(ObjectGraphRendererD3js.class, 
"svgCheckBox.js")
-                .tryReadAsStringUtf8()
-                .valueAsNonNullElseFail());
-        sb.append(DataSource.ofResource(ObjectGraphRendererD3js.class, 
"force-directed-graph-1.0.js")
-                .tryReadAsStringUtf8()
-                .valueAsNonNullElseFail());
+        sb.append(readAsset("svg-checkbox.js"));
+        sb.append(readAsset("force-directed-graph.js"));
         sb.append("\n</script>\n");
     }
 
+    /** skips 18 license header lines and any single line comments as well as 
empty lines */
+    @SneakyThrows
+    private String readAsset(
+            final @NonNull String resourceName) {
+        return TextUtils.readLinesFromResource(
+                ObjectGraphRendererD3js.class, "assets/" + resourceName, 
StandardCharsets.UTF_8)
+                .filter(_Strings::isNotEmpty)
+                .filter(line->!line.trim().startsWith("//"))
+                .stream()
+                .skip(18) // skip license header
+                .collect(Collectors.joining("\n"));
+    }
+
 }
 
 
diff --git 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/g-style.css
 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/force-directed-graph.css
similarity index 100%
rename from 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/g-style.css
rename to 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/force-directed-graph.css
diff --git 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/force-directed-graph-1.0.js
 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/force-directed-graph.js
similarity index 98%
rename from 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/force-directed-graph-1.0.js
rename to 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/force-directed-graph.js
index c982656804..88e236c7ce 100644
--- 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/force-directed-graph-1.0.js
+++ 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/force-directed-graph.js
@@ -123,7 +123,7 @@ var rmodel = {
                rerenderFunction : null
        };
 
-function renderForceDirectedGraph(data) {
+function renderForceDirectedGraph(data, noteText) {
 
        var svg = d3.select(".force-directed-graph");
 
@@ -140,7 +140,7 @@ function renderForceDirectedGraph(data) {
                svg.append("text")
                        .attr("x", 5)
                        .attr("y", 5+24*3.6)
-                       .text("Note: Double-click on any node to release it 
from stickyness.");
+                       .text(noteText);
                
                var updateCB = function () {
                
diff --git 
a/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/svgCheckBox.js
 
b/valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/svg-checkbox.js
similarity index 100%
rename from 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/svgCheckBox.js
rename to 
valuetypes/asciidoc/builder/src/main/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/assets/svg-checkbox.js
diff --git 
a/valuetypes/asciidoc/builder/src/test/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3jsTest.java
 
b/valuetypes/asciidoc/builder/src/test/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3jsTest.java
new file mode 100644
index 0000000000..726ac58be2
--- /dev/null
+++ 
b/valuetypes/asciidoc/builder/src/test/java/org/apache/causeway/valuetypes/asciidoc/builder/objgraph/d3js/ObjectGraphRendererD3jsTest.java
@@ -0,0 +1,21 @@
+package org.apache.causeway.valuetypes.asciidoc.builder.objgraph.d3js;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import 
org.apache.causeway.valuetypes.asciidoc.builder.objgraph.d3js.ObjectGraphRendererD3js.GraphRenderOptions;
+
+class ObjectGraphRendererD3jsTest {
+
+    @Test
+    void canReadAssets() {
+        final var sb = new StringBuilder();
+
+        new ObjectGraphRendererD3js(GraphRenderOptions.builder().build())
+            .renderProlog(sb);
+
+        assertTrue(sb.toString().length()>100);
+    }
+
+}

Reply via email to