Skip to content

Commit 5f1461f

Browse files
committed
CAUSEWAY-3859: refactors pseudo ManagedObject(s) into their own type
hierarchy
1 parent 23f6f2b commit 5f1461f

File tree

6 files changed

+96
-138
lines changed

6 files changed

+96
-138
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.causeway.core.metamodel.object;
20+
21+
import org.apache.causeway.applib.services.repository.EntityState;
22+
import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
23+
import org.apache.causeway.core.metamodel.spec.HasObjectSpecification;
24+
25+
public sealed interface EntityPhase
26+
extends
27+
HasMetaModelContext,
28+
HasObjectSpecification
29+
permits
30+
EntityPhaseTransient,
31+
EntityPhaseBookmarked,
32+
EntityPhaseRemoved {
33+
34+
EntityState getEntityState();
35+
36+
Object getPojo();
37+
}

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityBookmarked.java core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/EntityPhaseBookmarked.java

+8-49
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.Optional;
2222

23+
import org.jspecify.annotations.NonNull;
2324
import org.jspecify.annotations.Nullable;
2425

2526
import org.apache.causeway.applib.exceptions.unrecoverable.ObjectNotFoundException;
@@ -32,33 +33,30 @@
3233
import org.apache.causeway.commons.internal.exceptions._Exceptions;
3334
import org.apache.causeway.commons.internal.ref.TransientObjectRef;
3435
import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
35-
import org.apache.causeway.core.metamodel.facets.object.title.TitleRenderRequest;
3636
import org.apache.causeway.core.metamodel.object.ManagedObject.Specialization;
37-
import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
3837
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
3938

40-
import org.jspecify.annotations.NonNull;
4139
import lombok.extern.log4j.Log4j2;
4240

