You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/02 21:26:07 UTC

[isis] 02/02: ISIS-2713: adds logicalTypeName to all framework-defined features

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2713
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e7323235c8e476cccda25024725c578a44941f78
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 2 07:18:29 2021 +0100

    ISIS-2713: adds logicalTypeName to all framework-defined features
    
    except the DTOs generated by schemas, where it's not possible
---
 .../apache/isis/applib/annotation/SemanticsOf.java |  2 +
 .../org/apache/isis/applib/graph/SimpleEdge.java   |  8 ++-
 .../apache/isis/applib/graph/tree/TreeNode.java    |  3 ++
 .../isis/applib/mixins/dto/Dto_downloadXml.java    |  3 ++
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |  4 ++
 .../mixins/layout/Object_downloadLayoutXml.java    |  3 ++
 .../metamodel/Object_downloadMetamodelXml.java     |  3 ++
 .../mixins/metamodel/Object_logicalTypeName.java   |  2 +
 .../mixins/metamodel/Object_objectIdentifier.java  |  2 +
 .../mixins/metamodel/Object_rebuildMetamodel.java  |  3 ++
 .../applib/mixins/rest/Object_openRestApi.java     |  3 ++
 .../services/appfeat/ApplicationFeature.java       | 33 ++++++------
 .../services/appfeat/ApplicationFeatureSort.java   | 28 +++++-----
 .../isis/applib/services/bookmark/Bookmark.java    | 61 ++++++++++++----------
 .../services/bookmark/BookmarkHolder_lookup.java   |  2 +
 .../services/bookmark/BookmarkHolder_object.java   |  2 +
 .../isis/applib/services/jaxb/IsisSchemas.java     |  3 ++
 .../apache/isis/applib/services/layout/Style.java  | 13 +++--
 .../isis/applib/services/menu/MenuBarsService.java |  3 ++
 .../isis/applib/services/swagger/Format.java       |  4 ++
 .../isis/applib/services/swagger/Visibility.java   |  2 +
 .../java/org/apache/isis/applib/value/Blob.java    |  3 ++
 .../java/org/apache/isis/applib/value/Clob.java    |  3 ++
 .../isis/applib/value/LocalResourcePath.java       |  3 ++
 .../java/org/apache/isis/applib/value/Markup.java  |  3 ++
 .../org/apache/isis/applib/value/Password.java     |  3 ++
 .../metamodel/inspect/Object_inspectMetamodel.java |  3 ++
 .../appfeat/ApplicationFeatureDefault.java         |  3 ++
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |  3 ++
 .../valuetypes/markdown/applib/value/Markdown.java |  3 ++
 .../common/applib/mixins/Object_impersonate.java   |  3 ++
 .../applib/mixins/Object_impersonateWithRoles.java |  3 ++
 .../applib/mixins/Object_stopImpersonating.java    |  3 ++
 .../viewer/IsisModuleViewerWicketViewer.java       |  1 +
 .../wicket/viewer/mixins/Object_clearHints.java    |  4 ++
 35 files changed, 165 insertions(+), 63 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
index 126bf00..16c416f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
@@ -18,12 +18,14 @@
  */
 package org.apache.isis.applib.annotation;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.util.Enums;
 
 /**
  * @since 1.x {@index}
  * @see <a href="https://isis.apache.org/guides/rgant/rgant.html#_rgant-Action_semantics">Reference Guide</a>
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".annotation.SemanticsOf")
 public enum SemanticsOf {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
index 50f1c05..28a88f0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
@@ -18,16 +18,20 @@
  */
 package org.apache.isis.applib.graph;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
