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 218162de5f ISIS-3199: purge ObjectMemorizer
218162de5f is described below
commit 218162de5fff443bc78a553f51f761988697b82b
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 5 10:20:57 2022 +0200
ISIS-3199: purge ObjectMemorizer
---
.../interactions/managed/ManagedAction.java | 6 +-
.../metamodel/objectmanager/ObjectManager.java | 18 ++-
.../objectmanager/ObjectManagerDefault.java | 19 ++-
.../memento/ObjectMementoCollection.java | 2 -
.../memento/ObjectMementoForEmpty.java | 3 +
.../objectmanager/memento/ObjectMemorizer.java | 140 ---------------------
.../memento/ObjectMemorizer_builtinHandlers.java | 81 ------------
7 files changed, 35 insertions(+), 234 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
index 4a564bc855..6813861fcd 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
@@ -218,16 +218,16 @@ public final class ManagedAction extends ManagedMember {
static MementoForArgs create(
final ObjectManager objectManager,
final Can<ManagedObject> args) {
- return new
MementoForArgs(args.map(objectManager.getObjectMemorizer()::serialize));
+ return new
MementoForArgs(args.map(objectManager::mementifyElseFail));
}
private final Can<ObjectMemento> argsMementos;
public Can<ManagedObject> getArgumentList(final ObjectAction
actionMeta) {
val argTypes = actionMeta.getParameterTypes();
- val objectMemorizer =
actionMeta.getMetaModelContext().getObjectManager().getObjectMemorizer();
+ val objectManager =
actionMeta.getMetaModelContext().getObjectManager();
return argsMementos.zipMap(argTypes, (argSpec, argMemento)->
- objectMemorizer.deserialize(argMemento, argSpec));
+ objectManager.demementify(argMemento, argSpec));
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
index ead27b7dc0..72465094b6 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
@@ -31,7 +31,7 @@ import
org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.context.HasMetaModelContext;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.object.ProtoObject;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
+import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -55,7 +55,21 @@ public interface ObjectManager extends HasMetaModelContext {
ObjectBulkLoader getObjectBulkLoader();
ObjectBookmarker getObjectBookmarker();
ObjectSerializer getObjectSerializer();
- ObjectMemorizer getObjectMemorizer();
+
+ // -- OBJECT MEMENTOS
+
+ default Optional<ObjectMemento> mementify(final @Nullable ManagedObject
object) {
+ return Optional.ofNullable(object)
+ .flatMap(ManagedObject::getMemento);
+ }
+
+ default ObjectMemento mementifyElseFail(final @NonNull ManagedObject
object) {
+ return object.getMemento()
+ .orElseThrow(()->
+ _Exceptions.unrecoverable("failed to create memento for
%s", object.getSpecification()));
+ }
+
+ ManagedObject demementify(final ObjectSpecification spec, final
ObjectMemento memento);
// -- SHORTCUTS
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
index cf159221bd..c86a762cae 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
@@ -27,20 +27,22 @@ import
org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
+import org.apache.isis.core.metamodel.object.ManagedObject;
+import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
+import
org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService;
import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.val;
/**
- *
* @since 2.0
- *
*/
@Service
@Named(IsisModuleCoreMetamodel.NAMESPACE + ".ObjectManagerDefault")
@@ -52,12 +54,15 @@ public class ObjectManagerDefault implements ObjectManager {
@Getter(onMethod_ = {@Override})
private final MetaModelContext metaModelContext;
+ // resolve lazily (dependency cycle, simple JUnit support)
+ private _Lazy<ObjectMementoService> objectMementoService =
_Lazy.threadSafe(()->
+
getServiceRegistry().lookupServiceElseFail(ObjectMementoService.class));
+
@Getter(onMethod_ = {@Override}) private ObjectLoader objectLoader;
@Getter(onMethod_ = {@Override}) private ObjectBulkLoader objectBulkLoader;
@Getter(onMethod_ = {@Override}) private ObjectCreator objectCreator;
@Getter(onMethod_ = {@Override}) private ObjectBookmarker objectBookmarker;
@Getter(onMethod_ = {@Override}) private ObjectSerializer objectSerializer;
- @Getter(onMethod_ = {@Override}) private ObjectMemorizer objectMemorizer;
@PostConstruct
public void init() {
@@ -66,13 +71,15 @@ public class ObjectManagerDefault implements ObjectManager {
objectBulkLoader = ObjectBulkLoader.createDefault(metaModelContext);
objectBookmarker = ObjectBookmarker.createDefault();
objectSerializer = ObjectSerializer.createDefault(metaModelContext);
- objectMemorizer = ObjectMemorizer.createDefault(metaModelContext);
}
+ @Override
+ public ManagedObject demementify(final ObjectSpecification spec, final
ObjectMemento memento) {
+ return objectMementoService.get().reconstructObject(memento);
+ }
// JUnit support
public static ObjectManager forTesting(final MetaModelContext
metaModelContext) {
-
val objectManager = new ObjectManagerDefault(metaModelContext);
objectManager.init();
return objectManager;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
index 641d8d9db1..b861b7a2b2 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoCollection.java
@@ -29,9 +29,7 @@ import lombok.NonNull;
import lombok.Value;
/**
- *
* @since 2.0
- *
*/
@Value(staticConstructor = "of")
public final class ObjectMementoCollection implements ObjectMemento {
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
index a2a9b999f2..314d585458 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoForEmpty.java
@@ -27,6 +27,9 @@ import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
+/**
+ * @since 2.0
+ */
@RequiredArgsConstructor
public class ObjectMementoForEmpty implements ObjectMemento {
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
deleted file mode 100644
index dab2b85b0e..0000000000
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.objectmanager.memento;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-import lombok.NonNull;
-import lombok.Value;
-import lombok.val;
-
-public interface ObjectMemorizer {
-
- /**
- * Does both, serialize or deserialize, depending on the request's type.
- * @apiNote Rather use the more convenient specialized variants
- * {@link #serialize(ManagedObject)} and {@link
#deserialize(ObjectSpecification, ObjectMemento)}
- * @param request
- */
- BiForm serializeObject(BiForm request);
-
- default ManagedObject deserialize(final ObjectSpecification spec, final
ObjectMemento memento) {
- val request = BiForm.deSerializationRequest(SerializedObject.of(spec,
memento));
- val response = serializeObject(request);
- return response.getObject();
- }
-
- default ObjectMemento serialize(final ManagedObject object) {
- return Optional.ofNullable(object)
- .flatMap(ManagedObject::getMemento)
- .orElse(null);
- }
-
- @Value(staticConstructor = "of")
- static class SerializedObject {
- @NonNull private ObjectSpecification specification;
- @NonNull private ObjectMemento memento;
- }
-
- // -- BOTH, REQUEST AND RESPONSE OBJECT FOR THE HANDLER
-
- @Value(staticConstructor = "of")
- static class BiForm {
- @Nullable private ManagedObject object;
- @Nullable private SerializedObject serializedObject;
- public boolean isSerialized() { return serializedObject!=null; }
- public boolean isDeserialized() { return object!=null; }
- public static BiForm serializationRequest(final ManagedObject object) {
- return of(object, null);
- }
- public static BiForm deSerializationRequest(final SerializedObject
serializedObject) {
- return of(null, serializedObject);
- }
- public static BiForm serializationResponse(final SerializedObject
serializedObject) {
- return of(null, serializedObject);
- }
- public static BiForm deSerializationResponse(final ManagedObject
object) {
- return of(object, null);
- }
- public ObjectSpecification getSpecification() {
- return isDeserialized()
- ? object.getSpecification()
- : serializedObject.getSpecification();
- }
- }
-
- // -- HANDLER
-
- static interface Handler
- extends ChainOfResponsibility.Handler<BiForm, BiForm> {
-
- @Override
- default boolean isHandling(final BiForm request) {
- val spec = request.getSpecification();
- return isHandling(spec);
- }
-
- @Override
- default BiForm handle(final BiForm request) {
- val spec = request.getSpecification();
- if(request.isSerialized()) {
- val memento = request.getSerializedObject().getMemento();
- return BiForm.deSerializationResponse(deserialize(spec,
memento));
- } else {
- val memento = serialize(request.getObject());
- return BiForm.serializationResponse(SerializedObject.of(spec,
memento));
- }
- }
-
- boolean isHandling(ObjectSpecification spec);
- ManagedObject deserialize(ObjectSpecification spec, ObjectMemento
memento);
- ObjectMemento serialize(ManagedObject object);
- }
-
- // -- FACTORY
-
- public static ObjectMemorizer createDefault(final MetaModelContext
metaModelContext) {
-
- val serviceInjector = metaModelContext.getServiceInjector();
- val chainOfHandlers = List.<ObjectMemorizer.Handler>of(
- new
ObjectMemorizer_builtinHandlers.MemorizeViaObjectMementoService(),
- new ObjectMemorizer_builtinHandlers.MemorizeOther()
- );
-
- if(metaModelContext instanceof MetaModelContext_forTesting) {
- ((MetaModelContext_forTesting)(metaModelContext))
-
.registerPostconstruct(()->chainOfHandlers.forEach(serviceInjector::injectServicesInto));
- } else {
- chainOfHandlers.forEach(serviceInjector::injectServicesInto);
- }
-
- return request -> ChainOfResponsibility.of(chainOfHandlers)
- .handle(request);
- }
-
-}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer_builtinHandlers.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer_builtinHandlers.java
deleted file mode 100644
index 7fa31017e9..0000000000
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemorizer_builtinHandlers.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.objectmanager.memento;
-
-import javax.inject.Inject;
-
-import org.springframework.context.annotation.Lazy;
-
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.PackedManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-final class ObjectMemorizer_builtinHandlers {
-
- public static class MemorizeViaObjectMementoService implements
ObjectMemorizer.Handler {
-
- @Inject @Lazy private ObjectMementoService objectMementoService;
-
- @Override
- public boolean isHandling(final ObjectSpecification spec) {
- return !spec.getBeanSort().isUnknown()
- && !spec.getBeanSort().isAbstract();
- }
-
- @Override
- public ManagedObject deserialize(final ObjectSpecification spec, final
ObjectMemento memento) {
- return objectMementoService.reconstructObject(memento);
- }
-
- @Override
- public ObjectMemento serialize(final ManagedObject object) {
- return object instanceof PackedManagedObject
- ?
objectMementoService.mementoForMulti((PackedManagedObject)object)
- : objectMementoService.mementoForSingle(object);
- }
-
- }
-
- public static class MemorizeOther implements ObjectMemorizer.Handler {
-
- @Override
- public boolean isHandling(final ObjectSpecification spec) {
- return true; // the last handler in the chain
- }
-
- @Override
- public ObjectMemento serialize(final ManagedObject object) {
- throw _Exceptions.illegalArgument(
- "None of the registered ObjectMemorizers knows how to
serialize this object. "
- + "(when serializing pojo as held by ManagedObject %s)",
- object);
- }
-
- @Override
- public ManagedObject deserialize(final ObjectSpecification spec, final
ObjectMemento memento) {
- throw _Exceptions.illegalArgument(
- "None of the registered ObjectMemorizers knows how to
de-serialize "
- + "an object having ObjectSpecification %s",
- spec);
- }
-
- }
-
-}