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/06/28 19:17:04 UTC

[isis] branch master updated: ISIS-3049: introduces Facet.isAllowedToBeSharedWhenMixedIn()

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 90fecba6df ISIS-3049: introduces Facet.isAllowedToBeSharedWhenMixedIn()
90fecba6df is described below

commit 90fecba6df8057ab11801fc973417d9988c779ce
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jun 28 21:16:57 2022 +0200

    ISIS-3049: introduces Facet.isAllowedToBeSharedWhenMixedIn()
    
    - also aligns Facet names for those that originate from layout.xml
    introspection
---
 .../apache/isis/core/metamodel/facetapi/Facet.java |  17 ++
 .../metamodel/facetapi/FacetHolderAbstract.java    |   2 +-
 .../metamodel/facetapi/FacetHolderDelegated.java   | 102 --------
 .../metamodel/facetapi/FacetHolderLayered.java     | 145 +++++++++++
 ... => ActionPositionFacetForActionLayoutXml.java} |  11 +-
 ... => BookmarkPolicyFacetForActionLayoutXml.java} |  11 +-
 ...java => CssClassFaFacetForActionLayoutXml.java} |  11 +-
 ...l.java => CssClassFacetForActionLayoutXml.java} |  11 +-
 ...Xml.java => HiddenFacetForActionLayoutXml.java} |  11 +-
 ...=> MemberDescribedFacetForActionLayoutXml.java} |  11 +-
 ...ava => MemberNamedFacetForActionLayoutXml.java} |  11 +-
 ...ava => PromptStyleFacetForActionLayoutXml.java} |  11 +-
 ....java => RedirectFacetFromActionLayoutXml.java} |  11 +-
 ...va => CssClassFacetForCollectionLayoutXml.java} |  11 +-
 ...=> DefaultViewFacetForCollectionLayoutXml.java} |  11 +-
 ...java => HiddenFacetForCollectionLayoutXml.java} |  11 +-
 ...emberDescribedFacetForCollectionLayoutXml.java} |  11 +-
 ...=> MemberNamedFacetForCollectionLayoutXml.java} |  11 +-
 ....java => PagedFacetForCollectionLayoutXml.java} |  11 +-
 ...va => SortedByFacetForCollectionLayoutXml.java} |  11 +-
 ...mXml.java => LayoutGroupFacetForLayoutXml.java} |  16 +-
 ...mXml.java => LayoutOrderFacetForLayoutXml.java} |  13 +-
 ...okmarkPolicyFacetForDomainObjectLayoutXml.java} |  11 +-
 ...> CssClassFaFacetForDomainObjectLayoutXml.java} |  11 +-
 ... => CssClassFacetForDomainObjectLayoutXml.java} |  11 +-
 ... DescribedAsFacetForDomainObjectLayoutXml.java} |  11 +-
 ... ObjectNamedFacetForDomainObjectLayoutXml.java} |  11 +-
 ...java => CssClassFacetForPropertyLayoutXml.java} |  11 +-
 ...l.java => HiddenFacetForPropertyLayoutXml.java} |  11 +-
 ....java => LabelAtFacetForPropertyLayoutXml.java} |  11 +-
 ... MemberDescribedFacetForPropertyLayoutXml.java} |  10 +-
 ...a => MemberNamedFacetForPropertyLayoutXml.java} |  11 +-
 ...ava => MultiLineFacetForPropertyLayoutXml.java} |  11 +-
 ...a => PromptStyleFacetForPropertyLayoutXml.java} |  11 +-
 ...RenderedAdjustedFacetForPropertyLayoutXml.java} |  11 +-
 ...=> TypicalLengthFacetForPropertyLayoutXml.java} |  11 +-
 ...va => UnchangingFacetForPropertyLayoutXml.java} |  11 +-
 .../services/grid/GridSystemServiceAbstract.java   | 270 ++++++++++-----------
 38 files changed, 564 insertions(+), 341 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java
index 10ca3cbbf2..de53130605 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java
@@ -22,6 +22,7 @@ import java.util.Optional;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.all.named.ObjectNamedFacet;
 
@@ -169,4 +170,20 @@ extends
      */
     public Precedence getPrecedence();
 
