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 2021/09/17 20:29:43 UTC
[isis] branch master updated: ISIS-2871: fixes all markup
components to actually use value semantics
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 6fbee7e ISIS-2871: fixes all markup components to actually use value semantics
6fbee7e is described below
commit 6fbee7e0b53f4a0782e8c6aa844c00f3feb1380a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 17 22:29:34 2021 +0200
ISIS-2871: fixes all markup components to actually use value semantics
---
.../title/parser/TitleFacetUsingValueFacet.java | 11 ++----
.../metamodel/facets/object/value/ValueFacet.java | 2 +
.../facets/object/value/ValueFacetAbstract.java | 23 +++++------
.../schema/chg/v2/ChangesDtoComponentWkt.java | 21 +++++-----
.../schema/cmd/v2/CommandDtoComponentWkt.java | 18 +++++----
.../schema/ixn/v2/InteractionDtoComponentWkt.java | 18 +++++----
.../components/scalars/markup/MarkupComponent.java | 45 ++++++++++++++--------
7 files changed, 77 insertions(+), 61 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingValueFacet.java
index b2f1f8c..7f74e9e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingValueFacet.java
@@ -21,8 +21,6 @@ package org.apache.isis.core.metamodel.facets.object.title.parser;
import java.util.function.BiConsumer;
import org.apache.isis.applib.adapters.Renderer;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
-import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -60,8 +58,8 @@ implements TitleFacet {
return null;
}
- // support for qualified value semantics, requires a 'where' context,
- // that is what property, collection, action return or action param this is to be rendered for ...
+ // support for qualified value semantics, requires a 'where' context, that is,
+ // what property, collection, action return or action param this is to be rendered for ...
if(renderRequest.getFeature() instanceof OneToOneAssociation) {
final Renderer renderer = valueFacet
@@ -76,10 +74,7 @@ implements TitleFacet {
// fall back to default value semantics ...
- return valueFacet.getValueSemantics().stream()
- .map(ValueSemanticsProvider::getRenderer)
- .filter(_NullSafe::isPresent)
- .findFirst()
+ return valueFacet.selectDefaultRenderer()
.map(renderer->(Renderer) renderer)
.map(renderer->renderer.presentationValue(valueFacet.createValueSemanticsContext(), pojo))
.orElseGet(()->String.format("Value type %s has no value semantics for title rendering.",
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
index 6781a34..da53afd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacet.java
@@ -65,6 +65,8 @@ public interface ValueFacet<T> extends Facet {
// -- RENDERER
+ /** no qualifiers allowed when searching the default semantics provider*/
+ Optional<Renderer<T>> selectDefaultRenderer();
Optional<Renderer<T>> selectRendererForParameter(final ObjectActionParameter param);
Optional<Renderer<T>> selectRendererForProperty(final OneToOneAssociation prop);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index fcb6974..3fe1557 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -74,7 +74,7 @@ implements ValueFacet<T> {
@Override
public boolean semanticEquals(@NonNull final Facet other) {
return (other instanceof ValueFacetAbstract)
- ? this.getValueSemantics().equals(((ValueFacetAbstract)other).getValueSemantics())
+ ? this.getValueSemantics().equals(((ValueFacetAbstract<?>)other).getValueSemantics())
: false;
}
@@ -124,6 +124,16 @@ implements ValueFacet<T> {
// -- RENDERER
@Override
+ public Optional<Renderer<T>> selectDefaultRenderer() {
+ return getValueSemantics()
+ .stream()
+ .filter(isMatchingAnyOf(Can.empty()))
+ .map(ValueSemanticsProvider::getRenderer)
+ .filter(_NullSafe::isPresent)
+ .findFirst();
+ }
+
+ @Override
public Optional<Renderer<T>> selectRendererForParameter(final ObjectActionParameter param) {
return streamValueSemanticsHonoringQualifiers(param)
.map(ValueSemanticsProvider::getRenderer)
@@ -163,21 +173,12 @@ implements ValueFacet<T> {
.map(_Strings::emptyToNull)
.stream()
.collect(Can.toCan());
-
-// System.err.printf("got: %s %s%n",
-// prop.getFeatureIdentifier(),
-// qualifiersRequired);
-//if(prop.getFeatureIdentifier().getLogicalType().getClassName().contains("AsciiDocValueSemanticsWithPreprocessing")
-// || prop.getFeatureIdentifier().getLogicalType().getClassName().contains("HasAsciiDocDescription")
-// ) {
-// System.out.println("bingo: " + qualifiersRequired);
-//}
}
private Predicate<ValueSemanticsProvider<T>> isMatchingAnyOf(final Can<String> qualifiersAccepted) {
return valueSemantics->{
- // qualifiers required vs. qualifiers present on bean type
+ // qualifiers accepted vs. qualifiers present on bean type
// 1. empty vs. empty -> accept
// 2. empty vs. not-empty -> reject
// 3. not-empty vs. empty -> reject
diff --git a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/chg/v2/ChangesDtoComponentWkt.java b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/chg/v2/ChangesDtoComponentWkt.java
index 02d2f46..5791518 100644
--- a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/chg/v2/ChangesDtoComponentWkt.java
+++ b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/chg/v2/ChangesDtoComponentWkt.java
@@ -20,24 +20,25 @@ package org.apache.isis.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2;
import org.apache.wicket.model.IModel;
-import org.apache.isis.applib.util.schema.ChangesDtoUtils;
-import org.apache.isis.schema.chg.v2.ChangesDto;
import org.apache.isis.valuetypes.asciidoc.ui.wkt.components.AsciiDocForXmlComponentWkt;
+@Deprecated
public class ChangesDtoComponentWkt extends AsciiDocForXmlComponentWkt {
private static final long serialVersionUID = 1L;
- public ChangesDtoComponentWkt(String id, IModel<?> model) {
+ public ChangesDtoComponentWkt(final String id, final IModel<?> model) {
super(id, model);
}
- @Override
- protected String asHtml(Object value) {
- if(value instanceof ChangesDto) {
- return asHtml(ChangesDtoUtils.toXml((ChangesDto) value));
- }
- return super.asHtml(value);
- }
+
+//TODO provide custom value semantics instead
+// @Override
+// protected String asHtml(Object value) {
+// if(value instanceof ChangesDto) {
+// return asHtml(ChangesDtoUtils.toXml((ChangesDto) value));
+// }
+// return super.asHtml(value);
+// }
}
diff --git a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/cmd/v2/CommandDtoComponentWkt.java b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/cmd/v2/CommandDtoComponentWkt.java
index f8df038..0791dfd 100644
--- a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/cmd/v2/CommandDtoComponentWkt.java
+++ b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/cmd/v2/CommandDtoComponentWkt.java
@@ -24,20 +24,22 @@ import org.apache.isis.applib.util.schema.CommandDtoUtils;
import org.apache.isis.schema.cmd.v2.CommandDto;
import org.apache.isis.valuetypes.asciidoc.ui.wkt.components.AsciiDocForXmlComponentWkt;
+@Deprecated
public class CommandDtoComponentWkt extends AsciiDocForXmlComponentWkt {
private static final long serialVersionUID = 1L;
- public CommandDtoComponentWkt(String id, IModel<?> model) {
+ public CommandDtoComponentWkt(final String id, final IModel<?> model) {
super(id, model);
}
- @Override
- protected String asHtml(Object value) {
- if(value instanceof CommandDto) {
- return asHtml(CommandDtoUtils.toXml((CommandDto) value));
- }
- return super.asHtml(value);
- }
+ //TODO provide custom value semantics instead
+// @Override
+// protected String asHtml(Object value) {
+// if(value instanceof CommandDto) {
+// return asHtml(CommandDtoUtils.toXml((CommandDto) value));
+// }
+// return super.asHtml(value);
+// }
}
diff --git a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/ixn/v2/InteractionDtoComponentWkt.java b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/ixn/v2/InteractionDtoComponentWkt.java
index d727b5e..9872c03 100644
--- a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/ixn/v2/InteractionDtoComponentWkt.java
+++ b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/schema/ixn/v2/InteractionDtoComponentWkt.java
@@ -24,20 +24,22 @@ import org.apache.isis.applib.util.schema.InteractionDtoUtils;
import org.apache.isis.schema.ixn.v2.InteractionDto;
import org.apache.isis.valuetypes.asciidoc.ui.wkt.components.AsciiDocForXmlComponentWkt;
+@Deprecated
public class InteractionDtoComponentWkt extends AsciiDocForXmlComponentWkt {
private static final long serialVersionUID = 1L;
- public InteractionDtoComponentWkt(String id, IModel<?> model) {
+ public InteractionDtoComponentWkt(final String id, final IModel<?> model) {
super(id, model);
}
- @Override
- protected String asHtml(Object value) {
- if(value instanceof InteractionDto) {
- return asHtml(InteractionDtoUtils.toXml((InteractionDto) value));
- }
- return super.asHtml(value);
- }
+ //TODO provide custom value semantics instead
+// @Override
+// protected String asHtml(Object value) {
+// if(value instanceof InteractionDto) {
+// return asHtml(InteractionDtoUtils.toXml((InteractionDto) value));
+// }
+// return super.asHtml(value);
+// }
}
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 58d0ca8..d263a01 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
@@ -18,40 +18,43 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars.markup;
+import java.util.Optional;
+
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.markup.parser.XmlTag.TagType;
import org.apache.wicket.model.IModel;
-import org.apache.isis.applib.value.HasHtml;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-import lombok.val;
+import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
+import org.apache.isis.viewer.wicket.model.models.ScalarParameterModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
+import org.apache.isis.viewer.wicket.model.models.ValueModel;
public class MarkupComponent extends WebComponent {
private static final long serialVersionUID = 1L;
- public MarkupComponent(final String id, IModel<?> model){
+ public MarkupComponent(final String id, final IModel<?> model){
super(id, model);
}
@Override
public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag){
- val htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" /*fallback*/);
+ final var htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" /*fallback*/);
replaceComponentTagBody(markupStream, openTag, htmlContent);
}
@Override
- protected void onComponentTag(ComponentTag tag) {
+ protected void onComponentTag(final ComponentTag tag) {
super.onComponentTag(tag);
tag.setType(TagType.OPEN);
}
// -- HELPER
- protected CharSequence extractHtmlOrElse(Object modelObject, final String fallback) {
+ protected CharSequence extractHtmlOrElse(final Object modelObject, final String fallback) {
if(modelObject==null) {
return fallback;
@@ -59,14 +62,16 @@ public class MarkupComponent extends WebComponent {
if(modelObject instanceof ManagedObject) {
- val adapter = (ManagedObject) modelObject;
+ final var adapter = (ManagedObject) modelObject;
- if(adapter.getPojo()==null)
+ if(adapter.getPojo()==null) {
return fallback;
+ }
- final Object value = adapter.getPojo();
+ final var asHtml = lookupObjectFeatureIn(getDefaultModel())
+ .map(feature->adapter.titleString(conf->conf.feature(feature)))
+ .orElseGet(adapter::titleString);
- val asHtml = asHtml(value);
if(asHtml != null) {
return asHtml;
}
@@ -75,14 +80,22 @@ public class MarkupComponent extends WebComponent {
}
return modelObject.toString();
-
}
- protected String asHtml(Object value) {
- if (value instanceof HasHtml) {
- return ((HasHtml)value).asHtml();
+ // -- HELPER
+
+ protected Optional<ObjectFeature> lookupObjectFeatureIn(final IModel<?> model) {
+ if(model instanceof ScalarPropertyModel) {
+ return Optional.of(((ScalarPropertyModel)model).getMetaModel());
+ }
+ if(model instanceof ScalarParameterModel) {
+ return Optional.of(((ScalarParameterModel)model).getMetaModel());
+ }
+ if(model instanceof ValueModel) {
+ return Optional.ofNullable(((ValueModel)model).getActionModelHint())
+ .map(act->act.getMetaModel());
}
- return null;
+ return Optional.empty();
}
}