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 0472ad1  ISIS-2681: remodel the ObjectTypeFacet to hold a LogicalType 
instance instead of just a string
0472ad1 is described below

commit 0472ad1cff06642d58f3f0ffc9f40067cf9528f6
Author: [email protected] <[email protected]@luna>
AuthorDate: Mon May 17 10:40:22 2021 +0200

    ISIS-2681: remodel the ObjectTypeFacet to hold a LogicalType instance
    instead of just a string
    
    also improve MetaModelService (Applib)
---
 .../services/metamodel/MetaModelService.java       | 19 +++++++-----
 .../DomainObjectAnnotationFacetFactory.java        |  3 +-
 .../ObjectTypeFacetForDomainObjectAnnotation.java  | 11 +++++--
 .../object/objectspecid/ObjectTypeFacet.java       |  7 ++++-
 .../objectspecid/ObjectTypeFacetAbstract.java      | 24 ++++++++-------
 .../ObjectTypeFacetDerivedFromClassName.java       |  7 +++--
 ...ObjectTypeFacetDerivedFromClassNameFactory.java |  5 ++-
 ...bjectTypeFacetDerivedFromIoCNamingStrategy.java |  5 +--
 .../classname/ObjectTypeFacetOnStandaloneList.java |  5 +--
 .../metamodel/MetaModelServiceDefault.java         | 36 ++++++++++------------
 .../specimpl/ObjectSpecificationAbstract.java      |  2 +-
 .../testspec/ObjectSpecificationStub.java          |  3 +-
 .../runtimeservices/jaxb/JaxbServiceDefault.java   |  5 ++-
 .../security/authentication/logout/LogoutMenu.java |  3 +-
 .../TableColumnVisibilityServiceForSecman.java     | 16 +++++++---
 .../JdoDiscriminatorAnnotationFacetFactory.java    |  6 ++--
 ...nferredFromJdoDiscriminatorValueAnnotation.java |  5 +--
 ...ypeFacetForJdoPersistenceCapableAnnotation.java | 11 +++++--
 ...doPersistenceCapableAnnotationFacetFactory.java |  3 +-
 .../ObjectTypeFacetForTableAnnotation.java         |  8 +++--
 .../table/JpaTableAnnotationFacetFactory.java      |  2 +-
 21 files changed, 113 insertions(+), 73 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
 
b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 9c49f7b..1e0fae5 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -18,9 +18,14 @@
  */
 package org.apache.isis.applib.services.metamodel;
 
