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 09:52:39 UTC
[isis] branch master updated: ISIS-2340: move PendingModel from
ScalarModel to its own file
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 ef8c98b ISIS-2340: move PendingModel from ScalarModel to its own file
ef8c98b is described below
commit ef8c98bfe788b6ccd5c450b1e6e8a0e98cf3b6c0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 15 11:26:27 2020 +0200
ISIS-2340: move PendingModel from ScalarModel to its own file
also a bit on slippery ground trying to simplify
---
.../wicket/model/models/ManagedObjectModel.java | 2 +
.../viewer/wicket/model/models/PendingModel.java | 115 +++++++++++++++++++++
.../viewer/wicket/model/models/ScalarModel.java | 114 +-------------------
.../model/models/ScalarModelWithMultiPending.java | 4 +-
.../model/models/ScalarModelWithPending.java | 4 +-
.../components/scalars/ScalarPanelAbstract2.java | 5 +-
.../scalars/reference/ReferencePanel.java | 5 +-
7 files changed, 130 insertions(+), 119 deletions(-)
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 66421fe..7c87fa1 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
@@ -77,6 +77,7 @@ extends ModelAbstract<ManagedObject> {
if(ManagedObject.isNullOrUnspecifiedOrEmpty(adapter)) {
super.setObject(null);
+ memento = null;
return;
}
@@ -93,6 +94,7 @@ extends ModelAbstract<ManagedObject> {
if(ManagedObject.isNullOrUnspecifiedOrEmpty(adapter)) {
super.setObject(null);
+ memento = null;
return;
}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PendingModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PendingModel.java
new file mode 100644
index 0000000..c52e092
--- /dev/null
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PendingModel.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.wicket.model.models;
+
+import java.util.stream.Collectors;
+
+import org.apache.wicket.model.Model;
+
+import org.apache.isis.core.commons.internal.base._NullSafe;
+import org.apache.isis.core.commons.internal.collections._Collections;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
+import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.core.webapp.context.memento.ObjectMementoService;
+
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@RequiredArgsConstructor
+@Log4j2
+final class PendingModel extends Model<ObjectMemento> {
+ private static final long serialVersionUID = 1L;
+
+ @NonNull private final ManagedObjectModel pendingValueModel;
+
+ /**
+ * 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(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 = pendingValueModel.getObject();
+ val pojo = adapter.getPojo();
+ if(pojo!=null && _Collections.isCollectionOrArrayOrCanType(pojo.getClass())) {
+ 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 getMementoService().mementoForPojos(pojos, specId);
+ }
+ return getMementoService().mementoForObject(adapter);
+ }
+
+ @Override
+ public void setObject(final ObjectMemento adapterMemento) {
+ pending = adapterMemento;
+ hasPending = true;
+ }
+
+ public void clearPending() {
+ this.hasPending = false;
+ this.pending = null;
+ }
+
+ public ManagedObject getPendingElseCurrentAdapter() {
+ return hasPending ? getPendingAdapter() : pendingValueModel.getObject();
+ }
+
+ ManagedObject getPendingAdapter() {
+ val memento = getObject();
+ return getCommonContext().reconstructObject(memento);
+ }
+
+ ObjectMemento getPendingMemento() {
+ return pending;
+ }
+
+ void setPendingMemento(ObjectMemento selectedAdapterMemento) {
+ this.pending = selectedAdapterMemento;
+ hasPending=true;
+ }
+
+ private IsisWebAppCommonContext getCommonContext() {
+ return pendingValueModel.getCommonContext();
+ }
+
+ private ObjectMementoService getMementoService() {
+ return pendingValueModel.getMementoService();
+ }
+
+
+}
\ No newline at end of file
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 2a47171..49e4b41 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
@@ -21,16 +21,11 @@ package org.apache.isis.viewer.wicket.model.models;
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;
@@ -40,7 +35,6 @@ 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.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;
@@ -51,12 +45,10 @@ 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.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
/**
* Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
@@ -67,7 +59,7 @@ import lombok.extern.log4j.Log4j2;
* or action dialogs).
*
*/
-@Log4j2
+//@Log4j2
public abstract class ScalarModel
extends ManagedObjectModel
implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext {
@@ -205,19 +197,6 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
setObject(adapter);
}
- public void setPendingAdapter(final ManagedObject objectAdapter) {
- if(isCollection()) {
- val pojos = objectAdapter.getPojo();
- val memento = super.getMementoService()
- .mementoForPojos(_Casts.uncheckedCast(pojos), getTypeOfSpecification().getSpecId());
- setPendingMemento(memento);
- } else {
- val memento = super.getMementoService()
- .mementoForObject(objectAdapter);
- setPendingMemento(memento);
- }
- }
-
public boolean whetherHidden() {
final Where where = getRenderingHint().asWhere();
return whetherHidden(where);
@@ -401,102 +380,19 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
return getAssociatedActions().hasAssociatedActionWithInlineAsIfEdit();
}
- // //////////////////////////////////////////////////////////
- // Pending
- // //////////////////////////////////////////////////////////
+ // -- PENDING STUFF
+ @Getter(value = AccessLevel.PACKAGE)
private final PendingModel pendingModel;
- @RequiredArgsConstructor
- private static final class PendingModel extends Model<ObjectMemento> {
- private static final long serialVersionUID = 1L;
-
- @NonNull private final ManagedObjectModel pendingValueModel;
-
- /**
- * 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(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 = pendingValueModel.getObject();
- val pojo = adapter.getPojo();
- if(pojo!=null && _Collections.isCollectionOrArrayOrCanType(pojo.getClass())) {
- 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 pendingValueModel.getMementoService().mementoForPojos(pojos, specId);
- }
- return pendingValueModel.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 pendingValueModel.getCommonContext().reconstructObject(memento);
- }
-
- public ManagedObject getPendingElseCurrentAdapter() {
- return hasPending ? getPendingAdapter() : pendingValueModel.getObject();
- }
-
- public ObjectMemento getPendingMemento() {
- return pending;
- }
-
- public void setPendingMemento(ObjectMemento selectedAdapterMemento) {
- this.pending = selectedAdapterMemento;
- hasPending=true;
- }
- }
-
-
public ManagedObject getPendingElseCurrentAdapter() {
return pendingModel.getPendingElseCurrentAdapter();
}
- public ManagedObject getPendingAdapter() {
- return pendingModel.getPendingAdapter();
- }
-
- public ObjectMemento getPendingMemento() {
- return pendingModel.getPendingMemento();
- }
-
- public void setPendingMemento(ObjectMemento selectedAdapterMemento) {
- pendingModel.setPendingMemento(selectedAdapterMemento);
- }
-
public void clearPending() {
pendingModel.clearPending();
}
- // //////////////////////////////////////////////////////////
+ // --
}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
index 506b211..d220de3 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
@@ -56,7 +56,7 @@ public interface ScalarModelWithMultiPending extends Serializable {
@Override
public ArrayList<ObjectMemento> getMultiPending() {
- ObjectMemento pendingMemento = scalarModel.getPendingMemento();
+ ObjectMemento pendingMemento = scalarModel.getPendingModel().getPendingMemento();
return ObjectMemento.unwrapList(pendingMemento)
.orElse(null);
}
@@ -65,7 +65,7 @@ public interface ScalarModelWithMultiPending extends Serializable {
public void setMultiPending(final ArrayList<ObjectMemento> pending) {
ObjectSpecId specId = getScalarModel().getTypeOfSpecification().getSpecId();
ObjectMemento adapterMemento = ObjectMemento.wrapMementoList(pending, specId);
- scalarModel.setPendingMemento(adapterMemento);
+ scalarModel.getPendingModel().setPendingMemento(adapterMemento);
}
@Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
index 6bf07a3..80a0d5b 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
@@ -52,12 +52,12 @@ public interface ScalarModelWithPending extends Serializable {
@Override
public ObjectMemento getPendingMemento() {
- return scalarModel.getPendingMemento();
+ return scalarModel.getPendingModel().getPendingMemento();
}
@Override
public void setPendingMemento(ObjectMemento pending) {
- scalarModel.setPendingMemento(pending);
+ scalarModel.getPendingModel().setPendingMemento(pending);
}
@Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 4341526..8e4f140 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -172,11 +172,10 @@ implements ScalarModelSubscriber2 {
if(valueChanged) {
if(ManagedObject.isNullOrUnspecifiedOrEmpty(paramValue)) {
scalarModel.setObject(null);
- scalarModel.setPendingMemento(null);
} else {
scalarModel.setObject(paramValue);
- scalarModel.setPendingAdapter(paramValue);
- }
+ }
+ scalarModel.clearPending();
}
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 8952396..2d761ff 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
@@ -392,17 +392,16 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
// flush changes to pending
ObjectMemento convertedInput = select2.getConvertedInput();
-
- getModel().setPendingMemento(convertedInput);
if(select2 != null) {
select2.getModel().setObject(convertedInput);
}
val adapter = super.getCommonContext().reconstructObject(convertedInput);
getModel().setObject(adapter);
+ getModel().clearPending();
}
- val pendingAdapter = getModel().getPendingAdapter();
+ val pendingAdapter = getModel().getPendingElseCurrentAdapter();
entityLink.setConvertedInput(pendingAdapter);
}