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/09/05 15:04:06 UTC

[isis] branch master updated: ISIS-3199: refactor built-in ObjectBulkLoader Handlers into static list

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 be42626a97 ISIS-3199: refactor built-in ObjectBulkLoader Handlers into static list
be42626a97 is described below

commit be42626a9747784b21dca8de54750c21588f3048
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 5 17:04:00 2022 +0200

    ISIS-3199: refactor built-in ObjectBulkLoader Handlers into static list
---
 .../choices/ChoicesFacetFromBoundedAbstract.java   |   2 +-
 .../metamodel/objectmanager/ObjectBulkLoader.java  | 121 ++++++++++++++++++++
 .../metamodel/objectmanager/ObjectManager.java     |   3 +-
 .../objectmanager/ObjectManagerDefault.java        |   1 -
 .../objectmanager/query/ObjectBulkLoader.java      |  68 -----------
 .../query/ObjectBulkLoader_builtinHandlers.java    | 125 ---------------------
 .../repository/RepositoryServiceDefault.java       |   2 +-
 7 files changed, 125 insertions(+), 197 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
index d9af48b5f3..33ec39a2b0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.MmVisibilityUtil;
-import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
+import org.apache.isis.core.metamodel.objectmanager.ObjectBulkLoader;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import lombok.SneakyThrows;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBulkLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBulkLoader.java
new file mode 100644
index 0000000000..74d3f913ef
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBulkLoader.java
@@ -0,0 +1,121 @@
+/*
+ *  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;
+
+import java.util.List;
+
+import org.apache.isis.applib.query.Query;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.handler.ChainOfResponsibility;
+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.spec.ObjectSpecification;
+
+import lombok.Value;
+import lombok.val;
+
+/**
+ * @since 2.0
+ */
+public interface ObjectBulkLoader {
+
+    Can<ManagedObject> loadObject(Request objectQuery);
+
+    // -- REQUEST (VALUE) TYPE
+
+    @Value(staticConstructor = "of")
+    public static class Request {
+        ObjectSpecification objectSpecification;
+        Query<?> query;
+    }
+
+    // -- HANDLER
+
+    static interface Handler
+    extends
+        ChainOfResponsibility.Handler<ObjectBulkLoader.Request, Can<ManagedObject>> {
+    }
+
+    // -- FACTORY
+
+    public static ObjectBulkLoader createDefault(final MetaModelContext mmc) {
+        return request ->
+            ChainOfResponsibility.named(
+                    "ObjectBulkLoader",
+                    handlers)
+                .handle(request);
+    }
+
+    // -- HANDLERS
+
+    static final List<Handler> handlers = List.of(BuiltinHandlers.values());
+
+    enum BuiltinHandlers implements Handler {
+        GuardAgainstNull {
+            @Override
+            public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
+                if(objectQuery==null) {
+                    return true;
+                }
+                val spec = objectQuery.getObjectSpecification();
+                if(spec == null) {
+                    // eg "NONEXISTENT:123"
+                    return true;
+                }
+                // we don't guard against the identifier being null, because, this is ok
+                // for services and values
+                return false;
+            }
+            @Override
+            public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
+                return Can.empty();
+            }
+        },
+        BulkLoadEntity {
+            @Override
+            public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
+                val spec = objectQuery.getObjectSpecification();
+                return spec.isEntity();
+            }
+            @Override
+            public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
+                val spec = objectQuery.getObjectSpecification();
+                val entityFacet = spec.entityFacetElseFail();
+                val entities = entityFacet.fetchByQuery(objectQuery.getQuery());
+                return entities;
+            }
+        },
+        LoadOther {
+            @Override
+            public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
+                return true; // the last handler in the chain
+            }
+
+            @Override
+            public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
+                // unknown object load request
+                throw _Exceptions.illegalArgument(
+                        "unknown bulk object load request, loader: %s loading ObjectSpecification %s",
+                            this.getClass().getName(), objectQuery.getObjectSpecification());
+            }
+        }
+    }
+
+}
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 b682900b55..d0ef9e9764 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
@@ -32,7 +32,6 @@ 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.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;
 
@@ -69,7 +68,9 @@ public interface ObjectManager extends HasMetaModelContext {
                     _Exceptions.unrecoverable("failed to create memento for  %s", object.getSpecification()));
     }
 
+    //FIXME why not use loadObject(bookmark) instead
     ManagedObject demementify(final ObjectMemento memento);
