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 c9c348ed2d ISIS-3060: cleanup FacetHolder type hierarchy
c9c348ed2d is described below
commit c9c348ed2d01719af9b95d528f9b9917990f66fe
Author: Andi Huber <[email protected]>
AuthorDate: Wed Jul 6 10:57:06 2022 +0200
ISIS-3060: cleanup FacetHolder type hierarchy
- don't extend FacetHolder if possible (composition over inheritance)
---
.../isis/core/metamodel/facetapi/FacetHolder.java | 27 +++++++++++++++++++
.../metamodel/facetapi/FacetHolderAbstract.java | 26 +-----------------
.../metamodel/facetapi/FacetHolderLayered.java | 2 +-
.../FacetHolderSimple.java} | 31 +++++++++-------------
.../core/metamodel/facetapi/HasFacetHolder.java | 13 +++++++++
.../isis/core/metamodel/facets/TypedHolder.java | 3 ++-
.../core/metamodel/facets/TypedHolderAbstract.java | 8 +++---
.../members/cssclassfa/CssClassFaFactory.java | 11 +++++++-
...CssClassFaFacetOnMemberFromConfiguredRegex.java | 14 +++-------
.../ObjectSpecificationPostProcessorAbstract.java | 5 ++++
.../isis/core/metamodel/spec/Specification.java | 4 +--
.../specloader/specimpl/ObjectActionMixedIn.java | 3 +--
.../specimpl/ObjectActionParameterAbstract.java | 4 +--
.../specloader/specimpl/ObjectMemberAbstract.java | 4 +--
.../specloader/specimpl/ObjectMemberContainer.java | 16 ++++++++---
.../specimpl/ObjectSpecificationAbstract.java | 3 +--
.../specimpl/OneToManyAssociationMixedIn.java | 3 +--
.../specimpl/OneToOneAssociationMixedIn.java | 3 +--
.../core/metamodel/facetapi/FacetAbstractTest.java | 2 +-
.../facets/AbstractFacetFactoryJUnit4TestCase.java | 3 +--
.../metamodel/facets/AbstractFacetFactoryTest.java | 3 +--
.../ViewModelSemanticCheckingFacetFactoryTest.java | 4 +--
.../facets/object/mixin/MixinIntendedAs.java | 3 +--
.../interactions/InteractionUtils_isA_Test.java | 3 +--
.../testspec/ObjectSpecificationStub.java | 8 +++---
.../testing/AbstractFacetFactoryTest.java | 3 +--
26 files changed, 112 insertions(+), 97 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
index 140045789c..4971cb506d 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
@@ -23,9 +23,11 @@ import java.util.function.Predicate;
import java.util.stream.Stream;
import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.applib.services.i18n.HasTranslationContext;
import org.apache.isis.applib.services.i18n.TranslationContext;
import org.apache.isis.core.metamodel.context.HasMetaModelContext;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
import lombok.NonNull;
import lombok.val;
@@ -37,6 +39,31 @@ import lombok.val;
public interface FacetHolder
extends HasMetaModelContext, HasTranslationContext {
+ // -- FACTORIES
+
+ public static FacetHolderAbstract simple(
+ final MetaModelContext mmc,
+ final Identifier featureIdentifier) {
+ return new FacetHolderSimple(mmc, featureIdentifier);
+ }
+
+ public static FacetHolder layered(
+ final Identifier featureIdentifier,
+ final FacetHolder parentLayer) {
+ return new FacetHolderLayered(featureIdentifier, parentLayer);
+ }
+
+ // -- JUNIT SUPPORT
+
+ /**
+ * Meant for simple JUnit tests, that don't use the FacetHolder's
identifier.
+ */
+ public static FacetHolderAbstract forTesting(final MetaModelContext mmc) {
+ return simple(mmc,
Identifier.classIdentifier(LogicalType.fqcn(Object.class)));
+ }
+
+ // --
+
/**
* Identifier of the feature this holder represents or is associated with.
*/
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
index 894f17947c..003d3ce5dd 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
@@ -23,7 +23,6 @@ import java.util.Optional;
import java.util.stream.Stream;
import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -42,23 +41,9 @@ import lombok.val;
@AllArgsConstructor
@RequiredArgsConstructor
//@Log4j2
-public abstract class FacetHolderAbstract
+abstract class FacetHolderAbstract
implements FacetHolder {
- // -- FACTORIES
-
- public static FacetHolderAbstract simple(
- final MetaModelContext mmc,
- final Identifier featureIdentifier) {
- return new FacetHolderAbstract(mmc, featureIdentifier) {};
- }
-
- public static FacetHolder layered(
- final Identifier featureIdentifier,
- final FacetHolder parentLayer) {
- return new FacetHolderLayered(featureIdentifier, parentLayer);
- }
-
// -- FIELDS
@Getter(onMethod_ = {@Override}) private final @NonNull MetaModelContext
metaModelContext;
@@ -124,15 +109,6 @@ implements FacetHolder {
return Optional.ofNullable(rankingByType.get(facetType));
}
- // -- JUNIT SUPPORT
-
- /**
- * Meant for simple JUnit tests, that don't use the FacetHolder's
identifier.
- */
- public static FacetHolderAbstract forTesting(final MetaModelContext mmc) {
- return simple(mmc,
Identifier.classIdentifier(LogicalType.fqcn(Object.class)));
- }
-
// -- HELPER
private final _Lazy<Map<Class<? extends Facet>, Facet>> snapshot =
_Lazy.threadSafe(this::snapshot);
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
index ad0c9fe7ed..64ef9bee99 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java
@@ -59,7 +59,7 @@ implements FacetHolder {
final @NonNull FacetHolder shared) {
this.featureIdentifier = featureIdentifier;
this.shared = shared;
- this.local = FacetHolderAbstract.simple(shared.getMetaModelContext(),
featureIdentifier);
+ this.local = FacetHolder.simple(shared.getMetaModelContext(),
featureIdentifier);
}
@Override
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderSimple.java
similarity index 51%
copy from
core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
copy to
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderSimple.java
index 07705da0df..397c4d663c 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderSimple.java
@@ -16,28 +16,23 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.spec;
+package org.apache.isis.core.metamodel.facetapi;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+
+import lombok.NonNull;
/**
- * Base interface for elements of the metamodel.
- *
- * <p>
- * The most significant sub-interfaces of this are {@link ObjectSpecification}
- * and {@link ObjectFeature} (which brings in {@link ObjectMember} and
- * {@link ObjectActionParameter}.
- *
- * <p>
- * Introduces so that viewers can deal with abstract Instances of said.
- *
+ * Provides a (simple) list of {@link Facet}s.
*/
-public interface Specification extends FacetHolder {
+class FacetHolderSimple
+extends FacetHolderAbstract {
- FeatureType getFeatureType();
+ public FacetHolderSimple(
+ final @NonNull MetaModelContext metaModelContext,
+ final Identifier featureIdentifier) {
+ super(metaModelContext, featureIdentifier);
+ }
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
index 4240743a24..67cbf98c05 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
@@ -21,6 +21,9 @@ package org.apache.isis.core.metamodel.facetapi;
import java.util.Optional;
import java.util.stream.Stream;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+
public interface HasFacetHolder extends FacetHolder {
// -- INTERFACE
@@ -29,6 +32,16 @@ public interface HasFacetHolder extends FacetHolder {
// -- SHORTCUTS
+ @Override
+ default MetaModelContext getMetaModelContext() {
+ return getFacetHolder().getMetaModelContext();
+ }
+
+ @Override
+ default Identifier getFeatureIdentifier() {
+ return getFacetHolder().getFeatureIdentifier();
+ }
+
@Override
default int getFacetCount() {
return getFacetHolder().getFacetCount();
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolder.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolder.java
index cbe3ad859c..3a28ca2740 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolder.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolder.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.facets;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
/**
@@ -28,7 +29,7 @@ import
org.apache.isis.core.metamodel.spec.ObjectSpecification;
* <p>
* Used to represent class members when building up the metamodel.
*/
-public interface TypedHolder extends FacetHolder {
+public interface TypedHolder extends HasFacetHolder {
public FeatureType getFeatureType();
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolderAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolderAbstract.java
index 6835ccba7c..41c24e1b68 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolderAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/TypedHolderAbstract.java
@@ -20,15 +20,16 @@ package org.apache.isis.core.metamodel.facets;
import org.apache.isis.applib.Identifier;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import lombok.Getter;
public abstract class TypedHolderAbstract
-extends FacetHolderAbstract
implements TypedHolder {
+ @Getter(onMethod_ = {@Override}) private FacetHolder facetHolder;
+
@Getter(onMethod_ = {@Override}) private final FeatureType featureType;
/**
@@ -46,7 +47,7 @@ implements TypedHolder {
final FeatureType featureType,
final Class<?> type,
final Identifier featureIdentifier) {
- super(mmc, featureIdentifier);
+ this.facetHolder = FacetHolder.simple(mmc, featureIdentifier);
this.featureType = featureType;
this.type = type;
}
@@ -57,5 +58,4 @@ implements TypedHolder {
}
-
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
index 7cf5ff2a05..99fff0716d 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
@@ -49,7 +49,7 @@ public interface CssClassFaFactory {
* Space separated (distinct) CSS-class strings.
* @param additionalClasses - trimmed and filtered by non-empty, then
added to the resulting string
*/
- default String asSpaceSeparatedWithAdditional(String ...
additionalClasses) {
+ default String asSpaceSeparatedWithAdditional(final String ...
additionalClasses) {
if(_NullSafe.size(additionalClasses)==0) {
return asSpaceSeparated();
@@ -65,4 +65,13 @@ public interface CssClassFaFactory {
}
+ /**
+ * @implNote because {@link CssClassFaStaticFacetAbstract} has all the
fa-icon logic,
+ * we simply reuse it here by creating an anonymous instance
+ */
+ public static CssClassFaFactory ofIconAndPosition(final String faIcon,
final CssClassFaPosition position) {
+ return new CssClassFaStaticFacetAbstract(
+ faIcon, position, null) {};
+ }
+
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
index 50106eb3df..1884d18b33 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
@@ -28,12 +28,10 @@ import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.layout.component.CssClassFaPosition;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
import
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactory;
import
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaImperativeFacetAbstract;
-import
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaStaticFacetAbstract;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -74,8 +72,8 @@ extends CssClassFaImperativeFacetAbstract {
private CssClassFaFacetOnMemberFromConfiguredRegex(
final ObjectSpecification objectSpecification,
final MemberNamedFacet memberNamedFacet,
- final FacetHolder holder) {
- super(holder);
+ final FacetHolder facetHolder) {
+ super(facetHolder);
this.objectSpecification = objectSpecification;
this.faIconByPattern = getConfiguration()
.getApplib().getAnnotation().getActionLayout().getCssClassFa().getPatternsAsMap();
@@ -136,7 +134,6 @@ extends CssClassFaImperativeFacetAbstract {
hasImperativeName->hasImperativeName.textElseNull(targetFor(domainObjectProvider)));
return cssClassFaFactoryForMemberFriendlyName(memberFriendlyName);
-
}
private ManagedObject targetFor(final Supplier<ManagedObject>
domainObjectProvider) {
@@ -153,10 +150,6 @@ extends CssClassFaImperativeFacetAbstract {
: ownerAdapter;
}
- /**
- * @implNote because {@link CssClassFaStaticFacetAbstract} has all the
fa-icon logic,
- * we simply reuse it here by creating an anonymous instance
- */
private Optional<CssClassFaFactory> cssClassFaFactoryForMemberFriendlyName(
final String memberFriendlyName) {
@@ -174,8 +167,7 @@ extends CssClassFaImperativeFacetAbstract {
faIcon = _faIcon;
position = CssClassFaPosition.LEFT;
}
- return new CssClassFaStaticFacetAbstract(
- faIcon, position,
FacetHolderAbstract.simple(getMetaModelContext(), null)) {};
+ return CssClassFaFactory.ofIconAndPosition(faIcon, position);
});
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
index 0466b1df25..5c3a50e2bd 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.postprocessors;
import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -75,6 +76,10 @@ implements ObjectSpecificationPostProcessor {
protected void doPostProcess(final ObjectSpecification objSpec, final
OneToOneAssociation prop) {};
protected void doPostProcess(final ObjectSpecification objSpec, final
OneToManyAssociation coll) {};
+ /**
+ * Use for domain-object-type agnostic facets only!
+ * @see Facet#isObjectTypeSpecific()
+ */
protected static FacetedMethod facetedMethodFor(final ObjectMember
objectMember) {
// TODO: hacky, need to copy facet onto underlying peer, not to the
action/association itself.
val objectMemberImpl = (ObjectMemberAbstract) objectMember;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
index 07705da0df..423dae2ddc 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
@@ -18,8 +18,8 @@
*/
package org.apache.isis.core.metamodel.spec;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
@@ -36,7 +36,7 @@ import
org.apache.isis.core.metamodel.spec.feature.ObjectMember;
* Introduces so that viewers can deal with abstract Instances of said.
*
*/
-public interface Specification extends FacetHolder {
+public interface Specification extends HasFacetHolder {
FeatureType getFeatureType();
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 90c7214dce..9b0d0689b9 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -28,7 +28,6 @@ import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
import
org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName;
import org.apache.isis.core.metamodel.interactions.InteractionHead;
@@ -80,7 +79,7 @@ implements MixedInMember {
mixinAction.getFacetedMethod().getFeatureIdentifier().getMemberParameterClassNames()),
mixinAction.getFacetedMethod(), false);
- this.facetHolder = FacetHolderAbstract.layered(
+ this.facetHolder = FacetHolder.layered(
super.getFeatureIdentifier(),
mixinAction.getFacetedMethod());
this.mixinType = mixinType;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 6a95578098..7e20752901 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -32,7 +32,6 @@ import
org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.facets.all.described.ParamDescribedFacet;
import org.apache.isis.core.metamodel.facets.all.named.ParamNamedFacet;
import
org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
@@ -58,8 +57,7 @@ import lombok.val;
public abstract class ObjectActionParameterAbstract
implements
- ObjectActionParameter,
- HasFacetHolder {
+ ObjectActionParameter {
@Getter(onMethod_ = {@Override}) private final FeatureType featureType;
@Getter(onMethod_ = {@Override}) private final int parameterIndex;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index f028465926..e0b2cea70e 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -35,7 +35,6 @@ import
org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.Facet.Precedence;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import
org.apache.isis.core.metamodel.facets.all.described.MemberDescribedFacet;
import org.apache.isis.core.metamodel.facets.all.help.HelpFacet;
@@ -63,8 +62,7 @@ import lombok.val;
public abstract class ObjectMemberAbstract
implements
ObjectMember,
- HasMetaModelContext,
- HasFacetHolder {
+ HasMetaModelContext {
@Getter(onMethod_ = {@Override}) private final @NonNull Identifier
featureIdentifier;
@Getter(onMethod_ = {@Override}) private final @NonNull FeatureType
featureType;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
index 47c101a04e..2f29b09be4 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
@@ -22,10 +22,12 @@ import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Stream;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.commons.collections.ImmutableEnumSet;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
import org.apache.isis.core.metamodel.spec.ActionScope;
import org.apache.isis.core.metamodel.spec.Hierarchical;
import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -34,6 +36,8 @@ import
org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationContainer;
+import lombok.Getter;
+import lombok.NonNull;
import lombok.val;
/**
@@ -47,14 +51,18 @@ import lombok.val;
* (current elegant recursive solution will then need some tweaks to be
efficient)
*/
public abstract class ObjectMemberContainer
-extends FacetHolderAbstract
implements
+ HasFacetHolder,
ObjectActionContainer,
ObjectAssociationContainer,
Hierarchical {
- protected ObjectMemberContainer(final MetaModelContext metaModelContext) {
- super(metaModelContext);
+ @Getter(onMethod_ = {@Override}) private FacetHolder facetHolder;
+
+ protected ObjectMemberContainer(
+ final @NonNull MetaModelContext mmc,
+ final @NonNull Identifier featureIdentifier) {
+ this.facetHolder = FacetHolder.simple(mmc, featureIdentifier);
}
// -- ACTIONS
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index ca46991de1..3c813e7680 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -199,7 +199,7 @@ implements ObjectSpecification {
final FacetProcessor facetProcessor,
final PostProcessor postProcessor) {
- super(facetProcessor.getMetaModelContext());
+ super(facetProcessor.getMetaModelContext(),
Identifier.classIdentifier(logicalType));
this.correspondingClass = introspectedClass;
this.logicalType = logicalType;
@@ -208,7 +208,6 @@ implements ObjectSpecification {
this.beanSort = beanSort;
this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
- super.featureIdentifier = Identifier.classIdentifier(logicalType);
this.facetProcessor = facetProcessor;
this.postProcessor = postProcessor;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index 690ae829d9..2d3ef6c6ed 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -25,7 +25,6 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
@@ -96,7 +95,7 @@ implements MixedInMember {
_MixedInMemberNamingStrategy.determineIdFrom(mixinAction)),
mixinAction.getFacetedMethod(), typeOfSpec(mixinAction));
- this.facetHolder = FacetHolderAbstract.layered(
+ this.facetHolder = FacetHolder.layered(
super.getFeatureIdentifier(),
mixinAction.getFacetedMethod());
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index e6c3f0aca1..8618c0de79 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -25,7 +25,6 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet;
import
org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName;
@@ -80,7 +79,7 @@ implements MixedInMember {
_MixedInMemberNamingStrategy.determineIdFrom(mixinAction)),
mixinAction.getFacetedMethod(), mixinAction.getReturnType());
- this.facetHolder = FacetHolderAbstract.layered(
+ this.facetHolder = FacetHolder.layered(
super.getFeatureIdentifier(),
mixinAction.getFacetedMethod());
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facetapi/FacetAbstractTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facetapi/FacetAbstractTest.java
index e1f5515f87..6c468754d1 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facetapi/FacetAbstractTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facetapi/FacetAbstractTest.java
@@ -43,7 +43,7 @@ public class FacetAbstractTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
- facetHolder =
FacetHolderAbstract.forTesting(MetaModelContext_forTesting.buildDefault());
+ facetHolder =
FacetHolder.forTesting(MetaModelContext_forTesting.buildDefault());
fooFacet = new ConcreteFacet(FooFacet.class, facetHolder);
new ConcreteFacet(BarFacet.class, facetHolder);
facetHolder.addFacet(fooFacet);
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index b84e9acfe4..1ad1aa981e 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -34,7 +34,6 @@ import
org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.context.HasMetaModelContext;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MethodRemover;
import
org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForDomainObjectAnnotation;
@@ -80,7 +79,7 @@ implements HasMetaModelContext {
.specificationLoader(mockSpecificationLoader)
.build();
- facetHolder = FacetHolderAbstract.simple(
+ facetHolder = FacetHolder.simple(
metaModelContext,
Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName"));
facetedMethod = FacetedMethod.createForProperty(metaModelContext,
AbstractFacetFactoryTest.Customer.class, "firstName");
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
index 2e503efd67..b72301b44b 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
@@ -36,7 +36,6 @@ import
org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel._testing.MethodRemover_forTesting;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
import
org.apache.isis.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
@@ -103,7 +102,7 @@ public abstract class AbstractFacetFactoryTest extends
TestCase {
will(returnValue(Optional.of(iaContext)));
}});
- facetHolder = FacetHolderAbstract.simple(
+ facetHolder = FacetHolder.simple(
metaModelContext,
Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName"));
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
index 017c207363..79d8d1ff39 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
@@ -80,7 +80,7 @@ public class ViewModelSemanticCheckingFacetFactoryTest {
private ValidationFailures processThenValidate(final Class<?> cls) {
- val holder = FacetHolderAbstract.forTesting(metaModelContext);
+ val holder = FacetHolder.forTesting(metaModelContext);
facetFactory.process(ProcessClassContext.forTesting(cls, null,
holder));
return
metaModelContext.getSpecificationLoader().getOrAssessValidationResult();
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
index 363b5b3955..f44d6c8c35 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
@@ -25,7 +25,6 @@ import
org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MethodRemover;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
@@ -62,7 +61,7 @@ abstract class MixinIntendedAs {
protected FacetHolder runTypeContextOn(final Class<?> type) {
- val facetHolder = FacetHolderAbstract.simple(
+ val facetHolder = FacetHolder.simple(
metaModelContext,
Identifier.classIdentifier(LogicalType.fqcn(type)));
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/interactions/InteractionUtils_isA_Test.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/interactions/InteractionUtils_isA_Test.java
index b5cf5906db..53cff84e61 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/interactions/InteractionUtils_isA_Test.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/interactions/InteractionUtils_isA_Test.java
@@ -23,7 +23,6 @@ import
org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import lombok.val;
@@ -65,7 +64,7 @@ public class InteractionUtils_isA_Test extends TestCase {
protected void setUp() throws Exception {
super.setUp();
- facetHolder =
FacetHolderAbstract.forTesting(MetaModelContext_forTesting.buildDefault());
+ facetHolder =
FacetHolder.forTesting(MetaModelContext_forTesting.buildDefault());
fooSuperFacet = new FooSuperFacet(FooSuperFacet.class, facetHolder);
fooFacet = new FooFacet(facetHolder);
fooSubFacet = new FooSubFacet(facetHolder);
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 68c1a43533..3711a415ae 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -36,7 +36,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.WhereValueFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
@@ -57,10 +57,10 @@ import
org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
+import lombok.Getter;
import lombok.val;
public class ObjectSpecificationStub
-extends FacetHolderAbstract
implements ObjectSpecification {
private ObjectAction action;
@@ -75,6 +75,8 @@ implements ObjectSpecification {
private final Class<?> correspondingClass;
private final String name;
+ @Getter(onMethod_ = {@Override}) private FacetHolder facetHolder;
+
@Override
public Optional<? extends ObjectMember> getMember(final String memberId) {
val objectAction = getAction(memberId);
@@ -100,7 +102,7 @@ implements ObjectSpecification {
}
public ObjectSpecificationStub(final MetaModelContext mmc, final Class<?>
correspondingClass) {
- super(mmc);
+ this.facetHolder = FacetHolder.simple(mmc, null);
this.correspondingClass = correspondingClass;
this.logicalType = LogicalType.infer(correspondingClass);
this.title = "";
diff --git
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
index 7f0ea1121f..cd29329076 100644
---
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
+++
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
@@ -36,7 +36,6 @@ import
org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel._testing.MethodRemover_forTesting;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
@@ -102,7 +101,7 @@ public abstract class AbstractFacetFactoryTest extends
TestCase {
will(returnValue(Optional.of(iaContext)));
}});
- facetHolder = FacetHolderAbstract.simple(
+ facetHolder = FacetHolder.simple(
metaModelContext,
Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName"));