You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/09/30 09:42:43 UTC
[isis] branch master updated: ISIS-3122: render vega payload
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/isis.git
The following commit(s) were added to refs/heads/master by this push:
new b89285976d ISIS-3122: render vega payload
b89285976d is described below
commit b89285976d1167f3720b30b75a2b178852f0f5d9
Author: andi-huber <ah...@apache.org>
AuthorDate: Fri Sep 30 11:42:37 2022 +0200
ISIS-3122: render vega payload
---
.../object/{MmTitleUtil.java => MmRenderUtil.java} | 29 +-----------------
.../isis/core/metamodel/object/MmTitleUtil.java | 29 ------------------
.../isis/valuetypes/vega/applib/value/Vega.java | 4 ---
.../metamodel/semantics/VegaValueSemantics.java | 35 +++++++++++++++++++---
valuetypes/vega/ui/pom.xml | 2 ++
.../vega/ui/wkt/components/VegaComponentWkt.java | 2 +-
.../ui/wkt/components/VegaPanelFactoriesWkt.java | 3 +-
.../components/scalars/markup/MarkupComponent.java | 4 +--
.../ui/components/value/StandaloneValuePanel.java | 4 +--
9 files changed, 40 insertions(+), 72 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmRenderUtil.java
similarity index 64%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmRenderUtil.java
index 8e9c9c7584..504757d9bf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmRenderUtil.java
@@ -18,29 +18,16 @@
*/
package org.apache.isis.core.metamodel.object;
-import java.util.function.Predicate;
-
import org.springframework.lang.Nullable;
import org.apache.isis.applib.value.semantics.Renderer;
-import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import lombok.val;
import lombok.experimental.UtilityClass;
@UtilityClass
-public class MmTitleUtil {
-
- public String abbreviatedTitleOf(final ManagedObject adapter, final int maxLength, final String suffix) {
- return _InternalTitleUtil.abbreviated(titleOf(adapter), maxLength, suffix);
- }
-
- public String titleOf(final ManagedObject adapter) {
- return adapter!=null
- ? adapter.getTitle()
- : "";
- }
+public class MmRenderUtil {
public String htmlStringForValueType(
final @Nullable ManagedObject adapter,
@@ -66,18 +53,4 @@ public class MmTitleUtil {
return renderer.htmlPresentation(valueFacet.createValueSemanticsContext(feature), adapter.getPojo());
}
- public String getTitleHonoringTitlePartSkipping(
- final ManagedObject managedObject,
- final Predicate<ManagedObject> skipTitlePart) {
- return ManagedObjects.isPacked(managedObject)
- ? "(multiple objects)"
- : managedObject != null
- ? _InternalTitleUtil.titleString(
- TitleRenderRequest.builder()
- .object(managedObject)
- .skipTitlePartEvaluator(skipTitlePart)
- .build())
- : "(no object)";
- }
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
index 8e9c9c7584..c22afb8b4b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
@@ -20,13 +20,8 @@ package org.apache.isis.core.metamodel.object;
import java.util.function.Predicate;
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.value.semantics.Renderer;
import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import lombok.val;
import lombok.experimental.UtilityClass;
@UtilityClass
@@ -42,30 +37,6 @@ public class MmTitleUtil {
: "";
}
- public String htmlStringForValueType(
- final @Nullable ManagedObject adapter,
- final @Nullable ObjectFeature feature) {
-
- if(!ManagedObjects.isSpecified(adapter)) {
- return "";
- }
-
- val spec = adapter.getSpecification();
- val valueFacet = spec.valueFacet().orElse(null);
-
- if(valueFacet==null) {
- return String.format("missing ValueFacet %s", spec.getCorrespondingClass());
- }
-
- @SuppressWarnings("unchecked")
- val renderer = (Renderer<Object>) valueFacet.selectRendererForFeature(feature).orElse(null);
- if(renderer==null) {
- return String.format("missing Renderer %s", spec.getCorrespondingClass());
- }
-
- return renderer.htmlPresentation(valueFacet.createValueSemanticsContext(feature), adapter.getPojo());
- }
-
public String getTitleHonoringTitlePartSkipping(
final ManagedObject managedObject,
final Predicate<ManagedObject> skipTitlePart) {
diff --git a/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java b/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
index cef652f29a..b2d67183e4 100644
--- a/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
+++ b/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
@@ -102,10 +102,6 @@ public final class Vega implements Serializable {
: schema.asEmptyJson();
}
- public String asHtml() {
- return "Vega.asHtml()"; //TODO[ISIS-3122]
- }
-
public boolean isEqualTo(final Vega other) {
return Objects.equals(this.getJson(), other!=null ? other.getJson() : null);
}
diff --git a/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java b/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
index 38910b122e..47a772bb20 100644
--- a/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
+++ b/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.valuetypes.vega.metamodel.semantics;
+import java.util.UUID;
+
import javax.inject.Named;
import org.springframework.stereotype.Component;
@@ -33,6 +35,9 @@ import org.apache.isis.schema.common.v2.ValueType;
import org.apache.isis.valuetypes.vega.applib.IsisModuleValVegaApplib;
import org.apache.isis.valuetypes.vega.applib.value.Vega;
+import lombok.NonNull;
+import lombok.val;
+
@Component
@Named(IsisModuleValVegaApplib.NAMESPACE + ".VegaValueSemantics")
public class VegaValueSemantics
@@ -80,12 +85,34 @@ implements
@Override
public String htmlPresentation(final ValueSemanticsProvider.Context context, final Vega vega) {
- return renderHtml(vega, Vega::asHtml);
+ return renderHtml(vega, this::asHtml);
}
- @Override
- public SyntaxHighlighter syntaxHighlighter() {
- return SyntaxHighlighter.PRISM_COY;
+ /**
+ * see usage examples at https://vega.github.io/vega/usage/
+ */
+ private String asHtml(final @NonNull Vega vega) {
+ val containerId = "vegaContainer" + UUID.randomUUID().toString();
+
+ val htmlFragment = String.format(""
+ + "<div id=\"%1$s\"></div>\n"
+ + "<script type=\"text/javascript\">\n"
+ + "var spec = %2$s;\n"
+ + "document.addEventListener('DOMContentLoaded', (event) => {\n"
+ + " view = new vega.View(vega.parse(spec), {\n"
+ + " renderer: '%3$s',\n"
+ + " container: '#%1$s',\n"
+ + " hover: %4$b \n"
+ + " });\n"
+ + " view.runAsync();\n"
+ + "});"
+ + "</script>",
+ containerId,
+ vega.getJson(),
+ "canvas", // renderer (canvas or svg)
+ true // enable hover processing
+ );
+ return htmlFragment;
}
// -- PARSER
diff --git a/valuetypes/vega/ui/pom.xml b/valuetypes/vega/ui/pom.xml
index 57289bedd4..8274632bc9 100644
--- a/valuetypes/vega/ui/pom.xml
+++ b/valuetypes/vega/ui/pom.xml
@@ -43,6 +43,8 @@
</dependency>
<!-- provides VEGA API -->
+ <!-- Unfortunately the webjar {@code org.webjars.npm:vega:5.22.1} cannot be used,
+ as (at time of writing) <i>Maven</i> fails to resolve all its dependencies. -->
<!--
<dependency>
<groupId>org.webjars.npm</groupId>
diff --git a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
index 43c2b4bf85..4388d35a25 100644
--- a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
+++ b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
@@ -32,7 +32,7 @@ public class VegaComponentWkt extends MarkupComponent {
public VegaComponentWkt(final String id, final IModel<?> model){
super(id, model,
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent.Options.builder()
- .syntaxHighlighter(SyntaxHighlighter.PRISM_COY)
+ .syntaxHighlighter(SyntaxHighlighter.NONE)
.build());
}
diff --git a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaPanelFactoriesWkt.java b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaPanelFactoriesWkt.java
index 8a169427d5..8b62f0640e 100644
--- a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaPanelFactoriesWkt.java
+++ b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaPanelFactoriesWkt.java
@@ -31,8 +31,7 @@ import lombok.val;
/**
* @implNote Almost a copy of {@code Parented} and {@code Standalone} in
* {@link MarkupPanelFactories}, but specific to
- * the {@link Vega} value-type which requires client-side java-script to be
- * executed to enable syntax highlighting
+ * the {@link Vega} value-type.
*/
public class VegaPanelFactoriesWkt {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
index 3e8fbfc1d7..1391705496 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
@@ -30,7 +30,7 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.MmTitleUtil;
+import org.apache.isis.core.metamodel.object.MmRenderUtil;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import org.apache.isis.viewer.commons.model.scalar.UiParameter;
import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
@@ -106,7 +106,7 @@ public class MarkupComponent extends WebComponent {
if(modelObject instanceof ManagedObject) {
val adapter = (ManagedObject) modelObject;
val feature = lookupObjectFeatureIn(getDefaultModel()).orElse(null);
- val asHtml = MmTitleUtil.htmlStringForValueType(adapter, feature);
+ val asHtml = MmRenderUtil.htmlStringForValueType(adapter, feature);
return asHtml != null
? asHtml
: fallback;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index 9f37f50aa2..d0481277fa 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -24,7 +24,7 @@ import java.util.UUID;
import org.apache.isis.applib.services.bookmark.idstringifiers.PredefinedSerializables;
import org.apache.isis.applib.value.LocalResourcePath;
import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.MmTitleUtil;
+import org.apache.isis.core.metamodel.object.MmRenderUtil;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.viewer.wicket.model.models.ValueModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -51,7 +51,7 @@ extends PanelAbstract<ManagedObject, ValueModel> {
// (we probably need to remove StandaloneValuePanel and utilize the ScalarPanel for standalone values instead)
if(isProbablySimpleInlineHtml(valueModel.getObjectMember().getElementType())) {
Wkt.markupAdd(this, ID_STANDALONE_VALUE, ()->
- MmTitleUtil.htmlStringForValueType(getModel().getObject(), getModel().getObjectMember())
+ MmRenderUtil.htmlStringForValueType(getModel().getObject(), getModel().getObjectMember())
);
} else {
// resort to (textual) title rendering