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);
+ }
+
+}