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 ec452b50e5 ISIS-3167: refactors bookmarkable specifics into their own
interface
ec452b50e5 is described below
commit ec452b50e5b7c2f49cc53930a602aed51a23cf8b
Author: Andi Huber <[email protected]>
AuthorDate: Thu Sep 1 04:49:30 2022 +0200
ISIS-3167: refactors bookmarkable specifics into their own interface
---
.../isis/core/metamodel/object/Bookmarkable.java | 64 ++++++++++++++++++++++
.../isis/core/metamodel/object/ManagedObject.java | 54 ++++++++----------
.../core/metamodel/object/_ManagedObjectEmpty.java | 19 +------
.../core/metamodel/object/_ManagedObjectMixin.java | 19 +------
...edObjectEmpty.java => _ManagedObjectOther.java} | 48 +++++++---------
.../metamodel/object/_ManagedObjectPacked.java | 20 +------
.../object/_ManagedObjectUnspecified.java | 18 +-----
7 files changed, 114 insertions(+), 128 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
new file mode 100644
index 0000000000..69ce59eb42
--- /dev/null
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java
@@ -0,0 +1,64 @@
+/*
+ * 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.object;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import
org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+
+public interface Bookmarkable {
+
+ BookmarkPolicy getBookmarkPolicy();
+
+ default boolean isBookmarkSupported() {
+ return !getBookmarkPolicy().isNoBookmark();
+ }
+
+ /**
+ * Returns the object's bookmark as identified by the {@link
ObjectManager}.
+ * Bookmarks are immutable, hence will be memoized once fetched.
+ */
+ Optional<Bookmark> getBookmark();
+
+ boolean isBookmarkMemoized();
+
+ /**
+ * Similar to {@link #getBookmark()}, but invalidates any memoized {@link
Bookmark}
+ * such that the {@link Bookmark} returned is recreated, reflecting the
object's current state.
+ * @implNote
+ * As this is not required, in fact not recommended for entities,
+ * (but might be necessary for viewmodels, when their state has changed),
+ * we silently ignore bookmark invalidation attempts for entities.
+ */
+ Optional<Bookmark> getBookmarkRefreshed();
+
+ /**
+ * Implements {@link Bookmarkable} reflecting
+ * {@link
org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK}
+ */
+ static interface NoBookmark extends Bookmarkable {
+ @Override default boolean isBookmarkSupported() { return false; }
+ @Override default Optional<Bookmark> getBookmark() { return
Optional.empty(); }
+ @Override default Optional<Bookmark> getBookmarkRefreshed() { return
Optional.empty(); }
+ @Override default boolean isBookmarkMemoized() { return false; }
+ }
+
+}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
index cb120a4912..4bd665f95e 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
@@ -32,6 +32,7 @@ import
org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.context.HasMetaModelContext;
import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
+import
org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -49,7 +50,10 @@ import lombok.extern.log4j.Log4j2;
* @since 2.0 {@index}}
*
*/
-public interface ManagedObject extends HasMetaModelContext {
+public interface ManagedObject
+extends
+ Bookmarkable,
+ HasMetaModelContext {
/**
* ManagedObject specializations have varying contract/behavior.
@@ -308,6 +312,9 @@ public interface ManagedObject extends HasMetaModelContext {
* which governs this object's behavior.
*/
Specialization getSpecialization();
+ @Override default BookmarkPolicy getBookmarkPolicy() {
+ return getSpecialization().getBookmarkPolicy();
+ }
/**
* Returns the specification that details the structure (meta-model) of
this object.
@@ -320,22 +327,6 @@ public interface ManagedObject extends HasMetaModelContext
{
*/
Object getPojo();
- /**
- * Returns the object's bookmark as identified by the ObjectManager.
- * Bookmarks are considered immutable, hence will be memoized once fetched.
- */
- Optional<Bookmark> getBookmark();
-
- /**
- * Similar to {@link #getBookmark()}, but invalidates any memoized {@link
Bookmark}
- * such that the {@link Bookmark} returned is recreated, reflecting the
object's current state.
- * @implNote
- * As this is not required, in fact not recommended for entities,
- * (but might be necessary for viewmodels, when their state has changed),
- * we silently ignore bookmark invalidation attempts for entities.
- */
- Optional<Bookmark> getBookmarkRefreshed();
-
/**
* If the underlying domain object is a viewmodel, refreshes any
referenced entities.
* (Acts as a no-op otherwise.)
@@ -343,8 +334,6 @@ public interface ManagedObject extends HasMetaModelContext {
*/
void refreshViewmodel(@Nullable Supplier<Bookmark> bookmarkSupplier);
- boolean isBookmarkMemoized();
-
Supplier<ManagedObject> asSupplier();
/**
@@ -412,6 +401,7 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* EMPTY
+ * @param spec - required
* @see ManagedObject.Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
* @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
* @see ManagedObject.Specialization.PojoPolicy#NO_POJO
@@ -421,8 +411,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* VALUE
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - if <code>null</code> maps to {@link
#empty(ObjectSpecification)}
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
* @see ManagedObject.Specialization.PojoPolicy#IMMUTABLE
@@ -436,8 +426,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* SERVICE
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - required
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
* @see ManagedObject.Specialization.PojoPolicy#IMMUTABLE
@@ -449,8 +439,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* VIEWMODEL
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - if <code>null</code> maps to {@link
#empty(ObjectSpecification)}
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#REFRESHABLE
* @see ManagedObject.Specialization.PojoPolicy#STATEFUL
@@ -466,8 +456,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* ENTITY
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - if <code>null</code> maps to {@link
#empty(ObjectSpecification)}
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#IMMUTABLE
* @see ManagedObject.Specialization.PojoPolicy#REFETCHABLE
@@ -481,8 +471,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* MIXIN
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - required
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
* @see ManagedObject.Specialization.PojoPolicy#STATEFUL
@@ -494,8 +484,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* OTHER
- * @param pojo
- * @param spec
+ * @param spec - required
+ * @param pojo - if <code>null</code> maps to {@link
#empty(ObjectSpecification)}
* @see ManagedObject.Specialization.TypePolicy#EXACT_TYPE_REQUIRED
* @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
* @see ManagedObject.Specialization.PojoPolicy#STATEFUL
@@ -509,6 +499,8 @@ public interface ManagedObject extends HasMetaModelContext {
}
/**
* PACKED
+ * @param elementSpec - required
+ * @param nonScalar - if <code>null</code> uses {@link Can#empty()} instead
* @see ManagedObject.Specialization.TypePolicy#ABSTRACT_TYPE_ALLOWED
* @see ManagedObject.Specialization.BookmarkPolicy#NO_BOOKMARK
* @see ManagedObject.Specialization.PojoPolicy#PACKED
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
index d40fe5abaf..285211fabf 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.core.metamodel.object;
-import java.util.Optional;
import java.util.function.Supplier;
import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -32,7 +31,8 @@ import lombok.Getter;
*/
@Getter
final class _ManagedObjectEmpty
-extends _ManagedObjectSpecified {
+extends _ManagedObjectSpecified
+implements Bookmarkable.NoBookmark {
_ManagedObjectEmpty(
final ObjectSpecification spec) {
@@ -44,23 +44,8 @@ extends _ManagedObjectSpecified {
return null;
}
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty();
- }
-
- @Override
- public Optional<Bookmark> getBookmarkRefreshed() {
- return Optional.empty();
- }
-
@Override
public void refreshViewmodel(final Supplier<Bookmark> bookmarkSupplier) {
}
- @Override
- public boolean isBookmarkMemoized() {
- return false;
- }
-
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectMixin.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectMixin.java
index b4c13a3e99..15fb7fafbd 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectMixin.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectMixin.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.core.metamodel.object;
-import java.util.Optional;
import java.util.function.Supplier;
import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -36,7 +35,8 @@ import lombok.experimental.Accessors;
*/
@Getter
final class _ManagedObjectMixin
-extends _ManagedObjectSpecified {
+extends _ManagedObjectSpecified
+implements Bookmarkable.NoBookmark {
@Getter(onMethod_ = {@Override}) @Accessors(makeFinal = true)
private final @NonNull Object pojo;
@@ -49,26 +49,11 @@ extends _ManagedObjectSpecified {
this.pojo = assertCompliance(pojo);
}
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty(); // bookmark n/a for mixins
- }
-
- @Override
- public Optional<Bookmark> getBookmarkRefreshed() {
- return Optional.empty(); // bookmark n/a for mixins
- }
-
@Override
public void refreshViewmodel(final Supplier<Bookmark> bookmarkSupplier) {
// no-op for mixins
}
- @Override
- public boolean isBookmarkMemoized() {
- return false;
- }
-
@Override
public final String getTitle() {
// mixins have no title
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectOther.java
similarity index 65%
copy from
core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
copy to
core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectOther.java
index d40fe5abaf..91702895cd 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectEmpty.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectOther.java
@@ -18,49 +18,39 @@
*/
package org.apache.isis.core.metamodel.object;
-import java.util.Optional;
import java.util.function.Supplier;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
/**
- * (package private) specialization corresponding to {@link
Specialization#EMPTY}
- * @see ManagedObject.Specialization#EMPTY
+ * (package private) specialization corresponding to {@link
Specialization#OTHER}
+ * @see ManagedObject.Specialization#MIXIN
*/
@Getter
-final class _ManagedObjectEmpty
-extends _ManagedObjectSpecified {
-
- _ManagedObjectEmpty(
- final ObjectSpecification spec) {
- super(ManagedObject.Specialization.EMPTY, spec);
- }
-
- @Override
- public Object getPojo() {
- return null;
- }
-
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty();
- }
-
- @Override
- public Optional<Bookmark> getBookmarkRefreshed() {
- return Optional.empty();
+final class _ManagedObjectOther
+extends _ManagedObjectSpecified
+implements Bookmarkable.NoBookmark {
+
+ @Getter(onMethod_ = {@Override}) @Accessors(makeFinal = true)
+ private final @NonNull Object pojo;
+
+ _ManagedObjectOther(
+ final ObjectSpecification spec,
+ final Object pojo) {
+ super(ManagedObject.Specialization.OTHER, spec);
+ //_Assert.assertTrue(spec.isOther()); //TODO later
+ //this.pojo = assertCompliance(pojo); //TODO later
+ this.pojo = pojo;
}
@Override
public void refreshViewmodel(final Supplier<Bookmark> bookmarkSupplier) {
- }
-
- @Override
- public boolean isBookmarkMemoized() {
- return false;
+ // no-op for other
}
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectPacked.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectPacked.java
index 5438f1a990..35d1eeec64 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectPacked.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectPacked.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.metamodel.object;
import java.util.Collections;
-import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -37,7 +36,9 @@ import lombok.NonNull;
*/
final class _ManagedObjectPacked
extends _ManagedObjectSpecified
-implements PackedManagedObject {
+implements
+ Bookmarkable.NoBookmark,
+ PackedManagedObject {
private final @NonNull Can<ManagedObject> nonScalar;
@@ -59,21 +60,6 @@ implements PackedManagedObject {
.collect(Collectors.toList()));
}
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty();
- }
-
- @Override
- public Optional<Bookmark> getBookmarkRefreshed() {
- return Optional.empty();
- }
-
- @Override
- public boolean isBookmarkMemoized() {
- return false;
- }
-
@Override
public Can<ManagedObject> unpack(){
return nonScalar;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectUnspecified.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectUnspecified.java
index a4992373d1..dafa611d87 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectUnspecified.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectUnspecified.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.metamodel.object;
import java.util.Objects;
-import java.util.Optional;
import java.util.function.Supplier;
import org.springframework.lang.Nullable;
@@ -36,7 +35,7 @@ import lombok.NonNull;
* @see ManagedObject.Specialization#UNSPECIFIED
*/
final class _ManagedObjectUnspecified
-implements ManagedObject {
+implements ManagedObject, Bookmarkable.NoBookmark {
static final ManagedObject INSTANCE = new _ManagedObjectUnspecified();
@@ -55,21 +54,6 @@ implements ManagedObject {
return null;
}
- @Override
- public Optional<Bookmark> getBookmark() {
- return Optional.empty();
- }
-
- @Override
- public Optional<Bookmark> getBookmarkRefreshed() {
- return Optional.empty();
- }
-
- @Override
- public boolean isBookmarkMemoized() {
- return false;
- }
-
@Override
public void refreshViewmodel(final @Nullable Supplier<Bookmark>
bookmarkSupplier) {
}