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);
-        }
-
-    }
-
-}

Reply via email to