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 2022/08/08 12:06:27 UTC
[isis] branch master updated: ISIS-3112: have ValueModel hold info about its origin
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 343cc8c350 ISIS-3112: have ValueModel hold info about its origin
343cc8c350 is described below
commit 343cc8c350c72edb5be8a5fd1be02ef9b6faf560
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Aug 8 14:06:18 2022 +0200
ISIS-3112: have ValueModel hold info about its origin
---
.../interactions/managed/nonscalar/DataRow.java | 2 +
.../spec/feature/memento/ActionMemento.java | 2 +-
.../feature/memento/ActionParameterMemento.java | 2 +-
.../spec/feature/memento/CollectionMemento.java | 2 +-
.../spec/feature/memento/ObjectMemberMemento.java | 83 ++++++++++++++++++++++
.../spec/feature/memento/PropertyMemento.java | 2 +-
.../viewer/wicket/model/models/ValueModel.java | 18 ++++-
.../actionresponse/ActionResultResponseType.java | 4 +-
.../ajaxtable/columns/GenericTitleColumn.java | 10 +--
9 files changed, 114 insertions(+), 11 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
index 1b45034c7c..59e27f6ae7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
@@ -32,8 +32,10 @@ public class DataRow {
@Getter private final UUID uuid = UUID.randomUUID(); // in support of client side sorting
private final ManagedObject rowElement;
@Getter private final BooleanBindable selectToggle;
+ @Getter private final DataTableModel parentTable;
public DataRow(final DataTableModel parentTable, final ManagedObject rowElement) {
+ this.parentTable = parentTable;
this.rowElement = rowElement;
selectToggle = _Bindables.forBoolean(false);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
index 60a2a88693..e4f0a9c36a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
@@ -33,7 +33,7 @@ import lombok.NonNull;
import lombok.Synchronized;
/**
- * {@link Serializable} representation of a {@link ObjectAction}
+ * {@link Serializable} representation of an {@link ObjectAction}
*
* @implNote thread-safe memoization
*
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionParameterMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionParameterMemento.java
index ee9ae88f60..17fc82627e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionParameterMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionParameterMemento.java
@@ -33,7 +33,7 @@ import lombok.NonNull;
import lombok.Synchronized;
/**
- * {@link Serializable} representation of a {@link ObjectActionParameter parameter}
+ * {@link Serializable} representation of an {@link ObjectActionParameter parameter}
* that belongs to an {@link ObjectAction}.
*
* @implNote thread-safe memoization
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/CollectionMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/CollectionMemento.java
index 8ef68485f6..7e021af5e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/CollectionMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/CollectionMemento.java
@@ -33,7 +33,7 @@ import lombok.NonNull;
import lombok.Synchronized;
/**
- * {@link Serializable} representation of a {@link OneToManyAssociation}
+ * {@link Serializable} representation of an {@link OneToManyAssociation}
* (a parented collection of entities).
*
* @implNote thread-safe memoization
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ObjectMemberMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ObjectMemberMemento.java
new file mode 100644
index 0000000000..c04daca968
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ObjectMemberMemento.java
@@ -0,0 +1,83 @@
+/*
+ * 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.core.metamodel.spec.feature.memento;
+
+import java.io.Serializable;
+import java.util.function.Supplier;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.Synchronized;
+
+/**
+ * {@link Serializable} representation of an {@link ObjectMember}
+*
+* @implNote thread-safe memoization
+*
+* @since 2.0 {index}
+*/
+@EqualsAndHashCode
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+public class ObjectMemberMemento implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @EqualsAndHashCode.Include
+ @Getter private final @NonNull Identifier identifier;
+
+ // -- FACTORY
+
+ public static ObjectMemberMemento forMember(final @NonNull ObjectMember objectMember) {
+ return new ObjectMemberMemento(
+ objectMember.getFeatureIdentifier(),
+ objectMember);
+ }
+
+ // -- LOAD/UNMARSHAL
+
+ @EqualsAndHashCode.Exclude
+ private transient ObjectMember objectMember;
+
+ @Synchronized
+ public ObjectMember getObjectMember(final @NonNull Supplier<SpecificationLoader> specLoader) {
+ if (objectMember == null) {
+ objectMember = specLoader.get()
+ .specForLogicalTypeElseFail(getIdentifier().getLogicalType())
+ .getMemberElseFail(
+ getIdentifier().getMemberNameAndParameterClassNamesIdentityString());
+ }
+ return objectMember;
+ }
+
+ // -- OBJECT CONTRACT
+
+ @Override
+ public String toString() {
+ return getIdentifier().getLogicalTypeName() + "#"
+ + getIdentifier().getMemberNameAndParameterClassNamesIdentityString();
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/PropertyMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/PropertyMemento.java
index e6b9bea659..fd957caa10 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/PropertyMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/PropertyMemento.java
@@ -33,7 +33,7 @@ import lombok.NonNull;
import lombok.Synchronized;
/**
- * {@link Serializable} representation of a {@link OneToOneAssociation}
+ * {@link Serializable} representation of an {@link OneToOneAssociation}
*
* @implNote thread-safe memoization
*
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index 409ded0e10..54da2ef25a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -23,6 +23,8 @@ import org.springframework.lang.Nullable;
import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.memento.ObjectMemberMemento;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import lombok.NonNull;
@@ -39,8 +41,9 @@ extends ModelAbstract<ManagedObject> {
public static ValueModel of(
final @NonNull IsisAppCommonContext commonContext,
+ final @NonNull ObjectMember objectMember,
final @Nullable ManagedObject valueAdapter) {
- return new ValueModel(commonContext, valueAdapter);
+ return new ValueModel(commonContext, objectMember, valueAdapter);
}
// --
@@ -49,8 +52,10 @@ extends ModelAbstract<ManagedObject> {
private ValueModel(
final IsisAppCommonContext commonContext,
+ final @NonNull ObjectMember objectMember,
final @Nullable ManagedObject valueAdapter) {
super(commonContext);
+ this.objectMemberMemento = ObjectMemberMemento.forMember(objectMember);
adapterMemento = super.getMementoService().mementoForObject(valueAdapter);
}
@@ -59,6 +64,17 @@ extends ModelAbstract<ManagedObject> {
return getCommonContext().reconstructObject(adapterMemento);
}
+ // -- META MODEL
+
+ private final ObjectMemberMemento objectMemberMemento;
+
+ /**
+ * The originating {@link ObjectMember} this {@link ValueModel} is provided by.
+ */
+ public ObjectMember getObjectMember() {
+ return objectMemberMemento.getObjectMember(getCommonContext()::getSpecificationLoader);
+ }
+
// -- HINTING SUPPORT
private ActionModel actionModelHint;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index fc8bf04485..5ff36dcde3 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -96,9 +96,9 @@ public enum ActionResultResponseType {
final ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final var commonContext = actionModel.getCommonContext();
- ValueModel valueModel = ValueModel.of(commonContext, resultAdapter);
+ final var valueModel = ValueModel.of(commonContext, actionModel.getAction(), resultAdapter);
valueModel.setActionHint(actionModel);
- final ValuePage valuePage = new ValuePage(valueModel);
+ final var valuePage = new ValuePage(valueModel);
return ActionResultResponse.toPage(ValuePage.class, valuePage);
}
},
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/GenericTitleColumn.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/GenericTitleColumn.java
index c7cd2a77c9..b2b864b873 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/GenericTitleColumn.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/GenericTitleColumn.java
@@ -28,9 +28,9 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.metamodel.interactions.managed.nonscalar.DataRow;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel.Variant;
import org.apache.isis.viewer.commons.model.components.ComponentType;
import org.apache.isis.viewer.commons.model.object.ObjectUiModel.RenderingHint;
+import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel.Variant;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.ValueModel;
import org.apache.isis.viewer.wicket.ui.util.Wkt;
@@ -77,11 +77,13 @@ extends GenericColumnAbstract {
}
private Component createComponent(final String id, final IModel<DataRow> rowModel) {
- val adapter = rowModel.getObject().getRowElement();
+ val dataRow = rowModel.getObject();
- if(ManagedObjects.isValue(adapter)) {
- val valueModel = ValueModel.of(super.getCommonContext(), adapter);
+ val adapter = dataRow.getRowElement();
+ if(ManagedObjects.isValue(adapter)) {
+ val objectMember = dataRow.getParentTable().getMetaModel();
+ val valueModel = ValueModel.of(super.getCommonContext(), objectMember, adapter);
val componentFactory = findComponentFactory(ComponentType.VALUE, valueModel);
return componentFactory.createComponent(id, valueModel);
}