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 03:13:56 UTC
[isis] 02/02: ISIS-3199: simplify ObjectBookmarker
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
commit f40ecae87c8f8bb6a48767b31e904376bb32fe36
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 5 05:13:48 2022 +0200
ISIS-3199: simplify ObjectBookmarker
---
.../metamodel/object/_ManagedObjectViewmodel.java | 20 +--
.../metamodel/objectmanager/ObjectBookmarker.java | 89 +++++++++++++
.../metamodel/objectmanager/ObjectManager.java | 1 -
.../objectmanager/ObjectManagerDefault.java | 1 -
.../objectmanager/identify/ObjectBookmarker.java | 60 ---------
.../identify/ObjectBookmarker_builtinHandlers.java | 141 ---------------------
6 files changed, 92 insertions(+), 220 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectViewmodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectViewmodel.java
index 555d6332db..e461326085 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectViewmodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectViewmodel.java
@@ -30,7 +30,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.debug._XrayEvent;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
@@ -51,7 +50,7 @@ implements
@Nullable private /*final*/ Object pojo;
protected final _Lazy<Optional<Bookmark>> bookmarkLazy =
- _Lazy.threadSafe(()->bookmark(this));
+ _Lazy.threadSafe(()->createBookmark());
_ManagedObjectViewmodel(
final ObjectSpecification spec,
@@ -88,21 +87,8 @@ implements
bookmarkLazy.set(Optional.ofNullable(replacer.apply(old)));
}
- // guards against non-identifiable objects;
- // historically, we allowed non-identifiable to be handled by the objectManager,
- // which as a fallback creates 'random' UUIDs
- private Optional<Bookmark> bookmark(final @Nullable ManagedObject adapter) {
-
- if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
- || adapter.getSpecification().isValue()
- || !ManagedObjects.isIdentifiable(adapter)) {
- return Optional.empty();
- }
-
- return ManagedObjects.spec(adapter)
- .map(ObjectSpecification::getMetaModelContext)
- .map(MetaModelContext::getObjectManager)
- .flatMap(objectManager->objectManager.bookmarkObject(adapter));
+ private Optional<Bookmark> createBookmark() {
+ return Optional.ofNullable(getSpecification().viewmodelFacetElseFail().serializeToBookmark(this));
}
// -- REFRESH OPTIMIZATION
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBookmarker.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBookmarker.java
new file mode 100644
index 0000000000..f1c92af48e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectBookmarker.java
@@ -0,0 +1,89 @@
+/*
+ * 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 java.util.Optional;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.Oid;
+import org.apache.isis.commons.handler.ChainOfResponsibility;
+import org.apache.isis.core.metamodel.object.Bookmarkable;
+import org.apache.isis.core.metamodel.object.ManagedObject;
+
+/**
+ * @since 2.0
+ */
+public interface ObjectBookmarker {
+
+ Optional<Bookmark> bookmarkObject(ManagedObject managedObject);
+
+ // -- HANDLER
+
+ public interface Handler extends ChainOfResponsibility.Handler<ManagedObject, Optional<Bookmark>> {}
+
+ // -- FACTORY
+
+ public static ObjectBookmarker createDefault() {
+ return managedObject ->
+ ChainOfResponsibility.named(
+ "ObjectBookmarker",
+ handlers)
+ .handle(managedObject);
+ }
+
+ // -- HANDLERS
+
+ static final List<Handler> handlers = List.of(BuiltinHandlers.values());
+
+ enum BuiltinHandlers implements Handler {
+ GuardAgainstOid {
+ @Override public boolean isHandling(final ManagedObject managedObject) {
+ return managedObject.getPojo() instanceof Oid;
+ }
+ @Override
+ public Optional<Bookmark> handle(final ManagedObject managedObject) {
+ throw new IllegalArgumentException("Cannot create a Bookmark for pojo, "
+ + "when pojo is instance of Bookmark. You might want to ask "
+ + "ObjectAdapterByIdProvider for an ObjectAdapter instead.");
+ }
+ },
+ BookmarkForBookmarkable {
+ @Override
+ public boolean isHandling(final ManagedObject managedObject) {
+ return managedObject instanceof Bookmarkable;
+ }
+ @Override
+ public Optional<Bookmark> handle(final ManagedObject managedObject) {
+ return managedObject.getBookmark();
+ }
+ },
+ BookmarkForOthers {
+ @Override
+ public boolean isHandling(final ManagedObject managedObject) {
+ return true; // try to handle anything
+ }
+ @Override
+ public Optional<Bookmark> handle(final ManagedObject managedObject) {
+ return Optional.empty();
+ }
+ };
+ }
+
+}
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 9e35cd752c..5e66ca88d3 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.MetaModelContext;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.objectmanager.create.ObjectCreator;
import org.apache.isis.core.metamodel.objectmanager.detach.ObjectDetacher;
-import org.apache.isis.core.metamodel.objectmanager.identify.ObjectBookmarker;
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;
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 eb8e58db25..29165f0e72 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
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.objectmanager.create.ObjectCreator;
import org.apache.isis.core.metamodel.objectmanager.detach.ObjectDetacher;
-import org.apache.isis.core.metamodel.objectmanager.identify.ObjectBookmarker;
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;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker.java
deleted file mode 100644
index 125ce1b609..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker.java
+++ /dev/null
@@ -1,60 +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.identify;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-
-/**
- * @since 2.0
- */
-public interface ObjectBookmarker {
-
- Optional<Bookmark> bookmarkObject(ManagedObject managedObject);
-
- // -- HANDLER
-
- public interface Handler extends ChainOfResponsibility.Handler<ManagedObject, Optional<Bookmark>> {}
-
- // -- FACTORY
-
- public static ObjectBookmarker createDefault() {
- return managedObject ->
- ChainOfResponsibility.named(
- "ObjectBookmarker",
- handlers)
- .handle(managedObject);
- }
-
- static final List<Handler> handlers =
- _Lists.of(
- new ObjectBookmarker_builtinHandlers.GuardAgainstOid(),
- new ObjectBookmarker_builtinHandlers.BookmarkForNonScalar(),
- new ObjectBookmarker_builtinHandlers.BookmarkForServices(),
- new ObjectBookmarker_builtinHandlers.BookmarkForValues(),
- new ObjectBookmarker_builtinHandlers.BookmarkForViewModels(),
- new ObjectBookmarker_builtinHandlers.BookmarkForEntities(),
- new ObjectBookmarker_builtinHandlers.BookmarkForOthers());
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker_builtinHandlers.java
deleted file mode 100644
index 491497826e..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectBookmarker_builtinHandlers.java
+++ /dev/null
@@ -1,141 +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.identify;
-
-import java.util.Optional;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.Oid;
-import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.core.metamodel.object.PackedManagedObject;
-import org.apache.isis.core.metamodel.objectmanager.identify.ObjectBookmarker.Handler;
-
-import lombok.SneakyThrows;
-import lombok.val;
-
-class ObjectBookmarker_builtinHandlers {
-
- static class GuardAgainstOid implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject.getPojo() instanceof Oid;
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- throw new IllegalArgumentException("Cannot create a Bookmark for pojo, "
- + "when pojo is instance of Bookmark. You might want to ask "
- + "ObjectAdapterByIdProvider for an ObjectAdapter instead.");
- }
-
- }
-
- static class BookmarkForNonScalar implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject instanceof PackedManagedObject;
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- return Optional.empty();
- }
-
- }
-
- static class BookmarkForServices implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject.getSpecialization().isService();
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- return managedObject.getBookmark();
- }
- }
-
- static class BookmarkForEntities implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject.getSpecialization().isEntity();
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- return managedObject.getBookmark(); // could be empty that is detached or transient
- }
-
- }
-
- static class BookmarkForValues implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject.getSpecialization().isValue();
- }
-
- @SneakyThrows
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- _Assert.assertTrue(managedObject.isBookmarkSupported(), ()->"is bookmarkable");
- return managedObject.getBookmark();
- }
-
- }
-
- static class BookmarkForViewModels implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return managedObject.getSpecialization().isViewmodel();
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
-
- if(managedObject.isBookmarkMemoized()) {
- return managedObject.getBookmark();
- }
-
- val spec = managedObject.getSpecification();
- return Optional.ofNullable(spec.viewmodelFacetElseFail().serializeToBookmark(managedObject));
- }
-
- }
-
- static class BookmarkForOthers implements Handler {
-
- @Override
- public boolean isHandling(final ManagedObject managedObject) {
- return true; // try to handle anything
- }
-
- @Override
- public Optional<Bookmark> handle(final ManagedObject managedObject) {
- return Optional.empty();
- }
- }
-
-}