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;