+import java.util.Optional;
+
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import 
org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.schema.metamodel.v2.MetamodelDto;
@@ -36,18 +41,18 @@ import org.apache.isis.schema.metamodel.v2.MetamodelDto;
 public interface MetaModelService {
 
     /**
-     * Provides a reverse lookup of a domain class' object type, as defined by
+     * Provides a lookup by objectType of a domain class' object type, as 
defined by
      * {@link DomainObject#objectType()} (or any other mechanism that 
corresponds to Isis'
-     * <code>ObjectSpecIdFacet</code>).
+     * <code>ObjectTypeFacet</code>).
      */
-    Class<?> fromObjectType(final String objectType);
+    Optional<LogicalType> lookupLogicalTypeByName(final String objectType);
 
     /**
-     * Provides a lookup of a domain class' object type, as defined by
+     * Provides a lookup by class of a domain class' object type, as defined by
      * {@link DomainObject#objectType()} (or any other mechanism that 
corresponds to Isis'
-     * <code>ObjectSpecIdFacet</code>).
+     * <code>ObjectTypeFacet</code>).
      */
-    String toObjectType(final Class<?> domainType);
+    Optional<LogicalType> lookupLogicalTypeByClass(final Class<?> domainType);
 
     /**
      * Invalidates and rebuilds the internal metadata for the specified domain
@@ -76,7 +81,7 @@ public interface MetaModelService {
      * @param domainType
      * @param mode
      */
-    BeanSort sortOf(Class<?> domainType, Mode mode);
+    BeanSort sortOf(@Nullable Class<?> domainType, Mode mode);
 
     /**
      * Override of {@link #sortOf(Class, Mode)}, extracting the domain type
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 9799643..054bf58 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -258,11 +258,12 @@ implements
 
     void processObjectType(final ProcessObjectTypeContext processClassContext) 
{
 
+        val cls = processClassContext.getCls();
         val facetHolder = processClassContext.getFacetHolder();
 
         // check from @DomainObject(objectType=...)
         val domainObjectIfAny = 
processClassContext.synthesizeOnType(DomainObject.class);
-        val facet = 
ObjectTypeFacetForDomainObjectAnnotation.create(domainObjectIfAny, facetHolder);
+        val facet = 
ObjectTypeFacetForDomainObjectAnnotation.create(domainObjectIfAny, cls, 
facetHolder);
 
         // then add
         super.addFacet(facet);
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForDomainObjectAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForDomainObjectAnnotation.java
index cc05554..3124d33 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForDomainObjectAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForDomainObjectAnnotation.java
@@ -22,6 +22,7 @@ package 
org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid;
 import java.util.Optional;
 
 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.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacet;
@@ -31,17 +32,21 @@ public class ObjectTypeFacetForDomainObjectAnnotation 
extends ObjectTypeFacetAbs
 
     public static ObjectTypeFacet create(
             final Optional<DomainObject> domainObjectIfAny,
+            final Class<?> correspondingClass,
             final FacetHolder holder) {
 
         return domainObjectIfAny
                 .map(DomainObject::objectType)
                 .filter(_Strings::isNotEmpty)
-                .map(objectType -> new 
ObjectTypeFacetForDomainObjectAnnotation(objectType, holder))
+                .map(objectType -> new 
ObjectTypeFacetForDomainObjectAnnotation(
+                        LogicalType.eager(correspondingClass, objectType),
+                        holder))
                 .orElse(null);
     }
 
-    private ObjectTypeFacetForDomainObjectAnnotation(final String value,
+    private ObjectTypeFacetForDomainObjectAnnotation(
+            final LogicalType logicalType,
             final FacetHolder holder) {
-        super(value, holder);
+        super(logicalType, holder);
     }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacet.java
index d63600d..0ef95d3 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacet.java
@@ -20,6 +20,7 @@ package 
org.apache.isis.core.metamodel.facets.object.objectspecid;
 
 
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 
 
@@ -32,6 +33,10 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  */
 public interface ObjectTypeFacet extends Facet {
 
-    String value();
+    LogicalType getLogicalType();
+
+    default String value() {
+        return getLogicalType().getLogicalTypeName();
+    }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacetAbstract.java
index c99c3d8..b3f97fe 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeFacetAbstract.java
@@ -21,10 +21,14 @@ package 
org.apache.isis.core.metamodel.facets.object.objectspecid;
 
 import java.util.Map;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
+import lombok.Getter;
+import lombok.NonNull;
+
 public abstract class ObjectTypeFacetAbstract
 extends FacetAbstract
 implements ObjectTypeFacet {
@@ -33,28 +37,26 @@ implements ObjectTypeFacet {
         return ObjectTypeFacet.class;
     }
 
-    private final String value;
+    @Getter(onMethod_ = {@Override})
+    private final @NonNull LogicalType logicalType;
 
-    public ObjectTypeFacetAbstract(final String value, final FacetHolder 
holder) {
-        this(value, holder, Derivation.NOT_DERIVED);
+    public ObjectTypeFacetAbstract(
+            final LogicalType logicalType,
+            final FacetHolder holder) {
+        this(logicalType, holder, Derivation.NOT_DERIVED);
     }
 
     protected ObjectTypeFacetAbstract(
-            final String value,
+            final LogicalType logicalType,
             final FacetHolder holder,
             final Derivation derivation) {
         super(ObjectTypeFacetAbstract.type(), holder, derivation);
-        this.value = value;
-    }
-
-    @Override
-    public String value() {
-        return value;
+        this.logicalType = logicalType;
     }
 
     @Override
     public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
-        attributeMap.put("value", value);
+        attributeMap.put("logicalType", logicalType.getLogicalTypeName());
     }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassName.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassName.java
index 3914f4c..b2d1aa7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassName.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassName.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.object.objectspecid.classname;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.commons.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacetAbstract;
@@ -27,11 +28,11 @@ public class ObjectTypeFacetDerivedFromClassName
 extends ObjectTypeFacetAbstract {
 
     public ObjectTypeFacetDerivedFromClassName(final Class<?> cls, final 
FacetHolder holder) {
-        this(ClassUtil.getCanonicalName_friendlyToInnerClasses(cls), holder);
+        this(LogicalType.eager(cls, 
ClassUtil.getCanonicalName_friendlyToInnerClasses(cls)), holder);
     }
 
-    public ObjectTypeFacetDerivedFromClassName(final String value, final 
FacetHolder holder) {
-        super(value, holder, Derivation.DERIVED);
+    public ObjectTypeFacetDerivedFromClassName(final LogicalType logicalType, 
final FacetHolder holder) {
+        super(logicalType, holder, Derivation.DERIVED);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassNameFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassNameFactory.java
index 0a1c0f8..9a67e65 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassNameFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromClassNameFactory.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import javax.inject.Inject;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -88,7 +89,9 @@ implements MetaModelRefiner, ObjectTypeFacetFactory {
         val isService = serviceId!=null;
 
         if (isService) {
-            return new ObjectTypeFacetDerivedFromIoCNamingStrategy(serviceId, 
facetHolder);
+            return new ObjectTypeFacetDerivedFromIoCNamingStrategy(
+                    LogicalType.eager(substitutedClass, serviceId),
+                    facetHolder);
         }
         return new ObjectTypeFacetDerivedFromClassName(substitutedClass, 
facetHolder);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromIoCNamingStrategy.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromIoCNamingStrategy.java
index a555c1e..9763be0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromIoCNamingStrategy.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetDerivedFromIoCNamingStrategy.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.object.objectspecid.classname;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacetAbstract;
 
@@ -27,8 +28,8 @@ import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacet
  */
 public class ObjectTypeFacetDerivedFromIoCNamingStrategy extends 
ObjectTypeFacetAbstract {
 
-    ObjectTypeFacetDerivedFromIoCNamingStrategy(final String value, final 
FacetHolder holder) {
-        super(value, holder);
+    ObjectTypeFacetDerivedFromIoCNamingStrategy(final LogicalType logicalType, 
final FacetHolder holder) {
+        super(logicalType, holder);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetOnStandaloneList.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetOnStandaloneList.java
index 3ca3c7c..bf5908f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetOnStandaloneList.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectTypeFacetOnStandaloneList.java
@@ -19,12 +19,13 @@
 
 package org.apache.isis.core.metamodel.facets.object.objectspecid.classname;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacetAbstract;
 
 public class ObjectTypeFacetOnStandaloneList extends ObjectTypeFacetAbstract {
 
-    public ObjectTypeFacetOnStandaloneList(final String value, final 
FacetHolder holder) {
-        super(value, holder, Derivation.NOT_DERIVED);
+    public ObjectTypeFacetOnStandaloneList(final LogicalType logicalType, 
final FacetHolder holder) {
+        super(logicalType, holder, Derivation.NOT_DERIVED);
     }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 6f7f59c..82ef79d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.services.metamodel;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 import javax.annotation.Nullable;
 import javax.inject.Inject;
@@ -31,6 +32,7 @@ import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -43,8 +45,8 @@ import org.apache.isis.applib.services.metamodel.DomainModel;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import 
org.apache.isis.core.metamodel.facets.members.publish.command.CommandPublishingFacet;
-import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -66,24 +68,16 @@ public class MetaModelServiceDefault implements 
MetaModelService {
     @Inject private SpecificationLoader specificationLoader;
     @Inject private GridService gridService;
 
-    @Nullable
     @Override
-    public Class<?> fromObjectType(final @Nullable String objectType) {
+    public Optional<LogicalType> lookupLogicalTypeByName(final @Nullable 
String objectType) {
         return specificationLoader.specForLogicalTypeName(objectType)
-                .map(ObjectSpecification::getCorrespondingClass)
-                .orElse(null);
+                .map(ObjectSpecification::getLogicalType);
     }
 
     @Override
-    public String toObjectType(final @Nullable Class<?> domainType) {
-        if(domainType == null) {
-            return null;
-        }
-
+    public Optional<LogicalType> lookupLogicalTypeByClass(final @Nullable 
Class<?> domainType) {
         return specificationLoader.specForType(domainType)
-        .flatMap(spec->spec.lookupFacet(ObjectTypeFacet.class))
-        .map(ObjectTypeFacet::value)
-        .orElse(null);
+                .map(ObjectSpecification::getLogicalType);
     }
 
     @Override
@@ -153,7 +147,7 @@ public class MetaModelServiceDefault implements 
MetaModelService {
 
     @Override
     public BeanSort sortOf(
-            final Class<?> domainType, final Mode mode) {
+            final @Nullable Class<?> domainType, final Mode mode) {
         if(domainType == null) {
             return null;
         }
@@ -185,17 +179,19 @@ public class MetaModelServiceDefault implements 
MetaModelService {
         final Class<?> domainType;
         switch (mode) {
         case RELAXED:
-            try {
-                domainType = this.fromObjectType(bookmark.getObjectType());
-            } catch (Exception e) {
-                return BeanSort.UNKNOWN;
-            }
+            domainType = specificationLoader.specForBookmark(bookmark)
+                .map(ObjectSpecification::getCorrespondingClass)
+                .orElse(null);
             break;
 
         case STRICT:
             // fall through to...
         default:
-            domainType = this.fromObjectType(bookmark.getObjectType());
+            domainType = specificationLoader.specForBookmark(bookmark)
+                .map(ObjectSpecification::getCorrespondingClass)
+                .orElseThrow(()->_Exceptions
+                        .noSuchElement("Cannot resolve logical type name %s to 
a java class",
+                                bookmark.getObjectType()));
             break;
         }
         return sortOf(domainType, mode);
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 338d761..e0be801 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -226,7 +226,7 @@ implements ObjectSpecification {
         if(objectTypeFacet == null) {
             throw new IllegalStateException("could not find an ObjectTypeFacet 
for " + this.getFullIdentifier());
         }
-        return LogicalType.eager(correspondingClass, objectTypeFacet.value());
+        return objectTypeFacet.getLogicalType();
     }
 
     /**
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 06897ff..ad77e16 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -132,8 +132,7 @@ implements ObjectSpecification {
     @Override
     public LogicalType getLogicalType() {
         if(logicalType == null) {
-            val logicalTypeName = getFacet(ObjectTypeFacet.class).value();
-            logicalType = LogicalType.eager(correspondingClass, 
logicalTypeName);
+            logicalType = getFacet(ObjectTypeFacet.class).getLogicalType();
         }
         return logicalType;
     }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
index c385cee..5837e6d 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
@@ -36,6 +36,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
 import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
 import org.apache.isis.applib.services.inject.ServiceInjector;
@@ -67,7 +68,9 @@ public class JaxbServiceDefault extends Simple {
             val domainObjectList = (DomainObjectList) domainObject;
             try {
                 val elementType = metaModelServiceProvider.get()
-                        
.fromObjectType(domainObjectList.getElementObjectType());
+                        
.lookupLogicalTypeByName(domainObjectList.getElementObjectType())
+                        .map(LogicalType::getCorrespondingClass)
+                        .orElse(null);
                 if (elementType!=null
                         && elementType.getAnnotation(XmlJavaTypeAdapter.class) 
== null) {
 
diff --git 
a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
 
b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
index c22e8e8..d60ab74 100644
--- 
a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
+++ 
b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
@@ -35,7 +35,6 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.applib.value.OpenUrlStrategy;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.security.IsisModuleCoreSecurity;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.AuthenticationContext;
@@ -53,7 +52,7 @@ public class LogoutMenu {
 
     private final List<LogoutHandler> logoutHandler;
     private final AuthenticationContext authenticationTracker;
-    private final IsisConfiguration configuration;
+    //private final IsisConfiguration configuration;
 
     public static class LogoutDomainEvent
         extends IsisModuleApplib.ActionDomainEvent<LogoutMenu> {}
diff --git 
a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/spiimpl/TableColumnVisibilityServiceForSecman.java
 
b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/spiimpl/TableColumnVisibilityServiceForSecman.java
index 1970c60..3b0597e 100644
--- 
a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/spiimpl/TableColumnVisibilityServiceForSecman.java
+++ 
b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/spiimpl/TableColumnVisibilityServiceForSecman.java
@@ -8,6 +8,7 @@ import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
 import org.apache.isis.applib.services.tablecol.TableColumnVisibilityService;
@@ -28,13 +29,20 @@ public class TableColumnVisibilityServiceForSecman 
implements TableColumnVisibil
     final MetaModelService metaModelService;
 
     @Override
-    public boolean hides(Class<?> collectionType, String memberId) {
+    public boolean hides(Class<?> elementType, String memberId) {
         val me = meService.me();
         val permissionSet = me.getPermissionSet();
-        val objectType = metaModelService.toObjectType(collectionType);
-        val featureId = ApplicationFeatureId.newMember(objectType, memberId);
-        val granted = permissionSet.evaluate(featureId, 
ApplicationPermissionMode.VIEWING).isGranted();
+
+        final boolean granted = 
metaModelService.lookupLogicalTypeByClass(elementType)
+            .map(LogicalType::getLogicalTypeName)
+            .map(objectType->{
+                val featureId = ApplicationFeatureId.newMember(objectType, 
memberId);
+                return permissionSet.evaluate(featureId, 
ApplicationPermissionMode.VIEWING).isGranted();
+            })
+            .orElse(false); // do not grant if elementType has no objectType
+
         return !granted;
+
     }
 
 }
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
index 19cf324..cf46311 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
@@ -22,6 +22,7 @@ package 
org.apache.isis.persistence.jdo.metamodel.facets.object.discriminator;
 import javax.inject.Inject;
 import javax.jdo.annotations.Discriminator;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -67,7 +68,8 @@ implements ObjectTypeFacetFactory {
         final ObjectTypeFacet facet;
         if (!_Strings.isNullOrEmpty(annotationValue)) {
             facet = new 
ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation(
-                    annotationValue, facetHolder);
+                        LogicalType.eager(cls, annotationValue),
+                        facetHolder);
         } else {
             val substitute = classSubstitutorRegistry.getSubstitution(cls);
             if(substitute.isNeverIntrospect()) {
@@ -76,7 +78,7 @@ implements ObjectTypeFacetFactory {
 
             val substituted = substitute.apply(cls);
             facet = new ObjectTypeFacetDerivedFromClassName(
-                            substituted.getCanonicalName(),
+                            LogicalType.eager(substituted, 
substituted.getCanonicalName()),
                             facetHolder);
 
         }
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation.java
index 158701a..4fe4c38 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/discriminator/ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.persistence.jdo.metamodel.facets.object.discriminator;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacetAbstract;
 
@@ -25,9 +26,9 @@ public class 
ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation
 extends ObjectTypeFacetAbstract {
 
     public ObjectTypeFacetInferredFromJdoDiscriminatorValueAnnotation(
-            final String value,
+            final LogicalType logicalType,
             final FacetHolder holder) {
-        super(value, holder);
+        super(logicalType, holder);
     }
 
 }
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForJdoPersistenceCapableAnnotation.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForJdoPersistenceCapableAnnotation.java
index 3e6d0ca..043fc48 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForJdoPersistenceCapableAnnotation.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/domainobject/objectspecid/ObjectTypeFacetForJdoPersistenceCapableAnnotation.java
@@ -21,6 +21,7 @@ package 
org.apache.isis.persistence.jdo.metamodel.facets.object.domainobject.obj
 
 import java.util.Locale;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacet;
@@ -32,6 +33,7 @@ extends ObjectTypeFacetAbstract {
 
     public static ObjectTypeFacet create(
             final JdoPersistenceCapableFacet persistenceCapableFacet,
+            final Class<?> correspondingClass,
             final FacetHolder holder) {
 
         if(persistenceCapableFacet.isFallback()) {
@@ -42,11 +44,14 @@ extends ObjectTypeFacetAbstract {
             return null;
         }
         final String objectType = schema.toLowerCase(Locale.ROOT) + "." + 
persistenceCapableFacet.getTable();
-        return new 
ObjectTypeFacetForJdoPersistenceCapableAnnotation(objectType, holder);
+        return new ObjectTypeFacetForJdoPersistenceCapableAnnotation(
+                LogicalType.eager(correspondingClass, objectType),
+                holder);
     }
 
-    private ObjectTypeFacetForJdoPersistenceCapableAnnotation(final String 
value,
+    private ObjectTypeFacetForJdoPersistenceCapableAnnotation(
+            final LogicalType logicalType,
             final FacetHolder holder) {
-        super(value, holder);
+        super(logicalType, holder);
     }
 }
diff --git 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 1022ce4..710db8b 100644
--- 
a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ 
b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -89,7 +89,8 @@ implements ObjectTypeFacetFactory {
                     annotationSchemaAttribute,
                     annotationTableAttribute, annotationIdentityType, 
facetHolder);
             FacetUtil.addFacet(jdoPersistenceCapableFacet);
-            
FacetUtil.addFacet(ObjectTypeFacetForJdoPersistenceCapableAnnotation.create(jdoPersistenceCapableFacet,
 facetHolder));
+            
FacetUtil.addFacet(ObjectTypeFacetForJdoPersistenceCapableAnnotation
+                    .create(jdoPersistenceCapableFacet, cls, facetHolder));
         }
 
         return;
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/domainobject/objectspecid/ObjectTypeFacetForTableAnnotation.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/domainobject/objectspecid/ObjectTypeFacetForTableAnnotation.java
index 3dba838..0f87fd7 100644
--- 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/domainobject/objectspecid/ObjectTypeFacetForTableAnnotation.java
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/domainobject/objectspecid/ObjectTypeFacetForTableAnnotation.java
@@ -20,6 +20,7 @@ package 
org.apache.isis.persistence.jpa.metamodel.object.domainobject.objectspec
 
 import java.util.Locale;
 
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectTypeFacet;
@@ -31,6 +32,7 @@ extends ObjectTypeFacetAbstract {
 
     public static ObjectTypeFacet create(
             final JpaTableFacetAnnotation tableFacet,
+            final Class<?> correspondingClass,
             final FacetHolder holder) {
 
         if(tableFacet.isFallback()) {
@@ -41,12 +43,12 @@ extends ObjectTypeFacetAbstract {
             return null;
         }
         final String objectType = schema.toLowerCase(Locale.ROOT) + "." + 
tableFacet.getTable();
-        return new ObjectTypeFacetForTableAnnotation(objectType, holder);
+        return new 
ObjectTypeFacetForTableAnnotation(LogicalType.eager(correspondingClass, 
objectType), holder);
     }
 
     private ObjectTypeFacetForTableAnnotation(
-            final String value,
+            final LogicalType logicalType,
             final FacetHolder holder) {
-        super(value, holder);
+        super(logicalType, holder);
     }
 }
diff --git 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java
 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java
index ccf18a6..ae72a91 100644
--- 
a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java
+++ 
b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java
@@ -68,7 +68,7 @@ implements ObjectTypeFacetFactory {
                 annotationTableAttribute,
                 facetHolder);
         FacetUtil.addFacet(jdoPersistenceCapableFacet);
-        
FacetUtil.addFacet(ObjectTypeFacetForTableAnnotation.create(jdoPersistenceCapableFacet,
 facetHolder));
+        
FacetUtil.addFacet(ObjectTypeFacetForTableAnnotation.create(jdoPersistenceCapableFacet,
 cls, facetHolder));
 
         return;
     }

Reply via email to