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 ca3b7c607d ISIS-3199: remove ObjectDetacher; do it directly instead
ca3b7c607d is described below

commit ca3b7c607da172fa113ede5aed2e272d433903d1
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 5 05:56:35 2022 +0200

    ISIS-3199: remove ObjectDetacher; do it directly instead
---
 .../metamodel/objectmanager/ObjectManager.java     |   2 -
 .../objectmanager/ObjectManagerDefault.java        |   3 -
 .../objectmanager/detach/ObjectDetacher.java       |  57 ------------
 .../detach/ObjectDetacher_builtinHandlers.java     | 103 ---------------------
 .../repository/RepositoryServiceDefault.java       |  14 ++-
 5 files changed, 11 insertions(+), 168 deletions(-)

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 82a1240ac7..d87f17304c 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
@@ -30,7 +30,6 @@ import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.objectmanager.detach.ObjectDetacher;
 import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
@@ -59,7 +58,6 @@ public interface ObjectManager {
     ObjectBulkLoader getObjectBulkLoader();
     ObjectBookmarker getObjectBookmarker();
     ObjectRefresher getObjectRefresher();
-    ObjectDetacher getObjectDetacher();
     ObjectSerializer getObjectSerializer();
     ObjectMemorizer getObjectMemorizer();
 
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 edd62be56f..051117e666 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
@@ -29,7 +29,6 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.objectmanager.detach.ObjectDetacher;
 import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
@@ -60,7 +59,6 @@ public class ObjectManagerDefault implements ObjectManager {
     @Getter(onMethod_ = {@Override}) private ObjectCreator objectCreator;
     @Getter(onMethod_ = {@Override}) private ObjectBookmarker objectBookmarker;
     @Getter(onMethod_ = {@Override}) private ObjectRefresher objectRefresher;
-    @Getter(onMethod_ = {@Override}) private ObjectDetacher objectDetacher;
     @Getter(onMethod_ = {@Override}) private ObjectSerializer objectSerializer;
     @Getter(onMethod_ = {@Override}) private ObjectMemorizer objectMemorizer;
 
@@ -71,7 +69,6 @@ public class ObjectManagerDefault implements ObjectManager {
         objectBulkLoader = ObjectBulkLoader.createDefault(metaModelContext);
         objectBookmarker = ObjectBookmarker.createDefault();
         objectRefresher = ObjectRefresher.createDefault();
-        objectDetacher = ObjectDetacher.createDefault(metaModelContext);
         objectSerializer = ObjectSerializer.createDefault(metaModelContext);
         objectMemorizer = ObjectMemorizer.createDefault(metaModelContext);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher.java
deleted file mode 100644
index cb1d04b39a..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher.java
+++ /dev/null
@@ -1,57 +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.detach;
-
-import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-
-/**
- *
- * @since 2.0
- *
- */
-public interface ObjectDetacher {
-
-    ManagedObject detachObject(ManagedObject managedObject);
-
-    // -- HANDLER
-
-    static interface Handler
-    extends
-        ChainOfResponsibility.Handler<ManagedObject, ManagedObject> {
-    }
-
-    // -- FACTORY
-
-    public static ObjectDetacher createDefault(final MetaModelContext 
metaModelContext) {
-        return request ->
-        ChainOfResponsibility.named(
-                "ObjectDetacher",
-                _Lists.of(
-                        new ObjectDetacher_builtinHandlers.GuardAgainstNull(),
-                        new 
ObjectDetacher_builtinHandlers.DetachEntity(metaModelContext),
-                        new ObjectDetacher_builtinHandlers.DetachOther()))
-            .handle(request);
-
-    }
-
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher_builtinHandlers.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher_builtinHandlers.java
deleted file mode 100644
index b20094fd28..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/detach/ObjectDetacher_builtinHandlers.java
+++ /dev/null
@@ -1,103 +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.detach;
-
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-
-import lombok.Data;
-import lombok.val;
-
-/**
- *
- * @since 2.0
- *
- */
-final class ObjectDetacher_builtinHandlers {
-
-    // -- NULL GUARD
-
-    @Data
-    public static class GuardAgainstNull implements ObjectDetacher.Handler {
-
-        private MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ManagedObject managedObject) {
-
-            if(managedObject==null || managedObject.getPojo()==null) {
-                return true;
-            }
-
-            return false;
-        }
-
-        @Override
-        public ManagedObject handle(final ManagedObject managedObject) {
-            return null; // noop
-        }
-
-    }
-
-    @Data
-    public static class DetachEntity implements ObjectDetacher.Handler {
-
-        private final MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ManagedObject request) {
-            val spec = request.getSpecification();
-            return spec.isEntity();
-        }
-
-        @Override
-        public ManagedObject handle(final ManagedObject request) {
-
-            val spec = request.getSpecification();
-            val entityFacet = spec.entityFacetElseFail();
-
-            Object detachedPojo = entityFacet.detach(request.getPojo());
-
-            // we assume that we don't need to inject services again, because 
this should
-            // already have been done, when the entity object got fetched with 
the ObjectLoader
-
-            return metaModelContext.getObjectManager().adapt(detachedPojo);
-        }
-
-    }
-
-    @Data
-    public static class DetachOther implements ObjectDetacher.Handler {
-
-        @Override
-        public boolean isHandling(final ManagedObject request) {
-            // if no one else feels responsible, we do
-            return true;
-        }
-
-        @Override
-        public ManagedObject handle(final ManagedObject request) {
-            return request;
-        }
-
-    }
-
-
-
-}
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
index c861fe4257..87c307623d 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
@@ -51,6 +51,7 @@ import org.apache.isis.core.metamodel.object.MmEntityUtil;
 import org.apache.isis.core.metamodel.object.MmUnwrapUtil;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 
 import lombok.NonNull;
@@ -224,9 +225,16 @@ public class RepositoryServiceDefault implements 
RepositoryService {
 
     @Override
     public <T> T detach(final T entity) {
-        val managedObject = objectManager.adapt(entity);
-        val managedDetachedObject = 
objectManager.getObjectDetacher().detachObject(managedObject);
-        return _Casts.uncheckedCast(managedDetachedObject.getPojo());
+        if(entity==null) { return null; }
+
+        val mmc = objectManager.getMetaModelContext();
+
+        return mmc.getSpecificationLoader()
+        .specForType(entity.getClass())
+        .flatMap(ObjectSpecification::entityFacet)
+        .map(entityFacet->entityFacet.detach(entity))
+        .map(mmc.getServiceInjector()::injectServicesInto) // just in case
+        .orElse(entity);
     }
 
     @Override

Reply via email to