+    /**
+     * Whether this {@link Facet} can be installed on a mixed-in {@link FacetedMethod},
+     * and hence effectively be shared among multiple (target) <i>Mixee</i> types.
+     * <p>
+     * Regularly {@link Facet}s for <i>Members</i> are installed on the <i>Member's</i> {@link FacetedMethod}.
+     * However, for mixed-in <i>Members</i>, the {@link FacetedMethod} is a shared one,
+     * which usually shall not receive any {@link Facet}s,
+     * that eg. originate from <i>layout.xml</i> file introspection.
+     * Those instead would be installed on a synthetic {@link FacetHolder} specifically created
+     * for the associated <i>Mixee</i> type.
+     * @see FacetHolderLayered
+     */
+    public default boolean isAllowedToBeSharedWhenMixedIn() {
+        return true;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
index da26748440..e53864592f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
@@ -56,7 +56,7 @@ implements FacetHolder {
     public static FacetHolder delegated(
             final Identifier featureIdentifier,
             final FacetHolder parentLayer) {
-        return new FacetHolderDelegated(featureIdentifier, parentLayer);
+        return new FacetHolderLayered(featureIdentifier, parentLayer);
     }
 
     // -- FIELDS
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java
deleted file mode 100644
index 0c8ce03a58..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  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.
- */
-package org.apache.isis.core.metamodel.facetapi;
-
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-
-import lombok.Getter;
-import lombok.NonNull;
-
-/**
- * Acts as a facade to the underlying delegate, but provides its own <i>Member</i>-{@link Identifier}.
- * <p>
- * Any mixed in <i>Member</i> has a {@link FacetedMethod} that acts as the {@link FacetHolder},
- * which is shared among all types that this particular mixed in <i>Member</i> is contributed to.
- * @apiNote
- *      was introduced in response to a couple of bugs originating from having both the <i>Member</i> and
- *      its <i>Peer</i> maintaining their own list of {@link Facet}(s), that may run out of sync
- *      eg. with metamodel post-processing;
- */
-class FacetHolderDelegated
-implements FacetHolder {
-
-    @Getter(onMethod_ = {@Override})
-    private final @NonNull Identifier featureIdentifier;
-    private final @NonNull FacetHolder delegate;
-
-    public FacetHolderDelegated(
-            final @NonNull Identifier featureIdentifier,
-            final @NonNull FacetHolder delegate) {
-        this.featureIdentifier = featureIdentifier;
-        this.delegate = delegate;
-    }
-
-    @Override
-    public TranslationContext getTranslationContext() {
-        return delegate.getTranslationContext();
-    }
-
-    @Override
-    public void addFacet(@NonNull final Facet facet) {
-        //FIXME[ISIS-3049] if a Facet originates from layout.xml introspection, don't install it on the delegate
-        delegate.addFacet(facet);
-    }
-
-    @Override
-    public MetaModelContext getMetaModelContext() {
-        return delegate.getMetaModelContext();
-    }
-
-    @Override
-    public int getFacetCount() {
-        return delegate.getFacetCount();
-    }
-
-    @Override
-    public <T extends Facet> T getFacet(final Class<T> facetType) {
-        return delegate.getFacet(facetType);
-    }
-
-    @Override
-    public boolean containsFacet(final Class<? extends Facet> facetType) {
-        return delegate.containsFacet(facetType);
-    }
-
-    @Override
-    public Stream<Facet> streamFacets() {
-        return delegate.streamFacets();
-    }
-
-    @Override
-    public Stream<FacetRanking> streamFacetRankings() {
-        return delegate.streamFacetRankings();
-    }
-
-    @Override
-    public Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) {
-        return delegate.getFacetRanking(facetType);
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
new file mode 100644
index 0000000000..ba0cee8a4c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
@@ -0,0 +1,145 @@
+/*
+ *  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.
+ */
+package org.apache.isis.core.metamodel.facetapi;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.i18n.TranslationContext;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.val;
+
+/**
+ * Provides a merged view of the <i>local</i> and the <i>shared</i> list of {@link Facet}s,
+ * but has its own <i>Member</i>-{@link Identifier}.
+ * <p>
+ * Any mixed in <i>Member</i> has a {@link FacetedMethod} that acts as the {@link FacetHolder},
+ * which is shared among all types that this particular mixed in <i>Member</i> is contributed to.
+ *
+ * @apiNote
+ *      was introduced in response to a couple of bugs originating from having both the <i>Member</i> and
+ *      its <i>Peer</i> maintaining their own list of {@link Facet}(s), that may run out of sync
+ *      eg. with metamodel post-processing;
+ *
+ * @see Facet#isAllowedToBeSharedWhenMixedIn()
+ */
+class FacetHolderLayered
+implements FacetHolder {
+
+    @Getter(onMethod_ = {@Override})
+    private final @NonNull Identifier featureIdentifier;
+    private final @NonNull FacetHolder shared;
+    private final @NonNull FacetHolder local;
+
+    public FacetHolderLayered(
+            final @NonNull Identifier featureIdentifier,
+            final @NonNull FacetHolder shared) {
+        this.featureIdentifier = featureIdentifier;
+        this.shared = shared;
+        this.local = FacetHolderAbstract.simple(shared.getMetaModelContext(), featureIdentifier);
+    }
+
+    @Override
+    public TranslationContext getTranslationContext() {
+        // don't use the local's TranslationContext - produces less work for human translators
+        return shared.getTranslationContext();
+    }
+
+    @Override
+    public void addFacet(@NonNull final Facet facet) {
+        // eg. if a Facet originates from layout.xml introspection, don't install it on the shared FacetHolder
+        val facetHolder = facet.isAllowedToBeSharedWhenMixedIn()
+                ? shared
+                : local;
+        facetHolder.addFacet(facet);
+    }
+
+    @Override
+    public MetaModelContext getMetaModelContext() {
+        return shared.getMetaModelContext();
+    }
+
+    @Override
+    public int getFacetCount() {
+        // optimization, not strictly required
+        if(local.getFacetCount()==0) {
+            return shared.getFacetCount();
+        }
+        // cannot simply add up shared and local
+        return (int)streamFacets().count();
+    }
+
+    @Override
+    public <T extends Facet> T getFacet(final Class<T> facetType) {
+        val localFacet = local.getFacet(facetType);
+        val sharedFacet = shared.getFacet(facetType);
+
+        if(localFacet==null) {
+            return sharedFacet;
+        }
+        if(sharedFacet==null) {
+            return localFacet;
+        }
+        if(localFacet.getPrecedence().ordinal() > sharedFacet.getPrecedence().ordinal()) {
+            return localFacet;
+        }
+        if(sharedFacet.getPrecedence().ordinal() > localFacet.getPrecedence().ordinal()) {
+            return sharedFacet;
+        }
+        if(localFacet.semanticEquals(sharedFacet)) {
+            return localFacet; // arbitrarily picking one
+        }
+        return localFacet; // have the local win, this is safe for layout.xml stuff, but not for future use-cases
+
+//        // semantic conflict (unfortunately semanticEquals() is not always implemented yet)
+//        throw _Exceptions.illegalState("conflicting facet semantics between shared %s and local %s",
+//                FacetUtil.toString(sharedFacet),
+//                FacetUtil.toString(localFacet));
+    }
+
+    @Override
+    public boolean containsFacet(final Class<? extends Facet> facetType) {
+        return shared.containsFacet(facetType)
+                || local.containsFacet(facetType);
+    }
+
+    @Override
+    public Stream<Facet> streamFacets() {
+        //FIXME[ISIS-3049] concat with local
+        return shared.streamFacets();
+    }
+
+    @Override
+    public Stream<FacetRanking> streamFacetRankings() {
+        //FIXME[ISIS-3049] concat with local
+        return shared.streamFacetRankings();
+    }
+
+    @Override
+    public Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) {
+        //FIXME[ISIS-3049] concat with local
+        return shared.getFacetRanking(facetType);
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java
similarity index 80%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java
index 15a8bc7e59..d7e25189fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetAbstract;
 
-public class ActionPositionFacetForActionXml extends ActionPositionFacetAbstract {
+public class ActionPositionFacetForActionLayoutXml extends ActionPositionFacetAbstract {
 
     public static Optional<ActionPositionFacet> create(
             final ActionLayoutData actionLayout,
@@ -36,11 +36,16 @@ public class ActionPositionFacetForActionXml extends ActionPositionFacetAbstract
         final org.apache.isis.applib.annotation.ActionLayout.Position position = actionLayout.getPosition();
 
         return Optional.ofNullable(position)
-        .map(pos->new ActionPositionFacetForActionXml(pos, holder));
+        .map(pos->new ActionPositionFacetForActionLayoutXml(pos, holder));
     }
 
-    private ActionPositionFacetForActionXml(final org.apache.isis.applib.annotation.ActionLayout.Position position, final FacetHolder holder) {
+    private ActionPositionFacetForActionLayoutXml(final org.apache.isis.applib.annotation.ActionLayout.Position position, final FacetHolder holder) {
         super(position, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java
index a13c3f1022..2fb40f033b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract;
 
-public class BookmarkPolicyFacetForActionXml
+public class BookmarkPolicyFacetForActionLayoutXml
 extends BookmarkPolicyFacetAbstract {
 
     public static Optional<BookmarkPolicyFacet> create(
@@ -38,12 +38,17 @@ extends BookmarkPolicyFacetAbstract {
         final BookmarkPolicy bookmarkPolicy = actionLayout.getBookmarking();
         return bookmarkPolicy != null
                 && bookmarkPolicy != BookmarkPolicy.NEVER
-                        ? Optional.of(new BookmarkPolicyFacetForActionXml(bookmarkPolicy, holder))
+                        ? Optional.of(new BookmarkPolicyFacetForActionLayoutXml(bookmarkPolicy, holder))
                         : Optional.empty();
     }
 
-    private BookmarkPolicyFacetForActionXml(final BookmarkPolicy bookmarkPolicy, final FacetHolder holder) {
+    private BookmarkPolicyFacetForActionLayoutXml(final BookmarkPolicy bookmarkPolicy, final FacetHolder holder) {
         super(bookmarkPolicy, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java
index cdef2a37f9..7713f4f518 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaStaticFacetAbstract;
 
-public class CssClassFaFacetForActionXml
+public class CssClassFaFacetForActionLayoutXml
 extends CssClassFaStaticFacetAbstract {
 
     public static Optional<CssClassFaFacet> create(
@@ -39,13 +39,18 @@ extends CssClassFaStaticFacetAbstract {
         final String cssClassFa = _Strings.emptyToNull(actionLayout.getCssClassFa());
         CssClassFaPosition cssClassFaPosition = actionLayout.getCssClassFaPosition();
         return cssClassFa != null
-                ? Optional.of(new CssClassFaFacetForActionXml(cssClassFa, cssClassFaPosition, holder))
+                ? Optional.of(new CssClassFaFacetForActionLayoutXml(cssClassFa, cssClassFaPosition, holder))
                 : Optional.empty();
     }
 
-    private CssClassFaFacetForActionXml(
+    private CssClassFaFacetForActionLayoutXml(
             final String value, final CssClassFaPosition position, final FacetHolder holder) {
         super(value, position, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java
index f22824dd8c..bf89629130 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetSimple;
 
-public class CssClassFacetForActionXml
+public class CssClassFacetForActionLayoutXml
 extends CssClassFacetSimple {
 
     public static Optional<CssClassFacet> create(
@@ -37,12 +37,17 @@ extends CssClassFacetSimple {
         }
         final String cssClass = _Strings.emptyToNull(actionLayout.getCssClass());
         return cssClass != null
-                ? Optional.of(new CssClassFacetForActionXml(cssClass, holder))
+                ? Optional.of(new CssClassFacetForActionLayoutXml(cssClass, holder))
                 : Optional.empty();
     }
 
-    private CssClassFacetForActionXml(final String value, final FacetHolder holder) {
+    private CssClassFacetForActionLayoutXml(final String value, final FacetHolder holder) {
         super(value, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
index daea65b69f..ea291da2a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-public class HiddenFacetForActionXml
+public class HiddenFacetForActionLayoutXml
 extends HiddenFacetAbstract {
 
     public static Optional<HiddenFacet> create(
@@ -39,14 +39,19 @@ extends HiddenFacetAbstract {
         final Where where = actionLayout.getHidden();
         return where != null
                 && where != Where.NOT_SPECIFIED
-                        ? Optional.of(new HiddenFacetForActionXml(where, holder))
+                        ? Optional.of(new HiddenFacetForActionLayoutXml(where, holder))
                         : Optional.empty();
     }
 
-    private HiddenFacetForActionXml(final Where where, final FacetHolder holder) {
+    private HiddenFacetForActionLayoutXml(final Where where, final FacetHolder holder) {
         super(where, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public String hiddenReason(final ManagedObject targetAdapter, final Where whereContext) {
         if(!where().includes(whereContext)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java
index 6100265af6..87cdc6e901 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacet;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract;
 
-public class MemberDescribedFacetForActionXml
+public class MemberDescribedFacetForActionLayoutXml
 extends MemberDescribedFacetWithStaticTextAbstract {
 
     public static Optional<MemberDescribedFacet> create(
@@ -37,12 +37,17 @@ extends MemberDescribedFacetWithStaticTextAbstract {
         }
         final String describedAs = _Strings.emptyToNull(actionLayout.getDescribedAs());
         return describedAs != null
-                ? Optional.of(new MemberDescribedFacetForActionXml(describedAs, holder))
+                ? Optional.of(new MemberDescribedFacetForActionLayoutXml(describedAs, holder))
                 : Optional.empty();
     }
 
-    private MemberDescribedFacetForActionXml(final String described, final FacetHolder holder) {
+    private MemberDescribedFacetForActionLayoutXml(final String described, final FacetHolder holder) {
         super(described, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java
index 748ad84377..82611e7df8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract;
 
-public class MemberNamedFacetForActionXml
+public class MemberNamedFacetForActionLayoutXml
 extends MemberNamedFacetWithStaticTextAbstract {
 
     public static Optional<MemberNamedFacet> create(
@@ -37,12 +37,17 @@ extends MemberNamedFacetWithStaticTextAbstract {
         }
         final String named = _Strings.emptyToNull(actionLayout.getNamed());
         return named != null
-                ? Optional.of(new MemberNamedFacetForActionXml(named, holder))
+                ? Optional.of(new MemberNamedFacetForActionLayoutXml(named, holder))
                 : Optional.empty();
     }
 
-    private MemberNamedFacetForActionXml(final String named, final FacetHolder holder) {
+    private MemberNamedFacetForActionLayoutXml(final String named, final FacetHolder holder) {
         super(named, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutXml.java
index 9884106c37..01c843138e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
 
-public class PromptStyleFacetForActionXml
+public class PromptStyleFacetForActionLayoutXml
 extends PromptStyleFacetAbstract {
 
     public static Optional<PromptStyleFacet> create(
@@ -38,13 +38,13 @@ extends PromptStyleFacetAbstract {
         }
         final PromptStyle promptStyle = actionLayout.getPromptStyle();
         return promptStyle != null
-                ? Optional.of(new PromptStyleFacetForActionXml(promptStyle, holder))
+                ? Optional.of(new PromptStyleFacetForActionLayoutXml(promptStyle, holder))
                 : Optional.empty();
     }
 
     private final PromptStyle promptStyle;
 
-    private PromptStyleFacetForActionXml(final PromptStyle promptStyle, final FacetHolder holder) {
+    private PromptStyleFacetForActionLayoutXml(final PromptStyle promptStyle, final FacetHolder holder) {
         super(holder);
         this.promptStyle = promptStyle;
     }
@@ -54,6 +54,11 @@ extends PromptStyleFacetAbstract {
         return promptStyle;
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
         super.visitAttributes(visitor);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionLayoutXml.java
index 76e995c73b..6528544e1a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/RedirectFacetFromActionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacet;
 import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacetAbstract;
 
-public class RedirectFacetFromActionXml
+public class RedirectFacetFromActionLayoutXml
 extends RedirectFacetAbstract {
 
     public static Optional<RedirectFacet> create(
@@ -37,13 +37,18 @@ extends RedirectFacetAbstract {
         }
         final Redirect redirect = actionLayout.getRedirect();
         return redirect != null
-                ? Optional.of(new RedirectFacetFromActionXml(redirect, holder))
+                ? Optional.of(new RedirectFacetFromActionLayoutXml(redirect, holder))
                 : Optional.empty();
     }
 
-    public RedirectFacetFromActionXml(
+    public RedirectFacetFromActionLayoutXml(
             final Redirect policy, final FacetHolder holder) {
         super(policy, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java
index 04d29b4ed0..ca8d387b84 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetSimple;
 
-public class CssClassFacetForCollectionXml
+public class CssClassFacetForCollectionLayoutXml
 extends CssClassFacetSimple {
 
     public static Optional<CssClassFacet> create(
@@ -37,12 +37,17 @@ extends CssClassFacetSimple {
         }
         final String cssClass = _Strings.emptyToNull(collectionLayout.getCssClass());
         return cssClass != null
-                ? Optional.of(new CssClassFacetForCollectionXml(cssClass, holder))
+                ? Optional.of(new CssClassFacetForCollectionLayoutXml(cssClass, holder))
                 : Optional.empty();
     }
 
-    private CssClassFacetForCollectionXml(final String value, final FacetHolder holder) {
+    private CssClassFacetForCollectionLayoutXml(final String value, final FacetHolder holder) {
         super(value, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java
index 70a82c17f5..8fa0d454d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract;
 
-public class DefaultViewFacetForCollectionXml
+public class DefaultViewFacetForCollectionLayoutXml
 extends DefaultViewFacetAbstract {
 
     public static Optional<DefaultViewFacet> create(
@@ -38,11 +38,16 @@ extends DefaultViewFacetAbstract {
 
         final String defaultView = _Strings.emptyToNull(collectionLayout.getDefaultView());
         return defaultView != null
-                ? Optional.of(new DefaultViewFacetForCollectionXml(defaultView, holder))
+                ? Optional.of(new DefaultViewFacetForCollectionLayoutXml(defaultView, holder))
                 : Optional.empty();
     }
 
-    private DefaultViewFacetForCollectionXml(final String value, final FacetHolder holder) {
+    private DefaultViewFacetForCollectionLayoutXml(final String value, final FacetHolder holder) {
         super(value, holder);
     }
+
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
similarity index 88%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
index 1ea8d01f8e..6e00fe0031 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-public class HiddenFacetForCollectionXml
+public class HiddenFacetForCollectionLayoutXml
 extends HiddenFacetAbstract {
 
     public static Optional<HiddenFacet> create(
@@ -39,14 +39,19 @@ extends HiddenFacetAbstract {
         final Where where = collectionLayout.getHidden();
         return where != null
                 && where != Where.NOT_SPECIFIED
-                        ? Optional.of(new HiddenFacetForCollectionXml(where, holder))
+                        ? Optional.of(new HiddenFacetForCollectionLayoutXml(where, holder))
                         : Optional.empty();
     }
 
-    private HiddenFacetForCollectionXml(final Where where, final FacetHolder holder) {
+    private HiddenFacetForCollectionLayoutXml(final Where where, final FacetHolder holder) {
         super(where, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public String hiddenReason(final ManagedObject targetAdapter, final Where whereContext) {
         if(!where().includes(whereContext)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java
index 67861eea87..88a9cc007a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacet;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract;
 
-public class MemberDescribedFacetForCollectionXml
+public class MemberDescribedFacetForCollectionLayoutXml
 extends MemberDescribedFacetWithStaticTextAbstract {
 
     public static Optional<MemberDescribedFacet> create(
@@ -37,14 +37,19 @@ extends MemberDescribedFacetWithStaticTextAbstract {
         }
         final String describedAs = _Strings.emptyToNull(collectionLayout.getDescribedAs());
         return describedAs != null
-                ? Optional.of(new MemberDescribedFacetForCollectionXml(describedAs, holder))
+                ? Optional.of(new MemberDescribedFacetForCollectionLayoutXml(describedAs, holder))
                 : Optional.empty();
     }
 
-    private MemberDescribedFacetForCollectionXml(
+    private MemberDescribedFacetForCollectionLayoutXml(
             final String described,
             final FacetHolder holder) {
         super(described, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java
index cfff383896..a3a970c265 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract;
 
-public class MemberNamedFacetForCollectionXml
+public class MemberNamedFacetForCollectionLayoutXml
 extends MemberNamedFacetWithStaticTextAbstract {
 
     public static Optional<MemberNamedFacet> create(
@@ -37,15 +37,20 @@ extends MemberNamedFacetWithStaticTextAbstract {
         }
         final String named = _Strings.emptyToNull(collectionLayout.getNamed());
         return named != null
-                ? Optional.of(new MemberNamedFacetForCollectionXml(named, holder))
+                ? Optional.of(new MemberNamedFacetForCollectionLayoutXml(named, holder))
                 : Optional.empty();
     }
 
-    private MemberNamedFacetForCollectionXml(
+    private MemberNamedFacetForCollectionLayoutXml(
             final String named,
             final FacetHolder holder) {
 
         super(named, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java
index 5567df2fb7..9ca7d86f1d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
 
-public class PagedFacetForCollectionXml
+public class PagedFacetForCollectionLayoutXml
 extends PagedFacetAbstract {
 
     public static Optional<PagedFacet> create(
@@ -37,12 +37,17 @@ extends PagedFacetAbstract {
         final Integer paged = collectionLayout.getPaged();
         return paged != null
                 && paged != -1
-                        ? Optional.of(new PagedFacetForCollectionXml(paged, holder))
+                        ? Optional.of(new PagedFacetForCollectionLayoutXml(paged, holder))
                         : Optional.empty();
     }
 
-    private PagedFacetForCollectionXml(final int paged, final FacetHolder holder) {
+    private PagedFacetForCollectionLayoutXml(final int paged, final FacetHolder holder) {
         super(paged, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java
index 26dcf68c52..0379af2e3c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java
@@ -29,7 +29,7 @@ import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacetA
 
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
-public class SortedByFacetForCollectionXml
+public class SortedByFacetForCollectionLayoutXml
 extends SortedByFacetAbstract {
 
     public static Optional<SortedByFacet> create(
@@ -48,12 +48,17 @@ extends SortedByFacetAbstract {
         }
 
         return sortedByClass != null
-                ? Optional.of(new SortedByFacetForCollectionXml(uncheckedCast(sortedByClass), holder))
+                ? Optional.of(new SortedByFacetForCollectionLayoutXml(uncheckedCast(sortedByClass), holder))
                 : Optional.empty();
     }
 
-    private SortedByFacetForCollectionXml(final Class<? extends Comparator<?>> sortedBy, final FacetHolder holder) {
+    private SortedByFacetForCollectionLayoutXml(final Class<? extends Comparator<?>> sortedBy, final FacetHolder holder) {
         super(sortedBy, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java
similarity index 78%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java
index d262eec979..280bc8d9d7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java
@@ -27,20 +27,20 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 import lombok.NonNull;
 
-public class LayoutGroupFacetFromXml
+public class LayoutGroupFacetForLayoutXml
 extends LayoutGroupFacetAbstract {
 
     // -- FACTORIES
 
-    public static Optional<LayoutGroupFacetFromXml> create(
+    public static Optional<LayoutGroupFacetForLayoutXml> create(
             final @Nullable GroupIdAndName groupIdAndName,
             final @NonNull  FacetHolder holder) {
 
         return Optional.ofNullable(groupIdAndName)
-                .map(gIdAndName->new LayoutGroupFacetFromXml(gIdAndName, holder));
+                .map(gIdAndName->new LayoutGroupFacetForLayoutXml(gIdAndName, holder));
     }
 
-    public static Optional<LayoutGroupFacetFromXml> create(
+    public static Optional<LayoutGroupFacetForLayoutXml> create(
             final @NonNull FieldSet fieldSet,
             final @NonNull FacetHolder holder) {
 
@@ -51,14 +51,18 @@ extends LayoutGroupFacetAbstract {
 
     // -- IMPLEMENTATION
 
-    private LayoutGroupFacetFromXml(final GroupIdAndName groupIdAndName, final FacetHolder holder) {
+    private LayoutGroupFacetForLayoutXml(final GroupIdAndName groupIdAndName, final FacetHolder holder) {
         super(groupIdAndName, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public boolean isExplicitBinding() {
         return true;
     }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetFromXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java
similarity index 75%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetFromXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java
index 1ac18b24a7..6be1a1ddc8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetFromXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java
@@ -20,17 +20,22 @@ package org.apache.isis.core.metamodel.facets.members.layout.order;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class LayoutOrderFacetFromXml
+public class LayoutOrderFacetForLayoutXml
 extends LayoutOrderFacetAbstract {
 
-    public static LayoutOrderFacetFromXml create(
+    public static LayoutOrderFacetForLayoutXml create(
             final int sequenceAsInt,
             final FacetHolder holder) {
-        return new LayoutOrderFacetFromXml("" + sequenceAsInt, holder);
+        return new LayoutOrderFacetForLayoutXml("" + sequenceAsInt, holder);
     }
 
-    public LayoutOrderFacetFromXml(final String sequence, final FacetHolder holder) {
+    public LayoutOrderFacetForLayoutXml(final String sequence, final FacetHolder holder) {
         super(sequence, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java
similarity index 88%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java
index 4af23d9390..7c0ac99e3d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract;
 
-public class BookmarkPolicyFacetForDomainObjectXml
+public class BookmarkPolicyFacetForDomainObjectLayoutXml
 extends BookmarkPolicyFacetAbstract {
 
     public static Optional<BookmarkPolicyFacet> create(
@@ -38,14 +38,19 @@ extends BookmarkPolicyFacetAbstract {
         final BookmarkPolicy bookmarkPolicy = domainObjectLayout.getBookmarking();
         return bookmarkPolicy != null
                 && bookmarkPolicy != BookmarkPolicy.NEVER
-                        ? Optional.of(new BookmarkPolicyFacetForDomainObjectXml(bookmarkPolicy, holder))
+                        ? Optional.of(new BookmarkPolicyFacetForDomainObjectLayoutXml(bookmarkPolicy, holder))
                         : Optional.empty();
     }
 
-    private BookmarkPolicyFacetForDomainObjectXml(
+    private BookmarkPolicyFacetForDomainObjectLayoutXml(
             final BookmarkPolicy bookmarkPolicy,
             final FacetHolder holder) {
         super(bookmarkPolicy, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectLayoutXml.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectLayoutXml.java
index 6ed0b7379f..ffdc4887fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaStaticFacetAbstract;
 
-public class CssClassFaFacetForDomainObjectXml
+public class CssClassFaFacetForDomainObjectLayoutXml
 extends CssClassFaStaticFacetAbstract {
 
     public static Optional<CssClassFaFacet> create(
@@ -39,15 +39,20 @@ extends CssClassFaStaticFacetAbstract {
         final String cssClassFa = _Strings.emptyToNull(domainObjectLayout.getCssClassFa());
         CssClassFaPosition cssClassFaPosition = domainObjectLayout.getCssClassFaPosition();
         return cssClassFa != null
-                ? Optional.of(new CssClassFaFacetForDomainObjectXml(cssClassFa, cssClassFaPosition, holder))
+                ? Optional.of(new CssClassFaFacetForDomainObjectLayoutXml(cssClassFa, cssClassFaPosition, holder))
                 : Optional.empty();
     }
 
-    private CssClassFaFacetForDomainObjectXml(
+    private CssClassFaFacetForDomainObjectLayoutXml(
             final String value,
             final CssClassFaPosition position,
             final FacetHolder holder) {
         super(value, position, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java
index f1714870ed..7257dc6df5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetSimple;
 
-public class CssClassFacetForDomainObjectXml
+public class CssClassFacetForDomainObjectLayoutXml
 extends CssClassFacetSimple {
 
     public static Optional<CssClassFacet> create(
@@ -37,12 +37,17 @@ extends CssClassFacetSimple {
         }
         final String cssClass = _Strings.emptyToNull(domainObjectLayout.getCssClass());
         return cssClass != null
-                ? Optional.of(new CssClassFacetForDomainObjectXml(cssClass, holder))
+                ? Optional.of(new CssClassFacetForDomainObjectLayoutXml(cssClass, holder))
                 : Optional.empty();
     }
 
-    private CssClassFacetForDomainObjectXml(final String value, final FacetHolder holder) {
+    private CssClassFacetForDomainObjectLayoutXml(final String value, final FacetHolder holder) {
         super(value, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectLayoutXml.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectLayoutXml.java
index 0675ab6201..74a341849e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.described.ObjectDescribedFacet;
 import org.apache.isis.core.metamodel.facets.all.described.ObjectDescribedFacetAbstract;
 
-public class DescribedAsFacetForDomainObjectXml
+public class DescribedAsFacetForDomainObjectLayoutXml
 extends ObjectDescribedFacetAbstract {
 
     public static Optional<ObjectDescribedFacet> create(
@@ -37,14 +37,19 @@ extends ObjectDescribedFacetAbstract {
         }
         final String describedAs = _Strings.emptyToNull(domainObjectLayout.getDescribedAs());
         return describedAs != null
-                ? Optional.of(new DescribedAsFacetForDomainObjectXml(describedAs, holder))
+                ? Optional.of(new DescribedAsFacetForDomainObjectLayoutXml(describedAs, holder))
                 : Optional.empty();
     }
 
-    private DescribedAsFacetForDomainObjectXml(
+    private DescribedAsFacetForDomainObjectLayoutXml(
             final String described,
             final FacetHolder holder) {
         super(described, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
index 895ba0d906..618f888e06 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
@@ -29,7 +29,7 @@ import org.apache.isis.core.metamodel.facets.all.named.ObjectNamedFacetAbstract;
 
 import lombok.val;
 
-public class ObjectNamedFacetForDomainObjectXml
+public class ObjectNamedFacetForDomainObjectLayoutXml
 extends ObjectNamedFacetAbstract {
 
     public static Optional<ObjectNamedFacet> create(
@@ -54,15 +54,20 @@ extends ObjectNamedFacetAbstract {
         }
 
         return Optional.of(
-                new ObjectNamedFacetForDomainObjectXml(
+                new ObjectNamedFacetForDomainObjectLayoutXml(
                             nounForms,
                             holder));
     }
 
-    private ObjectNamedFacetForDomainObjectXml(
+    private ObjectNamedFacetForDomainObjectLayoutXml(
             final NounForms nounForms,
             final FacetHolder holder) {
         super(nounForms, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java
similarity index 84%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java
index 401ca90c7e..34d0eebca2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetSimple;
 
-public class CssClassFacetForPropertyXml
+public class CssClassFacetForPropertyLayoutXml
 extends CssClassFacetSimple {
 
     public static Optional<CssClassFacet> create(
@@ -37,12 +37,17 @@ extends CssClassFacetSimple {
         }
         final String cssClass = _Strings.emptyToNull(propertyLayout.getCssClass());
         return cssClass != null
-                ? Optional.of(new CssClassFacetForPropertyXml(cssClass, holder))
+                ? Optional.of(new CssClassFacetForPropertyLayoutXml(cssClass, holder))
                 : Optional.empty();
     }
 
-    private CssClassFacetForPropertyXml(final String value, final FacetHolder holder) {
+    private CssClassFacetForPropertyLayoutXml(final String value, final FacetHolder holder) {
         super(value, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
index 5c64bd7d47..bdbeb2460e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-public class HiddenFacetForPropertyXml
+public class HiddenFacetForPropertyLayoutXml
 extends HiddenFacetAbstract {
 
     public static Optional<HiddenFacet> create(
@@ -39,14 +39,19 @@ extends HiddenFacetAbstract {
         final Where where = propertyLayout.getHidden();
         return where != null
                 && where != Where.NOT_SPECIFIED
-                        ? Optional.of(new HiddenFacetForPropertyXml(where, holder))
+                        ? Optional.of(new HiddenFacetForPropertyLayoutXml(where, holder))
                         : Optional.empty();
     }
 
-    private HiddenFacetForPropertyXml(final Where where, final FacetHolder holder) {
+    private HiddenFacetForPropertyLayoutXml(final Where where, final FacetHolder holder) {
         super(where, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public String hiddenReason(final ManagedObject targetAdapter, final Where whereContext) {
         if(!where().includes(whereContext)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java
index 83f991ca6c..2df15aee6e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacetAbstract;
 
-public class LabelAtFacetForPropertyXml
+public class LabelAtFacetForPropertyLayoutXml
 extends LabelAtFacetAbstract {
 
     public static Optional<LabelAtFacet> create(
@@ -37,12 +37,17 @@ extends LabelAtFacetAbstract {
         }
         final LabelPosition labelPosition = propertyLayout.getLabelPosition();
         return labelPosition != null
-                ? Optional.of(new LabelAtFacetForPropertyXml(labelPosition, holder))
+                ? Optional.of(new LabelAtFacetForPropertyLayoutXml(labelPosition, holder))
                 : Optional.empty();
     }
 
-    private LabelAtFacetForPropertyXml(final LabelPosition value, final FacetHolder holder) {
+    private LabelAtFacetForPropertyLayoutXml(final LabelPosition value, final FacetHolder holder) {
         super(value, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java
similarity index 87%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java
index c29f21780b..5a7c4b1b14 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacet;
 import org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract;
 
-public class MemberDescribedFacetForPropertyXml
+public class MemberDescribedFacetForPropertyLayoutXml
 extends MemberDescribedFacetWithStaticTextAbstract {
 
     public static Optional<MemberDescribedFacet> create(
@@ -36,15 +36,19 @@ extends MemberDescribedFacetWithStaticTextAbstract {
         return Optional.ofNullable(propertyLayoutData)
         .map(PropertyLayoutData::getDescribedAs)
         .filter(_Strings::isEmpty)
-        .map(describedAs->new MemberDescribedFacetForPropertyXml(
+        .map(describedAs->new MemberDescribedFacetForPropertyLayoutXml(
                 describedAs,
                 holder));
     }
 
-    private MemberDescribedFacetForPropertyXml(
+    private MemberDescribedFacetForPropertyLayoutXml(
             final String described,
             final FacetHolder holder) {
         super(described, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java
similarity index 87%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java
index 7acdd41f13..c6ada80d75 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
 import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract;
 
-public class MemberNamedFacetForPropertyXml
+public class MemberNamedFacetForPropertyLayoutXml
 extends MemberNamedFacetWithStaticTextAbstract {
 
     public static Optional<MemberNamedFacet> create(
@@ -36,15 +36,20 @@ extends MemberNamedFacetWithStaticTextAbstract {
         return Optional.ofNullable(propertyLayoutData)
         .map(PropertyLayoutData::getNamed)
         .filter(_Strings::isEmpty)
-        .map(named->new MemberNamedFacetForPropertyXml(
+        .map(named->new MemberNamedFacetForPropertyLayoutXml(
                 named,
                 holder));
     }
 
-    private MemberNamedFacetForPropertyXml(
+    private MemberNamedFacetForPropertyLayoutXml(
             final String named,
             final FacetHolder holder) {
         super(named, holder, Precedence.HIGH); // XML layout overrules layout from annotations
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java
index 9ee36562f9..8ffcfe6b30 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacetAbstract;
 
-public class MultiLineFacetForPropertyXml
+public class MultiLineFacetForPropertyLayoutXml
 extends MultiLineFacetAbstract {
 
     public static Optional<MultiLineFacet> create(
@@ -36,12 +36,17 @@ extends MultiLineFacetAbstract {
         }
         final Integer multiLine = propertyLayout.getMultiLine();
         return multiLine != null && multiLine > 1
-                ? Optional.of(new MultiLineFacetForPropertyXml(multiLine, holder))
+                ? Optional.of(new MultiLineFacetForPropertyLayoutXml(multiLine, holder))
                 : Optional.empty();
     }
 
-    private MultiLineFacetForPropertyXml(final int numberOfLines, final FacetHolder holder) {
+    private MultiLineFacetForPropertyLayoutXml(final int numberOfLines, final FacetHolder holder) {
         super(numberOfLines, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
similarity index 85%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
index de53221331..d9643b21dc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
 
-public class PromptStyleFacetForPropertyXml
+public class PromptStyleFacetForPropertyLayoutXml
 extends PromptStyleFacetAbstract {
 
     public static Optional<PromptStyleFacet> create(
@@ -38,17 +38,22 @@ extends PromptStyleFacetAbstract {
         }
         final PromptStyle promptStyle = propertyLayout.getPromptStyle();
         return promptStyle != null
-                ? Optional.of(new PromptStyleFacetForPropertyXml(promptStyle, holder))
+                ? Optional.of(new PromptStyleFacetForPropertyLayoutXml(promptStyle, holder))
                 : Optional.empty();
     }
 
     private final PromptStyle promptStyle;
 
-    private PromptStyleFacetForPropertyXml(final PromptStyle promptStyle, final FacetHolder holder) {
+    private PromptStyleFacetForPropertyLayoutXml(final PromptStyle promptStyle, final FacetHolder holder) {
         super(holder);
         this.promptStyle = promptStyle;
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
     @Override
     public PromptStyle value() {
         return promptStyle;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java
similarity index 85%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java
index 8749cb0e22..c86a22b644 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract;
 
-public class RenderedAdjustedFacetForPropertyXml
+public class RenderedAdjustedFacetForPropertyLayoutXml
 extends DateRenderAdjustFacetAbstract {
 
     public static Optional<DateRenderAdjustFacet> create(
@@ -36,12 +36,17 @@ extends DateRenderAdjustFacetAbstract {
         }
         final int adjustByDays = propertyLayout.getDateRenderAdjustDays();
         return adjustByDays != 0
-                        ? Optional.of(new RenderedAdjustedFacetForPropertyXml(adjustByDays, holder))
+                        ? Optional.of(new RenderedAdjustedFacetForPropertyLayoutXml(adjustByDays, holder))
                         : Optional.empty();
     }
 
-    private RenderedAdjustedFacetForPropertyXml(final int adjustByDays, final FacetHolder holder) {
+    private RenderedAdjustedFacetForPropertyLayoutXml(final int adjustByDays, final FacetHolder holder) {
         super(adjustByDays, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java
index 515e5a16cc..dc0f7415dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacetAbstract;
 
-public class TypicalLengthFacetForPropertyXml
+public class TypicalLengthFacetForPropertyLayoutXml
 extends TypicalLengthFacetAbstract {
 
     public static Optional<TypicalLengthFacet> create(
@@ -37,12 +37,17 @@ extends TypicalLengthFacetAbstract {
         final Integer typicalLength = propertyLayout.getTypicalLength();
         return typicalLength != null
                 && typicalLength != -1
-                    ? Optional.of(new TypicalLengthFacetForPropertyXml(typicalLength, holder))
+                    ? Optional.of(new TypicalLengthFacetForPropertyLayoutXml(typicalLength, holder))
                     : Optional.empty();
     }
 
-    private TypicalLengthFacetForPropertyXml(final int typicalLength, final FacetHolder holder) {
+    private TypicalLengthFacetForPropertyLayoutXml(final int typicalLength, final FacetHolder holder) {
         super(typicalLength, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyXml.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java
index 51b8f6a5f6..d1847b9d53 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet;
 import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacetAbstract;
 
-public class UnchangingFacetForPropertyXml
+public class UnchangingFacetForPropertyLayoutXml
 extends UnchangingFacetAbstract {
 
     public static Optional<UnchangingFacet> create(
@@ -40,11 +40,16 @@ extends UnchangingFacetAbstract {
                 || repainting == Repainting.NOT_SPECIFIED) {
             return Optional.empty();
         }
-        return Optional.of(new UnchangingFacetForPropertyXml(repainting == Repainting.NO_REPAINT, holder));
+        return Optional.of(new UnchangingFacetForPropertyLayoutXml(repainting == Repainting.NO_REPAINT, holder));
     }
 
-    private UnchangingFacetForPropertyXml(final boolean unchanging, final FacetHolder holder) {
+    private UnchangingFacetForPropertyLayoutXml(final boolean unchanging, final FacetHolder holder) {
         super(unchanging, holder);
     }
 
+    @Override
+    public boolean isAllowedToBeSharedWhenMixedIn() {
+        return false;
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 887eaa3801..6fbb537b3e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -39,40 +39,40 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.config.environment.IsisSystemEnvironment;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.MemberNamedFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.PromptStyleFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.RedirectFacetFromActionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.CssClassFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.DefaultViewFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.HiddenFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.MemberDescribedFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.MemberNamedFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.PagedFacetForCollectionXml;
-import org.apache.isis.core.metamodel.facets.collections.layout.SortedByFacetForCollectionXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.MemberNamedFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.PromptStyleFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.CssClassFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.DefaultViewFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.HiddenFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.MemberDescribedFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.MemberNamedFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.PagedFacetForCollectionLayoutXml;
+import org.apache.isis.core.metamodel.facets.collections.layout.SortedByFacetForCollectionLayoutXml;
 import org.apache.isis.core.metamodel.facets.members.layout.group.GroupIdAndName;
-import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromXml;
-import org.apache.isis.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromXml;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.BookmarkPolicyFacetForDomainObjectXml;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFaFacetForDomainObjectXml;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFacetForDomainObjectXml;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DescribedAsFacetForDomainObjectXml;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.ObjectNamedFacetForDomainObjectXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.CssClassFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.MemberDescribedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.MemberNamedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetForPropertyXml;
+import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFacetForLayoutXml;
+import org.apache.isis.core.metamodel.facets.members.layout.order.LayoutOrderFacetForLayoutXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.BookmarkPolicyFacetForDomainObjectLayoutXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFaFacetForDomainObjectLayoutXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFacetForDomainObjectLayoutXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DescribedAsFacetForDomainObjectLayoutXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.ObjectNamedFacetForDomainObjectLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.CssClassFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.MemberDescribedFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.MemberNamedFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetForPropertyLayoutXml;
 import org.apache.isis.core.metamodel.layout.LayoutFacetUtil.MetamodelToGridOverridingVisitor;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
@@ -160,29 +160,29 @@ implements GridSystemService<G> {
             public void visit(final DomainObjectLayoutData domainObjectLayoutData) {
 
                 updateFacet(
-                        BookmarkPolicyFacetForDomainObjectXml.type(),
-                        BookmarkPolicyFacetForDomainObjectXml.class::isInstance,
-                        BookmarkPolicyFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec),
+                        BookmarkPolicyFacetForDomainObjectLayoutXml.type(),
+                        BookmarkPolicyFacetForDomainObjectLayoutXml.class::isInstance,
+                        BookmarkPolicyFacetForDomainObjectLayoutXml.create(domainObjectLayoutData, objectSpec),
                         objectSpec);
                 updateFacet(
-                        CssClassFacetForDomainObjectXml.type(),
-                        CssClassFacetForDomainObjectXml.class::isInstance,
-                        CssClassFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec),
+                        CssClassFacetForDomainObjectLayoutXml.type(),
+                        CssClassFacetForDomainObjectLayoutXml.class::isInstance,
+                        CssClassFacetForDomainObjectLayoutXml.create(domainObjectLayoutData, objectSpec),
                         objectSpec);
                 updateFacet(
-                        CssClassFaFacetForDomainObjectXml.type(),
-                        CssClassFaFacetForDomainObjectXml.class::isInstance,
-                        CssClassFaFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec),
+                        CssClassFaFacetForDomainObjectLayoutXml.type(),
+                        CssClassFaFacetForDomainObjectLayoutXml.class::isInstance,
+                        CssClassFaFacetForDomainObjectLayoutXml.create(domainObjectLayoutData, objectSpec),
                         objectSpec);
                 updateFacet(
-                        DescribedAsFacetForDomainObjectXml.type(),
-                        DescribedAsFacetForDomainObjectXml.class::isInstance,
-                        DescribedAsFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec),
+                        DescribedAsFacetForDomainObjectLayoutXml.type(),
+                        DescribedAsFacetForDomainObjectLayoutXml.class::isInstance,
+                        DescribedAsFacetForDomainObjectLayoutXml.create(domainObjectLayoutData, objectSpec),
                         objectSpec);
                 updateFacet(
-                        ObjectNamedFacetForDomainObjectXml.type(),
-                        ObjectNamedFacetForDomainObjectXml.class::isInstance,
-                        ObjectNamedFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec),
+                        ObjectNamedFacetForDomainObjectLayoutXml.type(),
+                        ObjectNamedFacetForDomainObjectLayoutXml.class::isInstance,
+                        ObjectNamedFacetForDomainObjectLayoutXml.create(domainObjectLayoutData, objectSpec),
                         objectSpec);
             }
 
@@ -222,12 +222,12 @@ implements GridSystemService<G> {
                     groupIdAndName = null;
                     memberOrderSequence = actionDomainObjectSequence++;
                 }
-                updateFacet(LayoutOrderFacetFromXml.create(memberOrderSequence, objectAction));
+                updateFacet(LayoutOrderFacetForLayoutXml.create(memberOrderSequence, objectAction));
 
                 updateFacet(
-                        LayoutGroupFacetFromXml.type(),
-                        LayoutGroupFacetFromXml.class::isInstance,
-                        LayoutGroupFacetFromXml.create(groupIdAndName, objectAction),
+                        LayoutGroupFacetForLayoutXml.type(),
+                        LayoutGroupFacetForLayoutXml.class::isInstance,
+                        LayoutGroupFacetForLayoutXml.create(groupIdAndName, objectAction),
                         objectAction);
 
                 // fix up the action position if required
@@ -249,57 +249,57 @@ implements GridSystemService<G> {
                 }
 
                 updateFacet(
-                        ActionPositionFacetForActionXml.type(),
-                        ActionPositionFacetForActionXml.class::isInstance,
-                        ActionPositionFacetForActionXml.create(actionLayoutData, objectAction),
+                        ActionPositionFacetForActionLayoutXml.type(),
+                        ActionPositionFacetForActionLayoutXml.class::isInstance,
+                        ActionPositionFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        BookmarkPolicyFacetForActionXml.type(),
-                        BookmarkPolicyFacetForActionXml.class::isInstance,
-                        BookmarkPolicyFacetForActionXml.create(actionLayoutData, objectAction),
+                        BookmarkPolicyFacetForActionLayoutXml.type(),
+                        BookmarkPolicyFacetForActionLayoutXml.class::isInstance,
+                        BookmarkPolicyFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        CssClassFacetForActionXml.type(),
-                        CssClassFacetForActionXml.class::isInstance,
-                        CssClassFacetForActionXml.create(actionLayoutData, objectAction),
+                        CssClassFacetForActionLayoutXml.type(),
+                        CssClassFacetForActionLayoutXml.class::isInstance,
+                        CssClassFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        CssClassFaFacetForActionXml.type(),
-                        CssClassFaFacetForActionXml.class::isInstance,
-                        CssClassFaFacetForActionXml.create(actionLayoutData, objectAction),
+                        CssClassFaFacetForActionLayoutXml.type(),
+                        CssClassFaFacetForActionLayoutXml.class::isInstance,
+                        CssClassFaFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        MemberDescribedFacetForActionXml.type(),
-                        MemberDescribedFacetForActionXml.class::isInstance,
-                        MemberDescribedFacetForActionXml.create(actionLayoutData, objectAction),
+                        MemberDescribedFacetForActionLayoutXml.type(),
+                        MemberDescribedFacetForActionLayoutXml.class::isInstance,
+                        MemberDescribedFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        HiddenFacetForActionXml.type(),
-                        HiddenFacetForActionXml.class::isInstance,
-                        HiddenFacetForActionXml.create(actionLayoutData, objectAction),
+                        HiddenFacetForActionLayoutXml.type(),
+                        HiddenFacetForActionLayoutXml.class::isInstance,
+                        HiddenFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        MemberNamedFacetForActionXml.type(),
-                        MemberNamedFacetForActionXml.class::isInstance,
-                        MemberNamedFacetForActionXml.create(actionLayoutData, objectAction),
+                        MemberNamedFacetForActionLayoutXml.type(),
+                        MemberNamedFacetForActionLayoutXml.class::isInstance,
+                        MemberNamedFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        PromptStyleFacetForActionXml.type(),
-                        PromptStyleFacetForActionXml.class::isInstance,
-                        PromptStyleFacetForActionXml.create(actionLayoutData, objectAction),
+                        PromptStyleFacetForActionLayoutXml.type(),
+                        PromptStyleFacetForActionLayoutXml.class::isInstance,
+                        PromptStyleFacetForActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
                 updateFacet(
-                        RedirectFacetFromActionXml.type(),
-                        RedirectFacetFromActionXml.class::isInstance,
-                        RedirectFacetFromActionXml.create(actionLayoutData, objectAction),
+                        RedirectFacetFromActionLayoutXml.type(),
+                        RedirectFacetFromActionLayoutXml.class::isInstance,
+                        RedirectFacetFromActionLayoutXml.create(actionLayoutData, objectAction),
                         objectAction);
 
             }
@@ -312,63 +312,63 @@ implements GridSystemService<G> {
                 }
 
                 updateFacet(
-                        CssClassFacetForPropertyXml.type(),
-                        CssClassFacetForPropertyXml.class::isInstance,
-                        CssClassFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        CssClassFacetForPropertyLayoutXml.type(),
+                        CssClassFacetForPropertyLayoutXml.class::isInstance,
+                        CssClassFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        MemberDescribedFacetForPropertyXml.type(),
-                        MemberDescribedFacetForPropertyXml.class::isInstance,
-                        MemberDescribedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        MemberDescribedFacetForPropertyLayoutXml.type(),
+                        MemberDescribedFacetForPropertyLayoutXml.class::isInstance,
+                        MemberDescribedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        HiddenFacetForPropertyXml.type(),
-                        HiddenFacetForPropertyXml.class::isInstance,
-                        HiddenFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        HiddenFacetForPropertyLayoutXml.type(),
+                        HiddenFacetForPropertyLayoutXml.class::isInstance,
+                        HiddenFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        LabelAtFacetForPropertyXml.type(),
-                        LabelAtFacetForPropertyXml.class::isInstance,
-                        LabelAtFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        LabelAtFacetForPropertyLayoutXml.type(),
+                        LabelAtFacetForPropertyLayoutXml.class::isInstance,
+                        LabelAtFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        MultiLineFacetForPropertyXml.type(),
-                        MultiLineFacetForPropertyXml.class::isInstance,
-                        MultiLineFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        MultiLineFacetForPropertyLayoutXml.type(),
+                        MultiLineFacetForPropertyLayoutXml.class::isInstance,
+                        MultiLineFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        MemberNamedFacetForPropertyXml.type(),
-                        MemberNamedFacetForPropertyXml.class::isInstance,
-                        MemberNamedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        MemberNamedFacetForPropertyLayoutXml.type(),
+                        MemberNamedFacetForPropertyLayoutXml.class::isInstance,
+                        MemberNamedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        PromptStyleFacetForPropertyXml.type(),
-                        PromptStyleFacetForPropertyXml.class::isInstance,
-                        PromptStyleFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        PromptStyleFacetForPropertyLayoutXml.type(),
+                        PromptStyleFacetForPropertyLayoutXml.class::isInstance,
+                        PromptStyleFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        RenderedAdjustedFacetForPropertyXml.type(),
-                        RenderedAdjustedFacetForPropertyXml.class::isInstance,
-                        RenderedAdjustedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        RenderedAdjustedFacetForPropertyLayoutXml.type(),
+                        RenderedAdjustedFacetForPropertyLayoutXml.class::isInstance,
+                        RenderedAdjustedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        UnchangingFacetForPropertyXml.type(),
-                        UnchangingFacetForPropertyXml.class::isInstance,
-                        UnchangingFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        UnchangingFacetForPropertyLayoutXml.type(),
+                        UnchangingFacetForPropertyLayoutXml.class::isInstance,
+                        UnchangingFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 updateFacet(
-                        TypicalLengthFacetForPropertyXml.type(),
-                        TypicalLengthFacetForPropertyXml.class::isInstance,
-                        TypicalLengthFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation),
+                        TypicalLengthFacetForPropertyLayoutXml.type(),
+                        TypicalLengthFacetForPropertyLayoutXml.class::isInstance,
+                        TypicalLengthFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation),
                         oneToOneAssociation);
 
                 // Layout group-name based on owning property group, Layout sequence monotonically increasing
@@ -376,12 +376,12 @@ implements GridSystemService<G> {
                 // table columns are shown correctly (by fieldset, then property order within that fieldset).
                 final FieldSet fieldSet = propertyLayoutData.getOwner();
 
-                updateFacet(LayoutOrderFacetFromXml.create(propertySequence.incrementAndGet(), oneToOneAssociation));
+                updateFacet(LayoutOrderFacetForLayoutXml.create(propertySequence.incrementAndGet(), oneToOneAssociation));
 
                 updateFacet(
-                        LayoutGroupFacetFromXml.type(),
-                        LayoutGroupFacetFromXml.class::isInstance,
-                        LayoutGroupFacetFromXml.create(fieldSet, oneToOneAssociation),
+                        LayoutGroupFacetForLayoutXml.type(),
+                        LayoutGroupFacetForLayoutXml.class::isInstance,
+                        LayoutGroupFacetForLayoutXml.create(fieldSet, oneToOneAssociation),
                         oneToOneAssociation);
             }
 
@@ -393,48 +393,48 @@ implements GridSystemService<G> {
                 }
 
                 updateFacet(
-                        CssClassFacetForCollectionXml.type(),
-                        CssClassFacetForCollectionXml.class::isInstance,
-                        CssClassFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        CssClassFacetForCollectionLayoutXml.type(),
+                        CssClassFacetForCollectionLayoutXml.class::isInstance,
+                        CssClassFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        DefaultViewFacetForCollectionXml.type(),
-                        DefaultViewFacetForCollectionXml.class::isInstance,
-                        DefaultViewFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        DefaultViewFacetForCollectionLayoutXml.type(),
+                        DefaultViewFacetForCollectionLayoutXml.class::isInstance,
+                        DefaultViewFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        MemberDescribedFacetForCollectionXml.type(),
-                        MemberDescribedFacetForCollectionXml.class::isInstance,
-                        MemberDescribedFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        MemberDescribedFacetForCollectionLayoutXml.type(),
+                        MemberDescribedFacetForCollectionLayoutXml.class::isInstance,
+                        MemberDescribedFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        HiddenFacetForCollectionXml.type(),
-                        HiddenFacetForCollectionXml.class::isInstance,
-                        HiddenFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        HiddenFacetForCollectionLayoutXml.type(),
+                        HiddenFacetForCollectionLayoutXml.class::isInstance,
+                        HiddenFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        MemberNamedFacetForCollectionXml.type(),
-                        MemberNamedFacetForCollectionXml.class::isInstance,
-                        MemberNamedFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        MemberNamedFacetForCollectionLayoutXml.type(),
+                        MemberNamedFacetForCollectionLayoutXml.class::isInstance,
+                        MemberNamedFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        PagedFacetForCollectionXml.type(),
-                        PagedFacetForCollectionXml.class::isInstance,
-                        PagedFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        PagedFacetForCollectionLayoutXml.type(),
+                        PagedFacetForCollectionLayoutXml.class::isInstance,
+                        PagedFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
                 updateFacet(
-                        SortedByFacetForCollectionXml.type(),
-                        SortedByFacetForCollectionXml.class::isInstance,
-                        SortedByFacetForCollectionXml.create(collectionLayoutData, oneToManyAssociation),
+                        SortedByFacetForCollectionLayoutXml.type(),
+                        SortedByFacetForCollectionLayoutXml.class::isInstance,
+                        SortedByFacetForCollectionLayoutXml.create(collectionLayoutData, oneToManyAssociation),
                         oneToManyAssociation);
 
-                updateFacet(LayoutOrderFacetFromXml.create(collectionSequence++, oneToManyAssociation));
+                updateFacet(LayoutOrderFacetForLayoutXml.create(collectionSequence++, oneToManyAssociation));
             }
         });
     }