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