+
 import lombok.Value;
 
 /**
- * Fundamental building block for graph structures. 
- * 
+ * Fundamental building block for graph structures.
+ *
  * @since 2.0 {@index}
  *
  * @param <T> type constraint for values contained by this edge's vertices
  */
 @Value(staticConstructor = "of")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".graph.SimpleEdge")
 public class SimpleEdge<T> implements Edge<T> {
 
     Vertex<T> from;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
index f030437..7b4cef8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
@@ -29,6 +29,8 @@ import java.util.stream.StreamSupport;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.graph.Edge;
@@ -46,6 +48,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
  * @param <T> type constraint for values contained by this node
  */
 @Value(semanticsProviderName="org.apache.isis.core.metamodel.facets.value.treenode.TreeNodeValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".graph.tree.TreeNode")
 public class TreeNode<T> implements Vertex<T> {
 
     private final TreeState sharedState;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
index 4839f94..bd13af7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
@@ -20,8 +20,10 @@ package org.apache.isis.applib.mixins.dto;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -52,6 +54,7 @@ import lombok.val;
 @ActionLayout(
         cssClassFa = "fa-download",
         sequence = "500.1")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.dto.Dto_downloadXml")
 @RequiredArgsConstructor
 public class Dto_downloadXml {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
index 8bf77f0..16ab901 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
@@ -22,8 +22,11 @@ import java.util.Map;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -64,6 +67,7 @@ import lombok.val;
 @ActionLayout(
         cssClassFa = "fa-download",
         sequence = "500.2")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.dto.Dto_downloadXsd")
 @RequiredArgsConstructor
 public class Dto_downloadXsd {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
index 6fc08c0..a014568 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
@@ -20,8 +20,10 @@ package org.apache.isis.applib.mixins.layout;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Publishing;
@@ -55,6 +57,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "700.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.layout.Object_downloadLayoutXml")
 @RequiredArgsConstructor
 public class Object_downloadLayoutXml {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
index e556dc3..eb930c8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
@@ -23,8 +23,10 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Publishing;
@@ -63,6 +65,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "700.2"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.metamodel.Object_downloadMetamodelXml")
 @RequiredArgsConstructor
 public class Object_downloadMetamodelXml {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_logicalTypeName.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_logicalTypeName.java
index 98d7233..a962f18 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_logicalTypeName.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_logicalTypeName.java
@@ -20,6 +20,7 @@ package org.apache.isis.applib.mixins.metamodel;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
@@ -56,6 +57,7 @@ import lombok.val;
         fieldSetId = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "700.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.metamodel.Object_logicalTypeName")
 @RequiredArgsConstructor
 public class Object_logicalTypeName {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
index 55ea9dd..c521da7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
@@ -20,6 +20,7 @@ package org.apache.isis.applib.mixins.metamodel;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
@@ -56,6 +57,7 @@ import lombok.val;
         fieldSetId = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "700.2"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.metamodel.Object_objectIdentifier")
 @RequiredArgsConstructor
 public class Object_objectIdentifier {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_rebuildMetamodel.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_rebuildMetamodel.java
index 4c0bc4e..85c29cd 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_rebuildMetamodel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_rebuildMetamodel.java
@@ -20,8 +20,10 @@ package org.apache.isis.applib.mixins.metamodel;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.RestrictTo;
@@ -51,6 +53,7 @@ import lombok.RequiredArgsConstructor;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "800.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.metamodel.Object_rebuildMetamodel")
 @RequiredArgsConstructor
 public class Object_rebuildMetamodel {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/rest/Object_openRestApi.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/rest/Object_openRestApi.java
index 03f70cd..e0931e7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/rest/Object_openRestApi.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/rest/Object_openRestApi.java
@@ -22,8 +22,10 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.RestrictTo;
@@ -54,6 +56,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "750.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".mixins.rest.Object_openRestApi")
 @RequiredArgsConstructor
 public class Object_openRestApi {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
index 2dcf3ab..ff6de53 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
@@ -23,26 +23,29 @@ import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.SortedSet;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 /**
- * 
+ *
  * @since 1.x revised for 2.0 {@index}
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE_SUDO + ".ApplicationFeature")
 public interface ApplicationFeature {
 
     ApplicationFeatureId getFeatureId();
-    
+
     default String getFullyQualifiedName() {
         return getFeatureId().getFullyQualifiedName();
     }
 
     /**
-     * Returns optionally the member sort, based on whether this feature is of sort 
+     * Returns optionally the member sort, based on whether this feature is of sort
      * {@link ApplicationFeatureSort#MEMBER}.
      */
     Optional<ApplicationMemberSort> getMemberSort();
-    
+
     default SortedSet<ApplicationFeatureId> getMembersOfSort(final ApplicationMemberSort memberSort) {
         switch (memberSort) {
         case PROPERTY:
@@ -55,33 +58,33 @@ public interface ApplicationFeature {
             return Collections.emptySortedSet();
         }
     }
-    
+
     /**
      * Returns optionally the action's return type, based on
      * whether this feature is of sorts
-     * {@link ApplicationFeatureSort#MEMBER member} and 
+     * {@link ApplicationFeatureSort#MEMBER member} and
      * {@link ApplicationMemberSort#ACTION action}.
      */
     Optional<Class<?>> getActionReturnType();
-    
+
     /**
      * Returns optionally the action's semantics, based on
      * whether this feature is of sorts
-     * {@link ApplicationFeatureSort#MEMBER member} and 
+     * {@link ApplicationFeatureSort#MEMBER member} and
      * {@link ApplicationMemberSort#ACTION action}.
      */
     Optional<SemanticsOf> getActionSemantics();
 
-    /** 
-     * Returns whether the property or collection feature is derived.  
-     * @return always {@code false} when not a property or collection 
+    /**
+     * Returns whether the property or collection feature is derived.
+     * @return always {@code false} when not a property or collection
      */
     boolean isPropertyOrCollectionDerived();
 
     /**
      * Returns optionally the property's semantics, based on
      * whether this feature is of sorts
-     * {@link ApplicationFeatureSort#MEMBER member} and 
+     * {@link ApplicationFeatureSort#MEMBER member} and
      * {@link ApplicationMemberSort#PROPERTY property}.
      */
     OptionalInt getPropertyTypicalLength();
@@ -89,11 +92,11 @@ public interface ApplicationFeature {
     /**
      * Returns optionally the property's max-length constraint, based on
      * whether this feature is of sorts
-     * {@link ApplicationFeatureSort#MEMBER member} and 
+     * {@link ApplicationFeatureSort#MEMBER member} and
      * {@link ApplicationMemberSort#PROPERTY property}.
      */
     OptionalInt getPropertyMaxLength();
-    
+
     SortedSet<ApplicationFeatureId> getContents();
 
     SortedSet<ApplicationFeatureId> getProperties();
@@ -101,5 +104,5 @@ public interface ApplicationFeature {
     SortedSet<ApplicationFeatureId> getCollections();
 
     SortedSet<ApplicationFeatureId> getActions();
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
index c1cb650..2f297f2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
@@ -18,25 +18,29 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
+
 /**
- * 
+ *
  * @since 1.x revised for 2.0 {@index}
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureSort")
 public enum ApplicationFeatureSort {
-    
-    /** 
+
+    /**
      * logical namespace
      */
     NAMESPACE,
-    
-    /** 
-     * {@code namespace + "." + typeSimpleName} 
+
+    /**
+     * {@code namespace + "." + typeSimpleName}
      * makes up the fully qualified logical type
      */
     TYPE,
-    
-    /** 
-     * {@code namespace + "." + typeSimpleName + "." + memberName} 
+
+    /**
+     * {@code namespace + "." + typeSimpleName + "." + memberName}
      * makes up the fully qualified logical member
      */
     MEMBER;
@@ -44,11 +48,11 @@ public enum ApplicationFeatureSort {
     public boolean isNamespace() {
         return this == ApplicationFeatureSort.NAMESPACE;
     }
-    
+
     public boolean isType() {
         return this == ApplicationFeatureSort.TYPE;
     }
-    
+
     public boolean isMember() {
         return this == ApplicationFeatureSort.MEMBER;
     }
@@ -57,6 +61,6 @@ public enum ApplicationFeatureSort {
     public String toString() {
         return name();
     }
-    
+
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index 0e25800..c0a1e6c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -24,6 +24,8 @@ import java.util.StringTokenizer;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.codec._UrlDecoderUtil;
@@ -37,10 +39,11 @@ import lombok.val;
 
 /**
  * String representation of any persistable or re-creatable object managed by the framework.
- * 
+ *
  * @since 1.x revised for 2.0 {@index}
  */
 @org.apache.isis.applib.annotation.Value
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".Bookmark")
 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
 public final class Bookmark implements Oid {
 
@@ -50,40 +53,40 @@ public final class Bookmark implements Oid {
     @Getter(onMethod_ = {@Override}) private final String identifier;
     @Getter private final @Nullable String hintId;
     private final int hashCode;
-    
+
     // -- FACTORIES
 
     public static Bookmark forLogicalTypeNameAndIdentifier(
             final @NonNull String logicalTypeName,
             final @NonNull String identifier) {
         return new Bookmark(
-                logicalTypeName, 
-                identifier, 
+                logicalTypeName,
+                identifier,
                 /*hintId*/null);
     }
-    
+
     public static Bookmark forLogicalTypeAndIdentifier(
-            final @NonNull LogicalType logicalType, 
+            final @NonNull LogicalType logicalType,
             final @NonNull String identifier) {
         return Bookmark.forLogicalTypeNameAndIdentifier(
-                logicalType.getLogicalTypeName(), 
+                logicalType.getLogicalTypeName(),
                 identifier);
     }
-    
+
     public static Bookmark forOidDto(final @NonNull OidDto oidDto) {
         return Bookmark.forLogicalTypeNameAndIdentifier(
-                oidDto.getType(), 
+                oidDto.getType(),
                 oidDto.getId());
     }
 
     public Bookmark withHintId(final @Nullable String hintId) {
-        return new Bookmark(this.getLogicalTypeName(), this.getIdentifier(), hintId); 
+        return new Bookmark(this.getLogicalTypeName(), this.getIdentifier(), hintId);
     }
-    
+
     // -- CONSTRUCTOR
-    
+
     private Bookmark(
-            final String logicalTypeName, 
+            final String logicalTypeName,
             final String identifier,
             final String hintId) {
 
@@ -92,9 +95,9 @@ public final class Bookmark implements Oid {
         this.hintId = hintId;
         this.hashCode = Objects.hash(logicalTypeName, identifier);
     }
-    
+
     // -- PARSE
-    
+
     /**
      * Round-trip with {@link #stringify()} representation.
      */
@@ -107,23 +110,23 @@ public final class Bookmark implements Oid {
         int tokenCount = tokenizer.countTokens();
         if(tokenCount==2) {
             return Optional.of(Bookmark.forLogicalTypeNameAndIdentifier(
-                    tokenizer.nextToken(), 
+                    tokenizer.nextToken(),
                     tokenizer.nextToken()));
         }
         if(tokenCount>2) {
             return Optional.of(Bookmark.forLogicalTypeNameAndIdentifier(
-                    tokenizer.nextToken(), 
+                    tokenizer.nextToken(),
                     tokenizer.nextToken("").substring(1)));
         }
         return Optional.empty();
     }
-    
+
     public static Optional<Bookmark> parseUrlEncoded(@Nullable String urlEncodedStr) {
         return _Strings.isEmpty(urlEncodedStr)
                 ? Optional.empty()
                 : parse(_UrlDecoderUtil.urlDecode(urlEncodedStr));
     }
-    
+
     // -- TO DTO
 
     public OidDto toOidDto() {
@@ -134,14 +137,14 @@ public final class Bookmark implements Oid {
     }
 
     // -- STRINGIFY
-    
+
     @Override
     public String stringify() {
         return stringify(identifier);
     }
-    
+
     // -- OBJECT CONTRACT // not considering any hintId
-    
+
     @Override
     public boolean equals(final Object other) {
         if (other == null) {
@@ -157,7 +160,7 @@ public final class Bookmark implements Oid {
     }
 
     public boolean equals(final Bookmark other) {
-        return Objects.equals(logicalTypeName, other.getLogicalTypeName()) 
+        return Objects.equals(logicalTypeName, other.getLogicalTypeName())
                 && Objects.equals(identifier, other.getIdentifier());
     }
 
@@ -165,15 +168,15 @@ public final class Bookmark implements Oid {
     public int hashCode() {
         return hashCode;
     }
-    
+
     @Override
     public String toString() {
         return stringify();
     }
-    
+
     /**
-     * Analogous to {@link #stringify()}, but replaces the {@code identifier} string with 
-     * the {@code hintId} if present and not empty. 
+     * Analogous to {@link #stringify()}, but replaces the {@code identifier} string with
+     * the {@code hintId} if present and not empty.
      */
     public String stringifyHonoringHintIfAny() {
         return _Strings.isNotEmpty(hintId)
@@ -182,11 +185,11 @@ public final class Bookmark implements Oid {
     }
 
     // -- HELPER
-    
+
     private String stringify(String id) {
         return logicalTypeName + SEPARATOR + id;
     }
 
-    
+
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
index be454b4..9f6a0ff 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -37,6 +38,7 @@ import lombok.RequiredArgsConstructor;
 @ActionLayout(
         cssClassFa = "fa-bookmark"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.bookmark.BookmarkHolder_lookup")
 @RequiredArgsConstructor
 public class BookmarkHolder_lookup {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
index 901ee3f..b0c26ee 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
@@ -21,6 +21,7 @@ package org.apache.isis.applib.services.bookmark;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Property;
 
 import lombok.RequiredArgsConstructor;
@@ -32,6 +33,7 @@ import lombok.RequiredArgsConstructor;
         domainEvent = BookmarkHolder_object.PropertyDomainEvent.class
 )
 @RequiredArgsConstructor
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.bookmark.BookmarkHolder_object")
 public class BookmarkHolder_object {
 
     private final BookmarkHolder bookmarkHolder;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
index 133edb8..ab7790a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.jaxb;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.mixins.dto.Dto_downloadXsd;
 
 /**
@@ -33,6 +35,7 @@ import org.apache.isis.applib.mixins.dto.Dto_downloadXsd;
  * <a href="http://isis.apache.org/schema">downloaded</a> from the Isis website.
  * </p>
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.jaxb.IsisSchemas")
 public enum IsisSchemas {
     INCLUDE,
     IGNORE;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
index ceed07f..617eb06 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.layout;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.layout.grid.Grid;
 
 /**
@@ -28,13 +30,14 @@ import org.apache.isis.applib.layout.grid.Grid;
  * content is assembled. Once a layout file is in place, its layout data takes precedence over any
  * conflicting layout data from annotations.
  * </p>
- * 
+ *
  * TODO update for v2 - @MemberGroupLayout and @MemberOrder have been removed
  *
  * @since 1.x {@index}
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.layout.Style")
 public enum Style {
-    
+
     /**
      * The current layout for the domain class.
      * <p>
@@ -45,7 +48,7 @@ public enum Style {
      * also {@link org.apache.isis.applib.services.grid.GridService#normalize(Grid) normalized}.
      */
     CURRENT,
-    
+
     /**
      * As per {@link #NORMALIZED}, but also with all (non-null) facets for all
      * properties/collections/actions also included included in the grid.
@@ -58,7 +61,7 @@ public enum Style {
      * </ul>
      */
     COMPLETE,
-    
+
     /**
      * Default, whereby missing properties/collections/actions are added to regions,
      * and unused/empty regions are removed/trimmed.
@@ -72,7 +75,7 @@ public enum Style {
      * </ul>
      */
     NORMALIZED,
-    
+
     /**
      * As per {@link #NORMALIZED}, but with no properties/collections/actions.
      * <p>
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
index 9e6d190..5e9a03c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.menu;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.layout.menubars.MenuBars;
 
 /**
@@ -34,6 +36,7 @@ import org.apache.isis.applib.layout.menubars.MenuBars;
  */
 public interface MenuBarsService {
 
+    @DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.menu.MenuBarsService.Type")
     enum Type {
 
         /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
index 95e3663..4df56f2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
@@ -18,11 +18,15 @@
  */
 package org.apache.isis.applib.services.swagger;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
+
 /**
  * The format to generate the representation of the swagger spec.
  *
  * @since 1.x {@index}
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.swagger.Format")
 public enum Format {
     /**
      * Generate a format in JSON (<code>text/json</code> media type).
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
index df1c886..8df93dd 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.services.swagger;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainService;
@@ -30,6 +31,7 @@ import org.apache.isis.applib.annotation.RestrictTo;
  *
  * @since 1.x {@index}
  */
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.swagger.Visibility")
 public enum Visibility {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index af77879..a4b0fc1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -31,6 +31,8 @@ import javax.activation.MimeTypeParseException;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.jaxb.PrimitiveJaxbAdapters;
 import org.apache.isis.commons.internal.base._Strings;
@@ -63,6 +65,7 @@ import lombok.extern.log4j.Log4j2;
  */
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.blobs.BlobValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Blob")
 @XmlJavaTypeAdapter(Blob.JaxbToStringAdapter.class)   // for JAXB view model support
 @Log4j2
 public final class Blob implements NamedWithMimeType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
index 1e608a0..37d3e2a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
@@ -29,6 +29,8 @@ import javax.activation.MimeTypeParseException;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.jaxb.PrimitiveJaxbAdapters;
 import org.apache.isis.commons.internal.base._Strings;
@@ -60,6 +62,7 @@ import lombok.extern.log4j.Log4j2;
  */
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.clobs.ClobValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Clob")
 @XmlJavaTypeAdapter(Clob.JaxbToStringAdapter.class)   // for JAXB view model support
 @Log4j2
 public final class Clob implements NamedWithMimeType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java b/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
index 4f4e519..8bb81c4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
@@ -27,6 +27,8 @@ import javax.annotation.Nullable;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 
 import lombok.Getter;
@@ -51,6 +53,7 @@ import lombok.NonNull;
  */
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.localrespath.LocalResourcePathValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.LocalResourcePath")
 @XmlJavaTypeAdapter(LocalResourcePath.JaxbToStringAdapter.class)   // for JAXB view model support
 public final class LocalResourcePath implements Serializable {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java b/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
index 3e979f5..e0f059b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
@@ -26,6 +26,8 @@ import java.util.Base64;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.base._Strings;
 
@@ -37,6 +39,7 @@ import org.apache.isis.commons.internal.base._Strings;
  */
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.markup.MarkupValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Markup")
 @XmlJavaTypeAdapter(Markup.JaxbToStringAdapter.class)   // for JAXB view model support
 public final class Markup implements HasHtml, Serializable {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
index 55f84de..58ed106 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
@@ -25,6 +25,8 @@ import java.util.Objects;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 
 /**
@@ -34,6 +36,7 @@ import org.apache.isis.applib.annotation.Value;
  */
 @Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.password.PasswordValueSemanticsProvider")
 @XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Password")
 // @XmlJavaTypeAdapter(Password.JaxbToStringAdapter.class) // TODO: not automatically registered because not secure enough.  Instead we should set up some sort of mechanism to encrypt.
 @lombok.Value
 public class Password implements Serializable {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
index e8bf35f..76c69e5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
@@ -23,8 +23,10 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -56,6 +58,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "700.2.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + "mixins.metamodel.Object_inspectMetamodel")
 @RequiredArgsConstructor
 public class Object_inspectMetamodel {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index bf8d2f8..dd7e05b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
@@ -23,6 +23,8 @@ import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.SortedSet;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
@@ -50,6 +52,7 @@ import lombok.Setter;
  * </p>
  */
 @Value
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + "services.appfeat.ApplicationFeature")
 public class ApplicationFeatureDefault
 implements
 ApplicationFeature,
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
index c5598e9..84e325b 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
@@ -22,6 +22,8 @@ import java.io.Serializable;
 
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.HasHtml;
 import org.apache.isis.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
@@ -31,6 +33,7 @@ import org.apache.isis.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
  * @since 2.0 {@index}
  */
 @org.apache.isis.applib.annotation.Value(semanticsProviderName = "org.apache.isis.valuetypes.asciidoc.metamodel.facets.AsciiDocValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.AsciiDoc")
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
 public class AsciiDoc implements HasHtml, Serializable {
 
diff --git a/valuetypes/markdown/applib/src/main/java/org/apache/isis/valuetypes/markdown/applib/value/Markdown.java b/valuetypes/markdown/applib/src/main/java/org/apache/isis/valuetypes/markdown/applib/value/Markdown.java
index dd4aa6a..c7979ba 100644
--- a/valuetypes/markdown/applib/src/main/java/org/apache/isis/valuetypes/markdown/applib/value/Markdown.java
+++ b/valuetypes/markdown/applib/src/main/java/org/apache/isis/valuetypes/markdown/applib/value/Markdown.java
@@ -22,6 +22,8 @@ import java.io.Serializable;
 
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.HasHtml;
 import org.apache.isis.valuetypes.markdown.applib.jaxb.MarkdownJaxbAdapter;
 
@@ -31,6 +33,7 @@ import org.apache.isis.valuetypes.markdown.applib.jaxb.MarkdownJaxbAdapter;
  */
 @org.apache.isis.applib.annotation.Value(
         semanticsProviderName = "org.apache.isis.valuetypes.markdown.metamodel.facets.MarkdownValueSemanticsProvider")
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Markdown")
 @XmlJavaTypeAdapter(MarkdownJaxbAdapter.class)  // for JAXB view model support
 public class Markdown implements HasHtml, Serializable {
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
index 6b5603d..32aaefd 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonate.java
@@ -20,8 +20,10 @@ package org.apache.isis.viewer.common.applib.mixins;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.Redirect;
@@ -53,6 +55,7 @@ import lombok.RequiredArgsConstructor;
         redirectPolicy = Redirect.EVEN_IF_SAME,
         sequence = "850.1"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE_SUDO + ".mixins.Object_impersonate")
 @RequiredArgsConstructor
 public class Object_impersonate {
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
index 8c14c09..5a37cec 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
@@ -22,8 +22,10 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.Redirect;
@@ -56,6 +58,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "850.2"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE_SUDO + ".mixins.Object_impersonateWithRoles")
 @RequiredArgsConstructor
 public class Object_impersonateWithRoles {
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
index b231506..090dd42 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
@@ -20,8 +20,10 @@ package org.apache.isis.viewer.common.applib.mixins;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.Redirect;
@@ -51,6 +53,7 @@ import lombok.RequiredArgsConstructor;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "850.3"
 )
+@DomainObject(logicalTypeName = IsisModuleApplib.NAMESPACE_SUDO + ".mixins.Object_stopImpersonating")
 @RequiredArgsConstructor
 public class Object_stopImpersonating {
 
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisModuleViewerWicketViewer.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisModuleViewerWicketViewer.java
index a64c233..9997e8f 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisModuleViewerWicketViewer.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisModuleViewerWicketViewer.java
@@ -69,4 +69,5 @@ import org.apache.isis.viewer.wicket.viewer.webmodule.WebModuleWicket;
 })
 public class IsisModuleViewerWicketViewer {
 
+    public static final String NAMESPACE = "isis.viewer.wicket";
 }
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/mixins/Object_clearHints.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/mixins/Object_clearHints.java
index 7310fb3..9a24e82 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/mixins/Object_clearHints.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/mixins/Object_clearHints.java
@@ -20,13 +20,16 @@ package org.apache.isis.viewer.wicket.viewer.mixins;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.mixins.layout.LayoutMixinConstants;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.hint.HintStore;
+import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
 import org.apache.isis.viewer.wicket.viewer.services.HintStoreUsingWicketSession;
 
 import lombok.RequiredArgsConstructor;
@@ -71,6 +74,7 @@ import lombok.val;
         associateWith = LayoutMixinConstants.METADATA_LAYOUT_GROUPNAME,
         sequence = "400.1"
 )
+@DomainObject(logicalTypeName = IsisModuleViewerWicketViewer.NAMESPACE + ".mixins.Object_clearHints")
 @RequiredArgsConstructor
 public class Object_clearHints {