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 de5715f9ad ISIS-3112: ValueFacet: support for custom renderer on
non-scalar members
de5715f9ad is described below
commit de5715f9ad66c2f37611361348af61eea6850709
Author: Andi Huber <[email protected]>
AuthorDate: Fri Aug 5 06:35:28 2022 +0200
ISIS-3112: ValueFacet: support for custom renderer on non-scalar members
---
.../title/parser/TitleFacetFromValueFacet.java | 43 +++++++++++++++-------
.../metamodel/facets/object/value/ValueFacet.java | 7 ++++
.../facets/object/value/ValueFacetAbstract.java | 9 +++++
3 files changed, 45 insertions(+), 14 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
index b2b68bc016..6be31fdca3 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
@@ -28,6 +28,7 @@ import
org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import lombok.NonNull;
@@ -61,20 +62,34 @@ implements TitleFacet {
// 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) {
- val prop = (OneToOneAssociation)renderRequest.getFeature();
- final Renderer renderer = valueFacet
- .selectRendererForPropertyElseFallback(prop);
- return renderer
- .titlePresentation(valueFacet
- .createValueSemanticsContext(prop), pojo);
- }
- if(renderRequest.getFeature() instanceof ObjectActionParameter) {
- val param = (ObjectActionParameter)renderRequest.getFeature();
- final Renderer renderer = valueFacet
- .selectRendererForParameterElseFallback(param);
- return
renderer.titlePresentation(valueFacet.createValueSemanticsContext(param), pojo);
+ if(renderRequest.getFeature()!=null) {
+ switch(renderRequest.getFeature().getFeatureType()) {
+ case PROPERTY: {
+ val prop = (OneToOneAssociation)renderRequest.getFeature();
+ final Renderer renderer = valueFacet
+ .selectRendererForPropertyElseFallback(prop);
+ return renderer
+ .titlePresentation(valueFacet
+ .createValueSemanticsContext(prop), pojo);
+ }
+ case COLLECTION: {
+ val coll = (OneToManyAssociation)renderRequest.getFeature();
+ final Renderer renderer = valueFacet
+ .selectRendererForCollectionElseFallback(coll);
+ return renderer
+ .titlePresentation(valueFacet
+ .createValueSemanticsContext(coll), pojo);
+ }
+ case ACTION_PARAMETER_SCALAR:
+ case ACTION_PARAMETER_COLLECTION:{
+ val param = (ObjectActionParameter)renderRequest.getFeature();
+ final Renderer renderer = valueFacet
+ .selectRendererForParameterElseFallback(param);
+ return
renderer.titlePresentation(valueFacet.createValueSemanticsContext(param), pojo);
+ }
+ default:
+ // fall through
+ }
}
// fall back to default value semantics ...
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 78caf452d3..49ead1d33c 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
@@ -38,6 +38,7 @@ import
org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationM
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.schema.common.v2.ValueType;
@@ -123,6 +124,7 @@ extends
Optional<Renderer<T>> selectDefaultRenderer();
Optional<Renderer<T>> selectRendererForParameter(final
ObjectActionParameter param);
Optional<Renderer<T>> selectRendererForProperty(final OneToOneAssociation
prop);
+ Optional<Renderer<T>> selectRendererForCollection(final
OneToManyAssociation coll);
Renderer<T> fallbackRenderer(Identifier featureIdentifier);
@@ -150,6 +152,11 @@ extends
.orElseGet(()->fallbackRenderer(prop.getFeatureIdentifier()));
}
+ default Renderer<T> selectRendererForCollectionElseFallback(final
OneToManyAssociation coll) {
+ return selectRendererForCollection(coll)
+ .orElseGet(()->fallbackRenderer(coll.getFeatureIdentifier()));
+ }
+
// -- COMPOSITE VALUE SUPPORT
Optional<ObjectAction> selectCompositeValueMixinForParameter(
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 d706c6074c..3c402b246a 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
@@ -50,6 +50,7 @@ import org.apache.isis.core.metamodel.spec.feature.MixedIn;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn;
@@ -256,6 +257,14 @@ implements ValueFacet<T> {
.findFirst();
}
+ @Override
+ public Optional<Renderer<T>> selectRendererForCollection(final
OneToManyAssociation coll) {
+ return streamValueSemanticsHonoringQualifiers(coll)
+ .map(ValueSemanticsProvider::getRenderer)
+ .filter(_NullSafe::isPresent)
+ .findFirst();
+ }
+
@Override
public Renderer<T> fallbackRenderer(final Identifier featureIdentifier) {
return fallbackRenderer(getLogicalType(), featureIdentifier);