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 2020/05/15 06:47:55 UTC

[isis] branch master updated: ISIS-2340: let ScalarModel no longer inherit from EntityModel

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 8a6e5f5  ISIS-2340: let ScalarModel no longer inherit from EntityModel
8a6e5f5 is described below

commit 8a6e5f558fa9420d857b5631987a10f161058c09
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 15 08:47:44 2020 +0200

    ISIS-2340: let ScalarModel no longer inherit from EntityModel
    
    instead both are inheriting from ManagedObjectModel
---
 .../viewer/common/model/object/ObjectUiModel.java  | 39 ++++++++++++++
 .../viewer/wicket/model/models/EntityModel.java    | 48 +++++------------
 .../model/models/EntityModelForReference.java      |  8 ++-
 .../wicket/model/models/ManagedObjectModel.java    |  2 +-
 .../wicket/model/models/ObjectAdapterModel.java    | 18 +++----
 .../viewer/wicket/model/models/ScalarModel.java    | 60 ++++++++++++----------
 .../scalars/reference/ReferencePanel.java          | 10 ++--
 .../entitysimplelink/EntityLinkSimplePanel.java    | 10 ++--
 .../EntityLinkSimplePanelFactory.java              | 16 +++---
 .../wicket/ui/panels/PromptFormAbstract.java       | 10 ++--
 10 files changed, 126 insertions(+), 95 deletions(-)

diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/object/ObjectUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/object/ObjectUiModel.java
index bd00491..86659fc 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/object/ObjectUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/object/ObjectUiModel.java
@@ -80,4 +80,43 @@ public interface ObjectUiModel {
         }
     }
     
+    public interface HasRenderingHints {
+
+        /**
+         * Similar to {@link #mustBeEditable()}, though not called from the same locations.
+         *
+         * My suspicion is that it amounts to more or less the same set of conditions.
+         *
+         * @return
+         */
+        boolean isInlinePrompt();
+        
+        RenderingHint getRenderingHint();
+        void setRenderingHint(RenderingHint renderingHint);
+        
+        Mode getMode();
+        void setMode(Mode mode);
+        
+        // -- SHORTCUTS
+        
+        default boolean isViewMode() {
+            return getMode() == Mode.VIEW;
+        }
+
+        default boolean isEditMode() {
+            return getMode() == Mode.EDIT;
+        }
+
+        default HasRenderingHints toEditMode() {
+            setMode(Mode.EDIT);
+            return this;
+        }
+
+        default HasRenderingHints toViewMode() {
+            setMode(Mode.VIEW);
+            return this;
+        }
+
+    }
+    
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 4a5dab1..1b6b530 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -37,6 +37,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
@@ -45,6 +46,8 @@ import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
 
 import static org.apache.isis.core.commons.internal.base._With.requires;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.val;
 
 /**
@@ -57,7 +60,7 @@ import lombok.val;
 //@Log4j2
 public class EntityModel 
 extends ManagedObjectModel 
-implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel {
+implements HasRenderingHints, ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel {
 
     private static final long serialVersionUID = 1L;
     
@@ -87,7 +90,12 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
     
     private ObjectMemento contextAdapterIfAny;
 
+    @Getter(onMethod = @__(@Override)) 
+    @Setter(onMethod = @__(@Override)) 
     private Mode mode;
+    
+    @Getter(onMethod = @__(@Override)) 
+    @Setter(onMethod = @__(@Override)) 
     private RenderingHint renderingHint;
 
     // -- FACTORIES
@@ -153,7 +161,9 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
         
         super(requires(commonContext, "commonContext"), adapterMemento);
         
-        this.propertyScalarModels = propertyScalarModels!=null ? propertyScalarModels : _Maps.<PropertyMemento, ScalarModel>newHashMap();
+        this.propertyScalarModels = propertyScalarModels!=null 
+                ? propertyScalarModels 
+                : _Maps.<PropertyMemento, ScalarModel>newHashMap();
         this.mode = mode;
         this.renderingHint = renderingHint;
     }
@@ -263,50 +273,19 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
     }
 
     // //////////////////////////////////////////////////////////
-    // RenderingHint, Mode, entityDetailsVisible
-    // //////////////////////////////////////////////////////////
-
-
-    @Override
-    public RenderingHint getRenderingHint() {
-        return renderingHint;
-    }
-    @Override
-    public void setRenderingHint(RenderingHint renderingHint) {
-        this.renderingHint = renderingHint;
-    }
 
     @Override
     public ObjectMemento getContextAdapterIfAny() {
         return contextAdapterIfAny;
     }
 
-    /**
-     * Used as a hint when the {@link #getRenderingHint()} is {@link RenderingHint#PARENTED_TITLE_COLUMN},
-     * provides a context adapter to obtain the title.
-     */
     @Override
     public void setContextAdapterIfAny(ObjectMemento contextAdapterIfAny) {
         this.contextAdapterIfAny = contextAdapterIfAny;
     }
 
