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 <ahu...@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); }