+    //FIXME why not use loadObject(bookmark) instead
     default ManagedObject demementify(final ObjectSpecification spec, final ObjectMemento memento) {
         return demementify(memento);
     }
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 9680b90de7..118c857364 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
@@ -37,7 +37,6 @@ import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoCollection;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForScalar;
-import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
 import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
 
 import lombok.Getter;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader.java
deleted file mode 100644
index 805dbf7ae9..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader.java
+++ /dev/null
@@ -1,68 +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.query;
-
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.context.HasMetaModelContext;
-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.Value;
-
-/**
- * @since 2.0
- */
-public interface ObjectBulkLoader {
-
-    Can<ManagedObject> loadObject(Request objectQuery);
-
-    // -- REQUEST (VALUE) TYPE
-
-    @Value(staticConstructor = "of")
-    public static class Request {
-        ObjectSpecification objectSpecification;
-        Query<?> query;
-    }
-
-    // -- HANDLER
-
-    static interface Handler
-    extends
-        HasMetaModelContext,
-        ChainOfResponsibility.Handler<ObjectBulkLoader.Request, Can<ManagedObject>> {
-    }
-
-    // -- FACTORY
-
-    public static ObjectBulkLoader createDefault(final MetaModelContext mmc) {
-        return request ->
-            ChainOfResponsibility.named(
-                    "ObjectBulkLoader",
-                    _Lists.of(
-                            new ObjectBulkLoader_builtinHandlers.GuardAgainstNull(mmc),
-                            new ObjectBulkLoader_builtinHandlers.BulkLoadEntity(mmc),
-                            new ObjectBulkLoader_builtinHandlers.LoadOther(mmc)))
-                .handle(request);
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader_builtinHandlers.java
deleted file mode 100644
index e632428813..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/query/ObjectBulkLoader_builtinHandlers.java
+++ /dev/null
@@ -1,125 +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.query;
-
-import org.apache.isis.commons.collections.Can;
-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 lombok.NonNull;
-import lombok.Value;
-import lombok.val;
-
-/**
- *
- * @since 2.0
- *
- */
-final class ObjectBulkLoader_builtinHandlers {
-
-    // -- NULL GUARD
-
-    @Value
-    public static class GuardAgainstNull implements ObjectBulkLoader.Handler {
-
-        private final @NonNull MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
-
-            if(objectQuery==null) {
-                return true;
-            }
-
-            val spec = objectQuery.getObjectSpecification();
-            if(spec == null) {
-                // eg "NONEXISTENT:123"
-                return true;
-            }
-
-            // we don't guard against the identifier being null, because, this is ok
-            // for services and values
-            return false;
-        }
-
-        @Override
-        public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
-            return Can.empty();
-        }
-
-    }
-
-    // -- ENTITIES
-
-    @Value
-    public static class BulkLoadEntity implements ObjectBulkLoader.Handler {
-
-        private final @NonNull MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
-
-            val spec = objectQuery.getObjectSpecification();
-            return spec.isEntity();
-        }
-
-        @Override
-        public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
-
-            val spec = objectQuery.getObjectSpecification();
-            val entityFacet = spec.entityFacetElseFail();
-
-            val entities = entityFacet.fetchByQuery(objectQuery.getQuery());
-            val serviceInjector = metaModelContext.getServiceInjector();
-
-            //TODO injection should have already be done by DataNucleus
-            //especially since we fixed https://issues.apache.org/jira/browse/ISIS-2845
-            entities.map(ManagedObject::getPojo).forEach(serviceInjector::injectServicesInto);
-            return entities;
-        }
-
-    }
-
-    // -- UNKNOWN LOAD REQUEST
-
-    @Value
-    public static class LoadOther implements ObjectBulkLoader.Handler {
-
-        private final @NonNull MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ObjectBulkLoader.Request objectQuery) {
-            return true; // the last handler in the chain
-        }
-
-        @Override
-        public Can<ManagedObject> handle(final ObjectBulkLoader.Request objectQuery) {
-
-            // unknown object load request
-
-            throw _Exceptions.illegalArgument(
-                    "unknown bulk object load request, loader: %s loading ObjectSpecification %s",
-                        this.getClass().getName(), objectQuery.getObjectSpecification());
-
-        }
-
-    }
-
-}
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 9ad3df3915..319104ad75 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
@@ -52,7 +52,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.MmEntityUtil;
 import org.apache.isis.core.metamodel.object.MmUnwrapUtil;
-import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
+import org.apache.isis.core.metamodel.objectmanager.ObjectBulkLoader;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;