-    @Override
-    public Mode getMode() {
-        return mode;
-    }
-
-    protected void setMode(final Mode mode) {
-        this.mode = mode;
-    }
-
-    public boolean isViewMode() {
-        return mode == Mode.VIEW;
-    }
-
-    public boolean isEditMode() {
-        return mode == Mode.EDIT;
-    }
 
+    @Override
     public EntityModel toEditMode() {
         setMode(Mode.EDIT);
         for (final ScalarModel scalarModel : propertyScalarModels.values()) {
@@ -315,6 +294,7 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
         return this;
     }
 
+    @Override
     public EntityModel toViewMode() {
         setMode(Mode.VIEW);
         for (final ScalarModel scalarModel : propertyScalarModels.values()) {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
index 23d591f..d63bfb5 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.services.hint.HintStore;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.Mode;
 
 import static org.apache.isis.viewer.wicket.model.models.EntityModel.createPageParameters;
 
@@ -92,6 +93,11 @@ public class EntityModelForReference implements ObjectAdapterModel {
     public EntityModel.Mode getMode() {
         return EntityModel.Mode.VIEW;
     }
+    
+    @Override
+    public void setMode(Mode mode) {
+        // no-op
+    }
 
     @Override
     public PageParameters getPageParameters() {
@@ -110,5 +116,5 @@ public class EntityModelForReference implements ObjectAdapterModel {
         return scalarModel.getPromptStyle().isInlineOrInlineAsIfEdit()
                 && scalarModel.isEnabled();
     }
-
+    
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
index 3fed95f..66421fe 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
@@ -160,7 +160,7 @@ extends ModelAbstract<ManagedObject> {
                 .orElse(false);
     }
 
-    private <T extends Facet> Optional<T> lookupFacet(Class<T> facetClass) {
+    public <T extends Facet> Optional<T> lookupFacet(Class<T> facetClass) {
         return Optional.ofNullable(getTypeOfSpecification())
                 .map(objectSpec->objectSpec.getFacet(facetClass));
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
index b74adef..8af8669 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
@@ -24,22 +24,22 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.RenderingHint;
 
-public interface ObjectAdapterModel extends IModel<ManagedObject> {
+public interface ObjectAdapterModel 
+extends HasRenderingHints, IModel<ManagedObject> {
 
+    /**
+     * Used as a hint when the {@link #getRenderingHint()} is {@link RenderingHint#PARENTED_TITLE_COLUMN},
+     * provides a context adapter to obtain the title.
+     */
     ObjectMemento getContextAdapterIfAny();
     void setContextAdapterIfAny(ObjectMemento contextAdapterIfAny);
 
-    EntityModel.RenderingHint getRenderingHint();
-    void setRenderingHint(EntityModel.RenderingHint renderingHint);
-
+    PageParameters getPageParameters();
     PageParameters getPageParametersWithoutUiHints();
 
     ObjectSpecification getTypeOfSpecification();
 
-    EntityModel.Mode getMode();
-
-    PageParameters getPageParameters();
-
-    boolean isInlinePrompt();
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index ac1b65e..5870253 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -43,13 +43,19 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
 import org.apache.isis.viewer.common.model.feature.ScalarUiModel;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.Mode;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.RenderingHint;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.links.LinksProvider;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -61,20 +67,11 @@ import lombok.extern.log4j.Log4j2;
  * Is the backing model to each of the fields that appear in forms (for entities
  * or action dialogs).
  *
- * <p>
- *     NOTE: although this inherits from {@link EntityModel}, this is wrong I think; what is being shared
- *     is just some of the implementation - both objects have to wrap some arbitrary memento holding some state
- *     (a value or entity reference in a ScalarModel's case, an entity reference in an EntityModel's), they have
- *     a view mode, they have a rendering hint, and scalar models have a pending value.
- *     
- *     Fundamentally though a ScalarModel is NOT really an EntityModel, so this hierarchy should be broken out with a
- *     common superclass for both EntityModel and ScalarModel.
- * </p>
  */
 @Log4j2
 public abstract class ScalarModel 
-extends EntityModel 
-implements ScalarUiModel, LinksProvider, FormExecutorContext {
+extends ManagedObjectModel 
+implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext {
 
     private static final long serialVersionUID = 1L;
 
@@ -88,6 +85,15 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
     
 
     private final EntityModel parentEntityModel;
+    
+    @Getter(onMethod = @__(@Override)) 
+    @Setter(onMethod = @__(@Override)) 
+    private Mode mode;
+    
+    @Getter(onMethod = @__(@Override)) 
+    @Setter(onMethod = @__(@Override)) 
+    private RenderingHint renderingHint;
+    
 
     /**
      * Creates a model representing an action parameter of an action of a parent
@@ -96,13 +102,13 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
      */
     protected ScalarModel(EntityModel parentEntityModel, ActionParameterMemento apm) {
         
-        super(parentEntityModel.getCommonContext(),
-                EntityModel.Mode.EDIT, 
-                EntityModel.RenderingHint.REGULAR);
+        super(parentEntityModel.getCommonContext());
         
         this.kind = Kind.PARAMETER;
         this.parentEntityModel = parentEntityModel;
         this.pendingModel = new PendingModel(this);
+        this.mode = ObjectUiModel.Mode.EDIT;
+        this.renderingHint = ObjectUiModel.RenderingHint.REGULAR;
     }
 
     /**
@@ -113,13 +119,15 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
     protected ScalarModel(
             EntityModel parentEntityModel, 
             PropertyMemento pm,
-            EntityModel.Mode mode, 
-            EntityModel.RenderingHint renderingHint) {
+            ObjectUiModel.Mode mode, 
+            ObjectUiModel.RenderingHint renderingHint) {
         
-        super(parentEntityModel.getCommonContext(), mode, renderingHint);
+        super(parentEntityModel.getCommonContext());
         this.kind = Kind.PROPERTY;
         this.parentEntityModel = parentEntityModel;
         this.pendingModel = new PendingModel(this);
+        this.mode = mode;
+        this.renderingHint = renderingHint;
     }
 
     protected ManagedObject loadFromSuper() {
@@ -458,7 +466,7 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
     private static final class PendingModel extends Model<ObjectMemento> {
         private static final long serialVersionUID = 1L;
 
-        @NonNull private final EntityModel entityModel;
+        @NonNull private final ManagedObjectModel pendingValueModel;
 
         /**
          * Whether pending has been set (could have been set to null)
@@ -475,22 +483,22 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
                 return pending;
             }
             
-            if(entityModel.memento()!=null) {
-                return entityModel.memento();
+            if(pendingValueModel.memento()!=null) {
+                return pendingValueModel.memento();
             }
             
             //XXX [a.huber] as I don't understand the big picture here, given newly introduced branch above,
             // there might be a slight chance, that this is dead code anyway ...
-            val adapter = entityModel.getObject();
+            val adapter = pendingValueModel.getObject();
             val pojo = adapter.getPojo();
             if(pojo!=null && _Collections.isCollectionOrArrayOrCanType(pojo.getClass())) {
-                val specId = entityModel.getTypeOfSpecification().getSpecId();
+                val specId = pendingValueModel.getTypeOfSpecification().getSpecId();
                 log.warn("potentially a bug, wild guess fix for non-scalar %s", specId);
                 val pojos = _NullSafe.streamAutodetect(pojo)
                         .collect(Collectors.<Object>toList());
-                return entityModel.getMementoService().mementoForPojos(pojos, specId);
+                return pendingValueModel.getMementoService().mementoForPojos(pojos, specId);
             }
-            return entityModel.getMementoService().mementoForObject(adapter);
+            return pendingValueModel.getMementoService().mementoForObject(adapter);
         }
 
         @Override
@@ -506,11 +514,11 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
 
         private ManagedObject getPendingAdapter() {
             val memento = getObject();
-            return entityModel.getCommonContext().reconstructObject(memento);
+            return pendingValueModel.getCommonContext().reconstructObject(memento);
         }
 
         public ManagedObject getPendingElseCurrentAdapter() {
-            return hasPending ? getPendingAdapter() : entityModel.getObject();
+            return hasPending ? getPendingAdapter() : pendingValueModel.getObject();
         }
 
         public ObjectMemento getPending() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index e96d3bb..fb1ccb0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -36,7 +36,7 @@ import org.wicketstuff.select2.Settings;
 import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
 import org.apache.isis.viewer.wicket.model.models.EntityModelForReference;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -87,7 +87,8 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
         final ScalarModel scalarModel = getModel();
         final String name = scalarModel.getName();
 
-        entitySimpleLink = (EntityLinkSimplePanel) getComponentFactoryRegistry().createComponent(ComponentType.ENTITY_LINK, getModel());
+        entitySimpleLink = (EntityLinkSimplePanel) getComponentFactoryRegistry()
+                .createComponent(ComponentType.ENTITY_LINK, scalarModel);
 
         entitySimpleLink.setOutputMarkupId(true);
         entitySimpleLink.setLabel(Model.of(name));
@@ -211,7 +212,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     protected void onInitializeReadonly(final String disableReason) {
         super.onInitializeReadonly(disableReason);
         syncWithInput();
-        val entityLinkModel = (EntityModel) entityLink.getModel();
+        val entityLinkModel = (HasRenderingHints) entityLink.getModel();
         entityLinkModel.toViewMode();
         entityLink.setEnabled(false);
         Tooltips.addTooltip(entityLink, disableReason);
@@ -252,7 +253,8 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
 
             final EntityModelForReference entityModelForLink = new EntityModelForReference(getModel());
 
-            entityModelForLink.setContextAdapterIfAny(getModel().getContextAdapterIfAny());
+            //XXX assuming, that scalar models don't have a context adapter 
+            //entityModelForLink.setContextAdapterIfAny(model.getContextAdapterIfAny());    
             entityModelForLink.setRenderingHint(getModel().getRenderingHint());
 
             final ComponentFactory componentFactory =
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
index f50f429..f32f790 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
@@ -24,7 +24,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
 
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.ManagedObjectModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
@@ -45,14 +45,14 @@ implements CancelHintRequired  {
     private static final String ID_ENTITY_ICON_AND_TITLE = "entityIconAndTitle";
     private static final String ID_ENTITY_TITLE_NULL = "entityTitleNull";
 
-    public EntityLinkSimplePanel(final String id, final EntityModel entityModel) {
+    public EntityLinkSimplePanel(final String id, final ManagedObjectModel entityModel) {
         super(id, entityModel);
         setType(ManagedObject.class);
         buildGui();
     }
 
-    public EntityModel getEntityModel() {
-        return (EntityModel) getModel();
+    public ManagedObjectModel getEntityModel() {
+        return (ManagedObjectModel) getModel();
     }
 
     private void buildGui() {
@@ -69,7 +69,7 @@ implements CancelHintRequired  {
         val adapter = getEntityModel().getObject(); // getPendingElseCurrentAdapter();
 
         if (adapter != null) {
-            final EntityModel entityModelForLink = getEntityModel();
+            final ManagedObjectModel entityModelForLink = getEntityModel();
 
             final ComponentFactory componentFactory = getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, entityModelForLink);
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanelFactory.java
index f7c731d..656b11c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanelFactory.java
@@ -23,11 +23,12 @@ import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.ManagedObjectModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 
+import lombok.val;
+
 public class EntityLinkSimplePanelFactory extends ComponentFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
@@ -38,17 +39,16 @@ public class EntityLinkSimplePanelFactory extends ComponentFactoryAbstract {
 
     @Override
     public ApplicationAdvice appliesTo(final IModel<?> model) {
-        if (!(model instanceof EntityModel)) {
+        if (!(model instanceof ManagedObjectModel)) {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
-        final EntityModel entityModel = (EntityModel) model;
-        final ObjectSpecification specification = entityModel.getTypeOfSpecification();
-        return appliesIf(specification != null && !specification.containsFacet(ValueFacet.class));
+        val objectModel = (ManagedObjectModel) model;
+        return appliesIf(!objectModel.lookupFacet(ValueFacet.class).isPresent());
     }
 
     @Override
     public Component createComponent(final String id, final IModel<?> model) {
-        final EntityModel scalarModel = (EntityModel) model;
-        return new EntityLinkSimplePanel(id, scalarModel);
+        final ManagedObjectModel objectModel = (ManagedObjectModel) model;
+        return new EntityLinkSimplePanel(id, objectModel);
     }
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index 5ba4a78..6532a39 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -40,12 +40,9 @@ import org.apache.wicket.util.string.AppendingStringBuffer;
 
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.viewer.common.model.HasParentUiModel;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
-import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.FormExecutorContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
@@ -57,10 +54,9 @@ import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.util.Components;
 
-public abstract class PromptFormAbstract<T extends BookmarkableModel
-& HasParentUiModel<EntityModel>
-& IModel<ManagedObject>
-& FormExecutorContext>
+public abstract class PromptFormAbstract<T extends
+    FormExecutorContext 
+    & IModel<ManagedObject>>
 extends FormAbstract<ManagedObject>
 implements ScalarModelSubscriber2 {