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/08 10:40:07 UTC
[isis] branch master updated: ISIS-3206: [Metamodel] adds rendering for annotation nodes in Inspect MM View
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 fb517e867b ISIS-3206: [Metamodel] adds rendering for annotation nodes in Inspect MM View
fb517e867b is described below
commit fb517e867bc3acc245b260c16cfcad1c3ceb9909
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 8 12:39:59 2022 +0200
ISIS-3206: [Metamodel] adds rendering for annotation nodes in Inspect MM
View
---
.../core/metamodel/IsisModuleCoreMetamodel.java | 2 +
.../metamodel/inspect/Object_inspectMetamodel.java | 2 +-
.../{FacetAttrNode.java => AnnotationNode.java} | 14 ++--
.../metamodel/inspect/model/AnnotationNode.svg | 83 ++++++++++++++++++++++
.../metamodel/inspect/model/FacetAttrNode.java | 2 +-
.../isis/core/metamodel/inspect/model/MMNode.java | 35 +++++++--
.../metamodel/inspect/model/MMNodeFactory.java | 10 +++
.../isis/core/metamodel/inspect/model/icons.html | 2 +
.../services/metamodel/MetaModelAnnotator.java | 4 +-
.../services/metamodel/MetaModelExporter.java | 56 ++++++++++++---
.../metamodel/MetaModelServiceDefault.java | 1 -
.../ShadowedFactetAttributeAnnotator.java | 7 +-
12 files changed, 192 insertions(+), 26 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
index 206365b285..7a23e132cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.inspect.model.CollectionNode;
import org.apache.isis.core.metamodel.inspect.model.FacetAttrNode;
import org.apache.isis.core.metamodel.inspect.model.FacetGroupNode;
import org.apache.isis.core.metamodel.inspect.model.FacetNode;
+import org.apache.isis.core.metamodel.inspect.model.MMTreeAdapter;
import org.apache.isis.core.metamodel.inspect.model.MemberNode;
import org.apache.isis.core.metamodel.inspect.model.ParameterNode;
import org.apache.isis.core.metamodel.inspect.model.PropertyNode;
@@ -231,6 +232,7 @@ public class IsisModuleCoreMetamodel {
@Bean
public PreloadableTypes metamodelViewTypes() {
return ()->Stream.of(
+ MMTreeAdapter.class,
MemberNode.class,
ActionNode.class,
CollectionNode.class,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
index e2d9dad4f2..745057f69c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
@@ -74,7 +74,7 @@ public class Object_inspectMetamodel {
messageService.warnUser("Unknown class, unable to export");
return null;
}
- final String namespace = logicalTypeIfAny.get().getNamespace();
+ final String namespace = logicalTypeIfAny.get().getLogicalTypeName();
val config = Config.builder()
.ignoreFallbackFacets(true)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.java
similarity index 86%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.java
index 5cf9883b4a..e37d3ad413 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.java
@@ -32,14 +32,14 @@ import org.apache.isis.applib.annotation.Introspection;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.schema.metamodel.v2.FacetAttr;
+import org.apache.isis.schema.metamodel.v2.Annotation;
import org.apache.isis.schema.metamodel.v2.MetamodelElement;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
-@Named(FacetAttrNode.LOGICAL_TYPE_NAME)
+@Named(AnnotationNode.LOGICAL_TYPE_NAME)
@DomainObject(
nature=Nature.VIEW_MODEL,
introspection = Introspection.ANNOTATION_REQUIRED
@@ -47,16 +47,16 @@ import lombok.ToString;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@ToString
-public class FacetAttrNode extends MMNode {
+public class AnnotationNode extends MMNode {
- public static final String LOGICAL_TYPE_NAME = IsisModuleApplib.NAMESPACE + ".FacetAttrNode";
+ public static final String LOGICAL_TYPE_NAME = IsisModuleApplib.NAMESPACE + ".AnnotationNode";
@Property(hidden = Where.EVERYWHERE)
- @Getter @Setter private FacetAttr facetAttr;
+ @Getter @Setter private Annotation annotation;
@Override
public String createTitle() {
- return String.format("%s: %s", facetAttr.getName(), facetAttr.getValue());
+ return String.format("%s: %s", annotation.getName(), annotation.getValue());
}
@Override
@@ -72,7 +72,7 @@ public class FacetAttrNode extends MMNode {
// -- TREE NODE STUFF
@Getter @Setter @XmlTransient
- private FacetNode parentNode;
+ private MMNode parentNode;
@Override
public Stream<MMNode> streamChildNodes() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.svg
new file mode 100644
index 0000000000..2277aca9e1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/AnnotationNode.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<svg
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ sodipodi:docname="AnnotationNode.svg"
+ id="svg4"
+ version="1.1"
+ viewBox="0 0 448 512"
+ role="img"
+ class="svg-inline--fa fa-square fa-w-14"
+ data-icon="square"
+ data-prefix="far"
+ focusable="false"
+ aria-hidden="true"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs8" />
+ <sodipodi:namedview
+ inkscape:current-layer="svg4"
+ inkscape:window-maximized="0"
+ inkscape:window-y="65"
+ inkscape:window-x="1022"
+ inkscape:cy="321.09382"
+ inkscape:cx="78.65721"
+ inkscape:zoom="1.3921165"
+ showgrid="false"
+ id="namedview6"
+ inkscape:window-height="1163"
+ inkscape:window-width="1706"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ inkscape:pagecheckerboard="0"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" />
+ <path
+ style="fill:#7d7d7d;fill-opacity:1"
+ id="path2"
+ d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"
+ fill="currentColor" />
+ <path
+ id="path869"
+ d="m 49.968008,429.6923 -1.561876,-1.66254 V 256.27418 c 0,-94.46556 0.200796,-172.278836 0.446213,-172.918384 1.313879,-3.423912 -7.23172,-3.264671 175.197195,-3.264671 128.3901,0 171.07525,0.207079 172.25546,0.835665 0.86295,0.459616 1.9628,1.34855 2.44409,1.975409 0.6821,0.888418 0.8801,39.015681 0.89791,172.903491 l 0.0228,171.76374 -1.48879,1.89271 -1.4888,1.8927 H 224.11106 51.529885 Z"
+ style="fill:#eaeaea;fill-opacity:1;stroke:none;stroke-width:3.59165;stroke-linejoin:round" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:275.027px;line-height:0.95;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;letter-spacing:0px;word-spacing:0px;fill:#7e7e7e;fill-opacity:1;stroke:none;stroke-width:5.92588"
+ x="90.025757"
+ y="346.29944"
+ id="text857-3"
+ transform="scale(1.0423124,0.95940527)"><tspan
+ sodipodi:role="line"
+ x="90.025757"
+ y="346.29944"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:275.027px;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;fill:#7e7e7e;fill-opacity:1;stroke-width:5.92588"
+ id="tspan859-3">@</tspan></text>
+</svg>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
index 5cf9883b4a..8fffbf3264 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
@@ -66,7 +66,7 @@ public class FacetAttrNode extends MMNode {
@Override
protected MetamodelElement metamodelElement() {
- return null;
+ return facetAttr;
}
// -- TREE NODE STUFF
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
index 46ad8301bf..acdd6b646a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.inspect.model;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -42,6 +43,7 @@ import org.apache.isis.schema.metamodel.v2.MetamodelElement;
import lombok.Setter;
@XmlSeeAlso({
+ AnnotationNode.class,
MemberNode.class,
ActionNode.class,
CollectionNode.class,
@@ -59,9 +61,13 @@ public abstract class MMNode {
@Collection
@Setter protected List<MMNode> childNodes;
- public List<MMNode> getChildNodes() {
+ public final List<MMNode> getChildNodes() {
if(childNodes==null) {
- setChildNodes(streamChildNodes().collect(Collectors.toList()));
+ setChildNodes(
+ Stream.concat(
+ streamAnnotationNodes(),
+ streamChildNodes())
+ .collect(Collectors.toList()));
}
return childNodes;
}
@@ -69,6 +75,12 @@ public abstract class MMNode {
protected abstract MetamodelElement metamodelElement();
protected abstract Stream<MMNode> streamChildNodes();
+ protected final Stream<MMNode> streamAnnotationNodes() {
+ return streamAnnotations()
+ .filter(notNameOf("@title"))
+ .map(a->MMNodeFactory.annotation(a, this));
+ }
+
protected String title;
//FIXME[ISIS-2774] should be picked up also when declared abstract, yet we work around that
@@ -96,14 +108,27 @@ public abstract class MMNode {
return lookupAnnotationByName("@title");
}
- protected final Optional<Annotation> lookupAnnotationByName(final String annotationName) {
+ protected final Stream<Annotation> streamAnnotations() {
return Optional.ofNullable(metamodelElement())
.map(MetamodelElement::getAnnotations)
.map(FacetHolder.Annotations::getAsList)
.<Stream<Annotation>>map(List::stream)
- .orElseGet(Stream::empty)
- .filter(annot->Objects.equals(annotationName, annot.getName()))
+ .orElseGet(Stream::empty);
+ }
+
+ protected final Optional<Annotation> lookupAnnotationByName(final String annotationName) {
+ return streamAnnotations()
+ .filter(nameOf(annotationName))
.findFirst();
}
+ static Predicate<Annotation> nameOf(final String annotationName) {
+ return annot->Objects.equals(annotationName, annot.getName());
+ }
+
+ static Predicate<Annotation> notNameOf(final String annotationName) {
+ return nameOf(annotationName).negate();
+ }
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java
index 9ec98f0e10..4b41c863d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.inspect.model;
import org.apache.isis.schema.metamodel.v2.Action;
+import org.apache.isis.schema.metamodel.v2.Annotation;
import org.apache.isis.schema.metamodel.v2.Collection;
import org.apache.isis.schema.metamodel.v2.DomainClassDto;
import org.apache.isis.schema.metamodel.v2.Facet;
@@ -31,6 +32,14 @@ import lombok.val;
public class MMNodeFactory {
+
+ public static MMNode annotation(final Annotation annotation, final MMNode parentNode) {
+ val node = new AnnotationNode();
+ node.setAnnotation(annotation);
+ node.setParentNode(parentNode);
+ return node;
+ }
+
public static MMNode type(final DomainClassDto domainClassDto, final MMNode parentNode) {
val node = new TypeNode();
node.setDomainClassDto(domainClassDto);
@@ -90,4 +99,5 @@ public class MMNodeFactory {
return node;
}
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/icons.html b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/icons.html
index 531caa8a72..556f0f9f33 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/icons.html
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/icons.html
@@ -65,6 +65,7 @@
<h1>24x24</h1>
<ul>
+ <li><a href="AnnotationNode.svg" class="icon-and-label"><img src="AnnotationNode.svg" class="icon-image-sm"><span>Annotation.svg</span></a></li>
<li><a href="TypeNode.svg" class="icon-and-label"><img src="TypeNode.svg" class="icon-image-sm"><span>TypeNode.svg</span></a></li>
<li><a href="FacetGroupNode.svg" class="icon-and-label"><img src="FacetGroupNode.svg" class="icon-image-sm"><span>FacetGroupNode.svg</span></a></li>
<li><a href="FacetNode.svg" class="icon-and-label"><img src="FacetNode.svg" class="icon-image-sm"><span>FacetNode.svg</span></a></li>
@@ -80,6 +81,7 @@
<h1>32x32</h1>
<ul>
+ <li><a href="AnnotationNode.svg" class="icon-and-label"><img src="AnnotationNode.svg" class="icon-image"><span>Annotation.svg</span></a></li>
<li><a href="TypeNode.svg" class="icon-and-label"><img src="TypeNode.svg" class="icon-image"><span>TypeNode.svg</span></a></li>
<li><a href="FacetGroupNode.svg" class="icon-and-label"><img src="FacetGroupNode.svg" class="icon-image"><span>FacetGroupNode.svg</span></a></li>
<li><a href="FacetNode.svg" class="icon-and-label"><img src="FacetNode.svg" class="icon-image"><span>FacetNode.svg</span></a></li>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelAnnotator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelAnnotator.java
index c134506299..dc64b12482 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelAnnotator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelAnnotator.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.core.metamodel.services.metamodel;
+import java.util.Optional;
+
import org.springframework.lang.Nullable;
import org.apache.isis.commons.internal.base._Strings;
@@ -69,7 +71,7 @@ public interface MetaModelAnnotator {
val titleAnnot = new org.apache.isis.schema.metamodel.v2.Annotation();
titleAnnot.setName(name);
titleAnnot.setValue(value);
- val annots = new Annotations();
+ val annots = Optional.ofNullable(t.getAnnotations()).orElseGet(Annotations::new);
t.setAnnotations(annots);
annots.getAsList().add(titleAnnot);
return t;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
index 62290553f7..09050ed5d8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
@@ -23,9 +23,11 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.apache.isis.applib.services.metamodel.Config;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -74,6 +76,18 @@ class MetaModelExporter {
* </p>
*/
MetamodelDto exportMetaModel(final Config config) {
+
+ // single type(s) MM export support
+ val tinyDomain = _Lists.<ObjectSpecification>newArrayList();
+ val useTinyDomain = _NullSafe.stream(config.getNamespacePrefixes())
+ .map(namespace->specificationLookup.specForLogicalTypeName(namespace))
+ .peek(specIfAny->specIfAny.ifPresent(tinyDomain::add))
+ .allMatch(Optional::isPresent);
+
+ if(useTinyDomain) {
+ return exportTinyDomain(tinyDomain, config);
+ }
+
MetamodelDto metamodelDto = new MetamodelDto();
// phase 1: create a domainClassType for each ObjectSpecification
@@ -84,6 +98,11 @@ class MetaModelExporter {
domainClassByObjectSpec.put(specification, domainClassType);
}
+ if(useTinyDomain) {
+ metamodelDto.getDomainClassDto().addAll(domainClassByObjectSpec.values());
+ return metamodelDto;
+ }
+
// phase 2: now flesh out the domain class types, passing the map for lookups of the domainClassTypes that
// correspond to each object members types.
//
@@ -132,12 +151,35 @@ class MetaModelExporter {
return metamodelDto;
}
+ private MetamodelDto exportTinyDomain(final List<ObjectSpecification> tinyDomain, final Config config) {
+ MetamodelDto metamodelDto = new MetamodelDto();
+
+ final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec = _Maps.newHashMap();
+ for (final ObjectSpecification specification : tinyDomain) {
+ DomainClassDto domainClassType = asXsdType(specification, config);
+ domainClassByObjectSpec.put(specification, domainClassType);
+ addFacetsAndMembersTo(specification, domainClassByObjectSpec, config);
+ }
+
+ for (final ObjectSpecification objectSpecification : _Lists.newArrayList(domainClassByObjectSpec.keySet())) {
+ if(shouldIgnore(config, objectSpecification)) {
+ continue;
+ }
+ metamodelDto.getDomainClassDto().add(domainClassByObjectSpec.get(objectSpecification));
+ }
+
+ sortDomainClasses(metamodelDto.getDomainClassDto());
+ return metamodelDto;
+ }
+
private boolean shouldIgnore(final Config config, final ObjectSpecification specification) {
- return notInNamespacePrefixes(specification, config) ||
- config.isIgnoreMixins() && specification.isMixin() ||
- config.isIgnoreInterfaces() && specification.getCorrespondingClass().isInterface() ||
- config.isIgnoreAbstractClasses() && Modifier.isAbstract(specification.getCorrespondingClass().getModifiers()) ||
- config.isIgnoreBuiltInValueTypes() && isValueType(specification);
+ return notInNamespacePrefixes(specification, config)
+ || config.isIgnoreMixins() && specification.isMixin()
+ || config.isIgnoreInterfaces() && specification.getCorrespondingClass().isInterface()
+ || config.isIgnoreAbstractClasses()
+ && Modifier.isAbstract(specification.getCorrespondingClass().getModifiers())
+ || config.isIgnoreBuiltInValueTypes()
+ && isValueType(specification);
}
private static <T> List<T> remaining(final java.util.Collection<T> processed, final java.util.Collection<T> other) {
@@ -156,10 +198,6 @@ class MetaModelExporter {
final Config config) {
val namespacePrefixes = config.getNamespacePrefixes();
- if(namespacePrefixes.isEmpty()) {
- return false; // export none
- }
-
if(config.isNamespacePrefixAny()) {
return true; // export all
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 8f94c18df8..d0cc5e3cea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -232,7 +232,6 @@ public class MetaModelServiceDefault implements MetaModelService {
if(config.isIncludeShadowedFacets()) {
metaModelAnnotators.add(new ShadowedFactetAttributeAnnotator(new ExporterConfig(){}));
}
-
return new MetaModelExporter(specificationLoader, metaModelAnnotators)
.exportMetaModel(config);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/ShadowedFactetAttributeAnnotator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/ShadowedFactetAttributeAnnotator.java
index eeb987bb38..443a79b739 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/ShadowedFactetAttributeAnnotator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/ShadowedFactetAttributeAnnotator.java
@@ -18,8 +18,10 @@
*/
package org.apache.isis.core.metamodel.services.metamodel;
+import java.util.Objects;
import java.util.Optional;
+import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
@@ -82,11 +84,14 @@ public class ShadowedFactetAttributeAnnotator implements MetaModelAnnotator {
lookupByName(facetType, attributeName)
.ifPresent(facetAttr->{
createAnnotation(facetAttr, "@shadowed", annotation);
+ //createAnnotation(facetAttr, "@title.prefixParentWithExclamation", "");
});
}
private Optional<FacetAttr> lookupByName(final Facet facetType, final String attributeName) {
- return Optional.empty();
+ return _NullSafe.stream(facetType.getAttr())
+ .filter(a->Objects.equals(attributeName, a.getName()))
+ .findFirst();
}
}