4341
/**
4442
* (package private) specialization corresponding to a attached {@link Specialization#ENTITY}
4543
* @see ManagedObject.Specialization#ENTITY
4644
*/
4745
@Log4j2
48-
record ManagedObjectEntityBookmarked(
46+
record EntityPhaseBookmarked(
4947
@NonNull ObjectSpecification objSpec,
5048
@NonNull TransientObjectRef<Object> pojoRef,
5149
@NonNull Bookmark bookmark)
52-
implements ManagedObject, _Refetchable {
50+
implements EntityPhase, _Refetchable {
5351

54-
ManagedObjectEntityBookmarked(
52+
EntityPhaseBookmarked(
5553
final ObjectSpecification objSpec,
5654
final Object pojo,
5755
final @NonNull Optional<Bookmark> bookmarkIfKnown) {
5856
this(objSpec, new TransientObjectRef<>(pojo), bookmarkIfKnown.orElse(null));
5957
}
6058

61-
ManagedObjectEntityBookmarked(
59+
EntityPhaseBookmarked(
6260
final ObjectSpecification objSpec,
6361
final TransientObjectRef<Object> pojoRef,
6462
@Nullable final Bookmark bookmark) {
@@ -72,32 +70,6 @@ record ManagedObjectEntityBookmarked(
7270
.orElseGet(this::createBookmark);
7371
}
7472

75-
@Override
76-
public Specialization specialization() {
77-
return ManagedObject.Specialization.ENTITY;
78-
}
79-
80-
@Override
81-
public String getTitle() {
82-
return _InternalTitleUtil.titleString(
83-
TitleRenderRequest.forObject(this));
84-
}
85-
86-
@Override
87-
public Optional<ObjectMemento> getMemento() {
88-
return Optional.ofNullable(ObjectMemento.singularOrEmpty(this));
89-
}
90-
91-
@Override
92-
public Optional<Bookmark> getBookmark() {
93-
return Optional.of(bookmark);
94-
}
95-
96-
@Override
97-
public boolean isBookmarkMemoized() {
98-
return true;
99-
}
100-
10173
@Override
10274
public Object peekAtPojo() {
10375
return pojoRef.getObject();
@@ -127,24 +99,11 @@ public Object getPojo() {
12799
return entityFacet().getEntityState(peekAtPojo());
128100
}
129101

130-
@Override
131-
public final boolean equals(final Object obj) {
132-
return _Compliance.equals(this, obj);
133-
}
134-
135-
@Override
136-
public final int hashCode() {
137-
return _Compliance.hashCode(this);
138-
}
139-
140-
@Override
141-
public final String toString() {
142-
return _Compliance.toString(this);
143-
}
144-
145102
// -- HELPER
146103

147-
// private boolean refetching;
104+
private Specialization specialization() {
105+
return ManagedObject.Specialization.ENTITY;
106+
}
148107

149108
private Object refetchPojo(final EntityState entityState) {
150109

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityRemoved.java core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/EntityPhaseRemoved.java

+5-15
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,27 @@
1818
*/
1919
package org.apache.causeway.core.metamodel.object;
2020

21+
import org.jspecify.annotations.NonNull;
22+
2123
import org.apache.causeway.applib.services.repository.EntityState;
2224
import org.apache.causeway.commons.internal.assertions._Assert;
2325
import org.apache.causeway.core.metamodel.object.ManagedObject.Specialization;
2426
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
2527

26-
import org.jspecify.annotations.NonNull;
27-
2828
/**
2929
* (package private) specialization corresponding to a removed {@link Specialization#ENTITY}
3030
* @see ManagedObject.Specialization#ENTITY
3131
*/
32-
record ManagedObjectEntityRemoved(
32+
record EntityPhaseRemoved(
3333
@NonNull ObjectSpecification objSpec)
34-
implements ManagedObject, Bookmarkable.NoBookmark {
34+
implements EntityPhase {
3535

36-
ManagedObjectEntityRemoved(
36+
EntityPhaseRemoved(
3737
final ObjectSpecification objSpec) {
3838
_Assert.assertTrue(objSpec.isEntity());
3939
this.objSpec = objSpec;
4040
}
4141

42-
@Override
43-
public Specialization specialization() {
44-
return ManagedObject.Specialization.ENTITY;
45-
}
46-
47-
@Override
48-
public String getTitle() {
49-
return "deleted entity object";
50-
}
51-
5242
@Override
5343
public Object getPojo() {
5444
return null;

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityTransient.java core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/EntityPhaseTransient.java

+13-31
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,38 @@
1818
*/
1919
package org.apache.causeway.core.metamodel.object;
2020

21-
import java.util.Optional;
22-
2321
import org.jspecify.annotations.NonNull;
2422

2523
import org.apache.causeway.applib.services.repository.EntityState;
2624
import org.apache.causeway.commons.internal.assertions._Assert;
27-
import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
25+
import org.apache.causeway.core.metamodel.object.ManagedObject.Specialization;
2826
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
2927

3028
/**
3129
* (package private) specialization corresponding to a detached {@link Specialization#ENTITY}
3230
* @see ManagedObject.Specialization#ENTITY
3331
*/
34-
record ManagedObjectEntityTransient(
32+
record EntityPhaseTransient(
3533
@NonNull ObjectSpecification objSpec,
3634
@NonNull Object pojo)
37-
implements ManagedObject, Bookmarkable.NoBookmark, _Refetchable {
35+
implements EntityPhase, _Refetchable {
3836

39-
ManagedObjectEntityTransient(
37+
EntityPhaseTransient(
4038
final ObjectSpecification objSpec,
4139
final Object pojo) {
4240
_Assert.assertTrue(objSpec.isEntity());
4341
this.objSpec = objSpec;
4442
this.pojo = _Compliance.assertCompliance(objSpec, specialization(), pojo);
4543
}
4644

47-
@Override
48-
public Specialization specialization() {
45+
public ManagedObject.Specialization specialization() {
4946
return ManagedObject.Specialization.ENTITY;
5047
}
5148

52-
@Override
53-
public String getTitle() {
54-
return "transient entity object";
55-
}
49+
// @Override
50+
// public String getTitle() {
51+
// return "transient entity object";
52+
// }
5653

5754
@Override
5855
public Object getPojo() {
@@ -69,24 +66,9 @@ public Object peekAtPojo() {
6966
return objSpec().entityFacetElseFail().getEntityState(pojo);
7067
}
7168

72-
@Override
73-
public Optional<ObjectMemento> getMemento() {
74-
return Optional.ofNullable(ObjectMemento.singularOrEmpty(this));
75-
}
76-
77-
@Override
78-
public boolean equals(final Object obj) {
79-
return _Compliance.equals(this, obj);
80-
}
81-
82-
@Override
83-
public int hashCode() {
84-
return _Compliance.hashCode(this);
85-
}
86-
87-
@Override
88-
public String toString() {
89-
return _Compliance.toString(this);
90-
}
69+
// @Override
70+
// public Optional<ObjectMemento> getMemento() {
71+
// return Optional.ofNullable(ObjectMemento.singularOrEmpty(this));
72+
// }
9173

9274
}

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObject.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,7 @@ public sealed interface ManagedObject
6363
ManagedObjectValue,
6464
ManagedObjectService,
6565
ManagedObjectViewmodel,
66-
ManagedObjectEntityTransient,
67-
ManagedObjectEntityRemoved,
68-
ManagedObjectEntityBookmarked,
69-
ManagedObjectEntityHybrid,
66+
ManagedObjectEntity,
7067
PackedManagedObject {
7168

7269
/**
@@ -486,16 +483,16 @@ private static ManagedObject entityHypridBookmarked(
486483
final @NonNull ObjectSpecification spec,
487484
final @NonNull Object pojo,
488485
final @NonNull Optional<Bookmark> bookmarkIfKnown) {
489-
return new ManagedObjectEntityHybrid(
490-
new ManagedObjectEntityBookmarked(spec, pojo, bookmarkIfKnown));
486+
return new ManagedObjectEntity(
487+
new EntityPhaseBookmarked(spec, pojo, bookmarkIfKnown));
491488
}
492489
// initially detached hybrid that can transition to bookmarked anytime on reassessment
493490
private static ManagedObject entityHybirdTransient(
494491
final @NonNull ObjectSpecification spec,
495492
final @Nullable Object pojo) {
496493
return pojo != null
497-
? new ManagedObjectEntityHybrid(
498-
new ManagedObjectEntityTransient(spec, pojo))
494+
? new ManagedObjectEntity(
495+
new EntityPhaseTransient(spec, pojo))
499496
: empty(spec);
500497
}
501498
/**

0 commit comments

Comments
 (0)