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 05:47:23 UTC
[isis] 02/02: ISIS-2340: moves pending model from Entity- to
ScalarModel
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
commit 6c7e255969e751103ea34fe541a47d360cfaad1a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 15 07:47:10 2020 +0200
ISIS-2340: moves pending model from Entity- to ScalarModel
---
.../viewer/wicket/model/models/EntityModel.java | 112 +--------------------
.../viewer/wicket/model/models/ScalarModel.java | 111 +++++++++++++++++++-
2 files changed, 111 insertions(+), 112 deletions(-)
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 20a0a09..a32d2b1 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
@@ -21,26 +21,18 @@ package org.apache.isis.viewer.wicket.model.models;
import java.io.Serializable;
import java.util.Map;
-import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.apache.wicket.Component;
-import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.layout.component.CollectionLayoutData;
-import org.apache.isis.core.commons.internal.base._NullSafe;
-import org.apache.isis.core.commons.internal.collections._Collections;
import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
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;
@@ -53,10 +45,7 @@ import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
import static org.apache.isis.core.commons.internal.base._With.requires;
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
import lombok.val;
-import lombok.extern.log4j.Log4j2;
/**
* Backing model to represent a {@link ManagedObject}.
@@ -65,7 +54,7 @@ import lombok.extern.log4j.Log4j2;
* So that the model is {@link Serializable}, the {@link ManagedObject} is
* stored as a {@link ObjectMemento}.
*/
-@Log4j2
+//@Log4j2
public class EntityModel
extends ManagedObjectModel
implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel<ManagedObject> {
@@ -100,8 +89,6 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
private Mode mode;
private RenderingHint renderingHint;
- private final PendingModel pendingModel;
-
// -- FACTORIES
@@ -165,7 +152,7 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
RenderingHint renderingHint) {
super(requires(commonContext, "commonContext"), adapterMemento);
- this.pendingModel = new PendingModel(this);
+
this.propertyScalarModels = propertyScalarModels!=null ? propertyScalarModels : _Maps.<PropertyMemento, ScalarModel>newHashMap();
this.mode = mode;
this.renderingHint = renderingHint;
@@ -353,101 +340,6 @@ implements ObjectAdapterModel, UiHintContainer, ObjectUiModel, BookmarkableModel
// //////////////////////////////////////////////////////////
- // Pending
- // //////////////////////////////////////////////////////////
-
- @RequiredArgsConstructor
- private static final class PendingModel extends Model<ObjectMemento> {
- private static final long serialVersionUID = 1L;
-
- @NonNull private final EntityModel entityModel;
-
- /**
- * Whether pending has been set (could have been set to null)
- */
- private boolean hasPending;
- /**
- * The new value (could be set to null; hasPending is used to distinguish).
- */
- private ObjectMemento pending;
-
- @Override
- public ObjectMemento getObject() {
- if (hasPending) {
- return pending;
- }
-
- if(entityModel.memento()!=null) {
- return entityModel.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 pojo = adapter.getPojo();
- if(pojo!=null && _Collections.isCollectionOrArrayOrCanType(pojo.getClass())) {
- val specId = entityModel.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 entityModel.getMementoService().mementoForObject(adapter);
- }
-
- @Override
- public void setObject(final ObjectMemento adapterMemento) {
- pending = adapterMemento;
- hasPending = true;
- }
-
- public void clearPending() {
- this.hasPending = false;
- this.pending = null;
- }
-
- private ManagedObject getPendingAdapter() {
- val memento = getObject();
- return entityModel.getCommonContext().reconstructObject(memento);
- }
-
- public ManagedObject getPendingElseCurrentAdapter() {
- return hasPending ? getPendingAdapter() : entityModel.getObject();
- }
-
- public ObjectMemento getPending() {
- return pending;
- }
-
- public void setPending(ObjectMemento selectedAdapterMemento) {
- this.pending = selectedAdapterMemento;
- hasPending=true;
- }
- }
-
-
- public ManagedObject getPendingElseCurrentAdapter() {
- return pendingModel.getPendingElseCurrentAdapter();
- }
-
- public ManagedObject getPendingAdapter() {
- return pendingModel.getPendingAdapter();
- }
-
- public ObjectMemento getPending() {
- return pendingModel.getPending();
- }
-
- public void setPending(ObjectMemento selectedAdapterMemento) {
- pendingModel.setPending(selectedAdapterMemento);
- }
-
- public void clearPending() {
- pendingModel.clearPending();
- }
-
-
- // //////////////////////////////////////////////////////////
// tab and column metadata (if any)
// //////////////////////////////////////////////////////////
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 3781359..d29cee2 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
@@ -22,12 +22,16 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.apache.wicket.model.Model;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.base._Casts;
import org.apache.isis.core.commons.internal.base._NullSafe;
+import org.apache.isis.core.commons.internal.collections._Collections;
import org.apache.isis.core.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -45,7 +49,9 @@ import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
import lombok.val;
+import lombok.extern.log4j.Log4j2;
/**
* Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
@@ -59,12 +65,13 @@ import lombok.val;
* 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 (not sure if Entity Model really
- * requires this).
+ * 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 {
@@ -94,6 +101,7 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
this.kind = Kind.PARAMETER;
this.parentEntityModel = parentEntityModel;
+ this.pendingModel = new PendingModel(this);
}
/**
@@ -110,6 +118,7 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
super(parentEntityModel.getCommonContext(), mode, renderingHint);
this.kind = Kind.PROPERTY;
this.parentEntityModel = parentEntityModel;
+ this.pendingModel = new PendingModel(this);
}
protected ManagedObject loadFromSuper() {
@@ -438,4 +447,102 @@ implements ScalarUiModel, LinksProvider, FormExecutorContext {
return getAssociatedActions().hasAssociatedActionWithInlineAsIfEdit();
}
+ // //////////////////////////////////////////////////////////
+ // Pending
+ // //////////////////////////////////////////////////////////
+
+ private final PendingModel pendingModel;
+
+ @RequiredArgsConstructor
+ private static final class PendingModel extends Model<ObjectMemento> {
+ private static final long serialVersionUID = 1L;
+
+ @NonNull private final EntityModel entityModel;
+
+ /**
+ * Whether pending has been set (could have been set to null)
+ */
+ private boolean hasPending;
+ /**
+ * The new value (could be set to null; hasPending is used to distinguish).
+ */
+ private ObjectMemento pending;
+
+ @Override
+ public ObjectMemento getObject() {
+ if (hasPending) {
+ return pending;
+ }
+
+ if(entityModel.memento()!=null) {
+ return entityModel.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 pojo = adapter.getPojo();
+ if(pojo!=null && _Collections.isCollectionOrArrayOrCanType(pojo.getClass())) {
+ val specId = entityModel.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 entityModel.getMementoService().mementoForObject(adapter);
+ }
+
+ @Override
+ public void setObject(final ObjectMemento adapterMemento) {
+ pending = adapterMemento;
+ hasPending = true;
+ }
+
+ public void clearPending() {
+ this.hasPending = false;
+ this.pending = null;
+ }
+
+ private ManagedObject getPendingAdapter() {
+ val memento = getObject();
+ return entityModel.getCommonContext().reconstructObject(memento);
+ }
+
+ public ManagedObject getPendingElseCurrentAdapter() {
+ return hasPending ? getPendingAdapter() : entityModel.getObject();
+ }
+
+ public ObjectMemento getPending() {
+ return pending;
+ }
+
+ public void setPending(ObjectMemento selectedAdapterMemento) {
+ this.pending = selectedAdapterMemento;
+ hasPending=true;
+ }
+ }
+
+
+ public ManagedObject getPendingElseCurrentAdapter() {
+ return pendingModel.getPendingElseCurrentAdapter();
+ }
+
+ public ManagedObject getPendingAdapter() {
+ return pendingModel.getPendingAdapter();
+ }
+
+ public ObjectMemento getPending() {
+ return pendingModel.getPending();
+ }
+
+ public void setPending(ObjectMemento selectedAdapterMemento) {
+ pendingModel.setPending(selectedAdapterMemento);
+ }
+
+ public void clearPending() {
+ pendingModel.clearPending();
+ }
+
+ // //////////////////////////////////////////////////////////
+
}