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 2021/06/25 06:52:58 UTC
[isis] branch master updated: ISIS-1720: housekeeping: consolidate
managed-object utilities
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 c51b2aa ISIS-1720: housekeeping: consolidate managed-object utilities
c51b2aa is described below
commit c51b2aa045f84b7d1f9b29b04c6e824e3416cba6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 25 08:52:46 2021 +0200
ISIS-1720: housekeeping: consolidate managed-object utilities
---
.../isis/core/metamodel/spec/ManagedObject.java | 24 ++--
.../metamodel/spec/ManagedObjectInternalUtil.java | 153 ---------------------
.../isis/core/metamodel/spec/ManagedObjects.java | 120 ++++++++++++++++
.../core/metamodel/spec/ObjectSpecification.java | 16 ++-
4 files changed, 144 insertions(+), 169 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 99562cc..3ef625e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -74,16 +75,21 @@ public interface ManagedObject {
}
default String titleString(final @NonNull Predicate<ManagedObject> isContextAdapter) {
- return ManagedObjectInternalUtil.titleString(this, isContextAdapter);
+ return ManagedObjects.TitleUtil.titleString(this, isContextAdapter);
}
- // -- SHORTCUT - OBJECT MANAGER
+ // -- SHORTCUTS - MM CONTEXT
- default ObjectManager getObjectManager() {
- return ManagedObjectInternalUtil.objectManager(this)
+ default MetaModelContext getMetaModelContext() {
+ return ManagedObjects.spec(this)
+ .map(ObjectSpecification::getMetaModelContext)
.orElseThrow(()->_Exceptions
- .illegalArgument("Can only retrieve ObjectManager from ManagedObjects "
- + "that are 'specified'."));
+ .illegalArgument("Can only retrieve MetaModelContext from ManagedObjects "
+ + "that have an ObjectSpecification."));
+ }
+
+ default ObjectManager getObjectManager() {
+ return getMetaModelContext().getObjectManager();
}
// -- SHORTCUT - ELEMENT SPECIFICATION
@@ -180,7 +186,7 @@ public interface ManagedObject {
/** has no ObjectSpecification and no value (pojo) */
static ManagedObject unspecified() {
- return ManagedObjectInternalUtil.UNSPECIFIED;
+ return ManagedObjects.UNSPECIFIED;
}
/** has an ObjectSpecification, but no value (pojo) */
@@ -215,7 +221,7 @@ public interface ManagedObject {
// -- LAZY ID HANDLING
private final _Lazy<Optional<Bookmark>> bookmarkLazy =
- _Lazy.threadSafe(()->ManagedObjectInternalUtil.bookmark(this));
+ _Lazy.threadSafe(()->ManagedObjects.BookmarkUtil.bookmark(this));
@Override
public boolean isBookmarkMemoized() {
@@ -240,7 +246,7 @@ public interface ManagedObject {
// -- LAZY ID HANDLING
private final _Lazy<Optional<Bookmark>> bookmarkLazy =
- _Lazy.threadSafe(()->ManagedObjectInternalUtil.bookmark(this));
+ _Lazy.threadSafe(()->ManagedObjects.BookmarkUtil.bookmark(this));
@Override
public boolean isBookmarkMemoized() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjectInternalUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjectInternalUtil.java
deleted file mode 100644
index f28917e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjectInternalUtil.java
+++ /dev/null
@@ -1,153 +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.spec;
-
-import java.util.Optional;
-import java.util.function.Predicate;
-
-import javax.annotation.Nullable;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
-
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * @since 2.0
- */
-@UtilityClass
-@Log4j2
-final class ManagedObjectInternalUtil {
-
-
- static final ManagedObject UNSPECIFIED = new ManagedObject() {
-
- @Override
- public ObjectSpecification getSpecification() {
- throw _Exceptions.unsupportedOperation();
- }
-
- @Override
- public Object getPojo() {
- return null;
- }
-
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty();
- }
-
- @Override
- public boolean isBookmarkMemoized() {
- return false;
- }
-
- };
-
- static Optional<ObjectManager> objectManager(final @Nullable ManagedObject adapter) {
- return ManagedObjects.spec(adapter)
- .map(ObjectSpecification::getMetaModelContext)
- .map(MetaModelContext::getObjectManager);
- }
-
- static Optional<Bookmark> bookmark(final @Nullable ManagedObject adapter) {
-
- if(!ManagedObjects.isIdentifiable(adapter)
- && ManagedObjects.isSpecified(adapter)) {
- log.warn("about to create a random UUID bookmark for {}; this is probably an invalid code-path taken (TODO)",
- adapter.getSpecification());
- }
-
- return objectManager(adapter)
- .map(objectManager->objectManager.bookmarkObject(adapter));
-
-//TODO[2686] strictly forbid dummy UUID bookmark creation
-// return ManagedObjects.isIdentifiable(adapter)
-// ? objectManager(adapter)
-// .map(objectManager->objectManager.bookmarkObject(adapter))
-// : Optional.empty();
- }
-
- // -- TITLE SUPPORT
-
- static String titleString(
- final @Nullable ManagedObject managedObject,
- final @NonNull Predicate<ManagedObject> isContextAdapter) {
-
- if(!ManagedObjects.isSpecified(managedObject)) {
- return "unspecified object";
- }
-
- if (managedObject.getSpecification().isParentedOrFreeCollection()) {
- final CollectionFacet facet = managedObject.getSpecification().getFacet(CollectionFacet.class);
- return collectionTitleString(managedObject, facet);
- } else {
- return objectTitleString(managedObject, isContextAdapter);
- }
- }
-
- private static String objectTitleString(ManagedObject managedObject, Predicate<ManagedObject> isContextAdapter) {
- if (managedObject.getPojo() instanceof String) {
- return (String) managedObject.getPojo();
- }
- val spec = managedObject.getSpecification();
- return Optional.ofNullable(spec.getTitle(isContextAdapter, managedObject))
- .orElseGet(()->getDefaultTitle(managedObject));
- }
-
- private static String collectionTitleString(ManagedObject managedObject, final CollectionFacet facet) {
- final int size = facet.size(managedObject);
- final ObjectSpecification elementSpecification = managedObject.getElementSpecification().orElse(null);
- if (elementSpecification == null || elementSpecification.getFullIdentifier().equals(Object.class.getName())) {
- switch (size) {
- case -1:
- return "Objects";
- case 0:
- return "No objects";
- case 1:
- return "1 object";
- default:
- return size + " objects";
- }
- } else {
- switch (size) {
- case -1:
- return elementSpecification.getPluralName();
- case 0:
- return "No " + elementSpecification.getPluralName();
- case 1:
- return "1 " + elementSpecification.getSingularName();
- default:
- return size + " " + elementSpecification.getPluralName();
- }
- }
- }
-
- private static String getDefaultTitle(ManagedObject managedObject) {
- return "A" + (" " + managedObject.getSpecification().getSingularName()).toLowerCase();
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index c8e1935..a7a9ac1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -52,6 +52,7 @@ import org.apache.isis.core.metamodel.commons.ClassExtensions;
import org.apache.isis.core.metamodel.commons.MethodExtensions;
import org.apache.isis.core.metamodel.commons.MethodUtil;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStandard;
@@ -411,6 +412,125 @@ public final class ManagedObjects {
return result;
}
+ // -- UNSPECIFIED OBJECT
+
+ static final ManagedObject UNSPECIFIED = new ManagedObject() {
+
+ @Override
+ public ObjectSpecification getSpecification() {
+ throw _Exceptions.unsupportedOperation();
+ }
+
+ @Override
+ public Object getPojo() {
+ return null;
+ }
+
+ @Override
+ public Optional<Bookmark> getBookmark() {
+ return Optional.empty();
+ }
+
+ @Override
+ public boolean isBookmarkMemoized() {
+ return false;
+ }
+
+ };
+
+ // -- TITLE UTILITIES
+
+ @UtilityClass
+ static final class TitleUtil {
+
+ // -- TITLE SUPPORT
+
+ String titleString(
+ final @Nullable ManagedObject managedObject,
+ final @NonNull Predicate<ManagedObject> isContextAdapter) {
+
+ if(!ManagedObjects.isSpecified(managedObject)) {
+ return "unspecified object";
+ }
+
+ if (managedObject.getSpecification().isParentedOrFreeCollection()) {
+ final CollectionFacet facet = managedObject.getSpecification().getFacet(CollectionFacet.class);
+ return collectionTitleString(managedObject, facet);
+ } else {
+ return objectTitleString(managedObject, isContextAdapter);
+ }
+ }
+
+ // -- HELPER
+
+ private String objectTitleString(final ManagedObject managedObject, final Predicate<ManagedObject> isContextAdapter) {
+ if (managedObject.getPojo() instanceof String) {
+ return (String) managedObject.getPojo();
+ }
+ val spec = managedObject.getSpecification();
+ return Optional.ofNullable(spec.getTitle(isContextAdapter, managedObject))
+ .orElseGet(()->getDefaultTitle(managedObject));
+ }
+
+ private String collectionTitleString(final ManagedObject managedObject, final CollectionFacet facet) {
+ final int size = facet.size(managedObject);
+ final ObjectSpecification elementSpecification = managedObject.getElementSpecification().orElse(null);
+ if (elementSpecification == null || elementSpecification.getFullIdentifier().equals(Object.class.getName())) {
+ switch (size) {
+ case -1:
+ return "Objects";
+ case 0:
+ return "No objects";
+ case 1:
+ return "1 object";
+ default:
+ return size + " objects";
+ }
+ } else {
+ switch (size) {
+ case -1:
+ return elementSpecification.getPluralName();
+ case 0:
+ return "No " + elementSpecification.getPluralName();
+ case 1:
+ return "1 " + elementSpecification.getSingularName();
+ default:
+ return size + " " + elementSpecification.getPluralName();
+ }
+ }
+ }
+
+ private String getDefaultTitle(final ManagedObject managedObject) {
+ return "A" + (" " + managedObject.getSpecification().getSingularName()).toLowerCase();
+ }
+ }
+
+ // -- BOOKMARK UTILITIES
+
+ @UtilityClass
+ static final class BookmarkUtil {
+
+ Optional<Bookmark> bookmark(final @Nullable ManagedObject adapter) {
+
+ if(!ManagedObjects.isIdentifiable(adapter)
+ && ManagedObjects.isSpecified(adapter)) {
+ log.warn("about to create a random UUID bookmark for {}; this is probably an invalid code-path taken (TODO)",
+ adapter.getSpecification());
+ }
+
+ return ManagedObjects.spec(adapter)
+ .map(ObjectSpecification::getMetaModelContext)
+ .map(MetaModelContext::getObjectManager)
+ .map(objectManager->objectManager.bookmarkObject(adapter));
+
+ //TODO[2686] strictly forbid dummy UUID bookmark creation
+// return ManagedObjects.isIdentifiable(adapter)
+// ? objectManager(adapter)
+// .map(objectManager->objectManager.bookmarkObject(adapter))
+// : Optional.empty();
+ }
+ }
+
// -- ENTITY UTILITIES
@UtilityClass
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index cf12d39..7f47fc0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -46,6 +46,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.all.described.DescribedAsFacet;
import org.apache.isis.core.metamodel.facets.all.help.HelpFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.all.i8n.HasTranslation;
import org.apache.isis.core.metamodel.facets.all.i8n.NounForm;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
@@ -166,19 +167,20 @@ extends
/**
* Returns the (singular) name for objects of this specification.
- *
* <p>
- * Corresponds to the {@link NamedFacet#translated(NounForm)} of {@link NamedFacet}; is
+ * Corresponds to the {@link HasTranslation#translated(NounForm)}
+ * with {@link NounForm#SINGULAR}
+ * of {@link NamedFacet}; is
* not necessarily immutable.
*/
String getSingularName();
/**
* Returns the plural name for objects of this specification.
- *
- * <p>
- * Corresponds to the {@link PluralFacet#value() value} of
- * {@link PluralFacet}; is not necessarily immutable.
+ * Corresponds to the {@link HasTranslation#translated(NounForm)}
+ * with {@link NounForm#PLURAL}
+ * of {@link NamedFacet}; is
+ * not necessarily immutable.
*/
String getPluralName();
@@ -186,7 +188,7 @@ extends
* Returns the description, if any, of the specification.
*
* <p>
- * Corresponds to the {@link DescribedAsFacet#translated() value} of
+ * Corresponds to the {@link HasTranslation#preferredTranslated() value} of
* {@link DescribedAsFacet}; is not necessarily immutable.
*/
@Override