From c36276fbe213020af95fead40aacc6600708879c Mon Sep 17 00:00:00 2001 From: andi-huber Date: Thu, 20 Aug 2026 20:04:09 +0200 Subject: [PATCH 1/3] CAUSEWAY-4044: enforces a contract that every facet is contained by its holder after construction --- .../CausewayBeanFactoryPostProcessor.java | 16 +- .../CausewayObservationAutoConfiguration.java | 25 +- .../core/metamodel/facetapi/Facet.java | 3 +- .../metamodel/facetapi/FacetAbstract.java | 6 +- .../core/metamodel/facetapi/FacetHolder.java | 25 +- .../facetapi/FacetHolderInternal.java | 38 + .../facetapi/FacetHolderLayered.java | 34 +- .../metamodel/facetapi/FacetHolderSimple.java | 24 +- .../core/metamodel/facetapi/FacetRank.java | 16 +- .../core/metamodel/facetapi/FacetRanking.java | 7 +- .../core/metamodel/facetapi/FacetUtil.java | 90 +- .../{facets => facetapi}/FacetedMethod.java | 11 +- .../FacetedMethodParameter.java | 5 +- .../metamodel/facetapi/HasFacetHolder.java | 9 +- .../metamodel/facetapi/QualifiedFacet.java | 6 +- .../TypedFacetHolder.java | 5 +- .../metamodel/facetapi/TypedFacetRanking.java | 16 +- .../core/metamodel/facetapi/_BindUtil.java | 63 + .../facets/AccessorFacetFactoryAbstract.java | 3 +- .../core/metamodel/facets/FacetFactory.java | 2 + .../facets/FacetFactoryAbstract.java | 28 +- .../metamodel/facets/HasFacetedMethod.java | 2 + .../action/ActionAnnotationFacetFactory.java | 85 +- ...ctionExplicitFacetForActionAnnotation.java | 2 +- ...ontributingFacetFromMixinFacetFactory.java | 3 +- .../HomePageFacetAnnotationFactory.java | 6 +- .../layout/ActionLayoutFacetFactory.java | 42 +- ...ActionPositionFacetForActionLayoutXml.java | 21 +- .../CssClassFacetForActionLayoutXml.java | 21 +- .../layout/FaFacetForActionLayoutXml.java | 21 +- .../layout/HiddenFacetForActionLayoutXml.java | 21 +- ...emberDescribedFacetForActionLayoutXml.java | 21 +- .../MemberNamedFacetForActionLayoutXml.java | 21 +- .../semantics/ActionSemanticsFacet.java | 33 +- ...ActionValidationFacetViaMethodFactory.java | 6 +- ...ectionAccessorFacetViaAccessorFactory.java | 2 +- .../CollectionAnnotationFacetFactory.java | 32 +- .../TypeOfFacetForCollectionAnnotation.java | 2 +- .../CollectionFacetFactory.java | 16 +- .../layout/CollectionLayoutFacetFactory.java | 78 +- .../CssClassFacetForCollectionLayoutXml.java | 21 +- ...efaultViewFacetForCollectionLayoutXml.java | 21 +- .../HiddenFacetForCollectionLayoutXml.java | 21 +- ...rDescribedFacetForCollectionLayoutXml.java | 21 +- ...emberNamedFacetForCollectionLayoutXml.java | 10 +- .../PagedFacetForCollectionLayoutXml.java | 21 +- .../SortedByFacetForCollectionLayoutXml.java | 21 +- .../columnorder/ColumnOrderPatchingFacet.java | 30 +- ...eDecoratorFacetForCollectionLayoutXml.java | 21 +- .../ParentedFacetSinceCollectionFactory.java | 3 +- .../facets/fallback/FallbackFacetFactory.java | 40 +- .../facets/jaxb/JaxbFacetFactory.java | 35 +- ...cetOnActionFromConfiguredRegexFactory.java | 7 +- ...ribedAsFacetForMemberViaMethodFactory.java | 13 +- ...isableForContextFacetViaMethodFactory.java | 14 +- .../HideForContextFacetViaMethodFactory.java | 13 +- .../FaFacetOnMemberFromConfiguredRegex.java | 100 +- .../group/LayoutGroupFacetForLayoutXml.java | 21 +- .../order/LayoutOrderFacetForLayoutXml.java | 21 +- .../NamedFacetForMemberViaMethodFactory.java | 12 +- ...dPublishingFacetForPropertyAnnotation.java | 7 +- ...nPublishingFacetForPropertyAnnotation.java | 2 +- .../BookmarkPolicyFacetFallbackFactory.java | 5 +- .../callbacks/CallbackFacetFactory.java | 2 +- .../enums/ChoicesFacetFromEnumFactory.java | 2 +- .../DomainObjectAnnotationFacetFactory.java | 309 +++-- ...rkPolicyFacetForDomainObjectLayoutXml.java | 21 +- ...CssClassFacetForDomainObjectLayoutXml.java | 20 +- .../DomainObjectLayoutFacetFactory.java | 47 +- .../FaFacetForDomainObjectLayoutXml.java | 20 +- ...bjectLayoutAnnotationUsingIconUiEvent.java | 25 +- ...escribedFacetForDomainObjectLayoutXml.java | 20 +- ...ectNamedFacetForDomainObjectLayoutXml.java | 20 +- ...ecoratorFacetForDomainObjectLayoutXml.java | 20 +- .../DomainServiceFacetAnnotationFactory.java | 6 +- .../DomainServiceLayoutFacetFactory.java | 8 +- .../facets/object/grid/BSGridFacet.java | 61 +- .../facets/object/grid/GridFacetFactory.java | 7 +- .../HiddenTypeFacetFromAuthorization.java | 25 +- ...ddenTypeFacetFromAuthorizationFactory.java | 6 +- .../icon/method/IconFacetViaIconMethod.java | 24 +- .../method/IconFacetViaIconNameMethod.java | 20 +- .../CopyImmutableFacetOntoMembersFactory.java | 5 +- .../layout/LayoutPrefixFacetForUiEvent.java | 37 +- .../layout/LayoutPrefixFacetViaMethod.java | 42 +- .../facets/object/mixin/MixinFacetImpl.java | 44 +- .../navchild/NavigableSubtreeFacet.java | 72 +- .../NavigableSubtreeFacetPostProcessor.java | 10 +- .../navchild/NavigableSubtreeFacetRecord.java | 75 -- .../NavigableSubtreeSequenceFacet.java | 44 +- .../NavigableSubtreeSequenceFacetRecord.java | 45 - ...NavigableParentAnnotationFacetFactory.java | 3 +- ...ObjectValidPropertiesFacetImplFactory.java | 3 +- .../ident/IconFacetFromProjectionFacet.java | 21 +- .../object/promptStyle/PromptStyleFacet.java | 61 +- .../support/ObjectSupportFacetFactory.java | 24 +- .../TitleAnnotationFacetFactory.java | 4 +- ...AnyMatchingValueSemanticsFacetFactory.java | 13 +- .../viewmodel/ViewModelFacetFactory.java | 26 +- .../digits/MaxFractionalDigitsFacet.java | 29 +- .../digits/MaxIntegerDigitsFacet.java | 27 +- .../digits/MinFractionalDigitsFacet.java | 25 +- ...eterAutoCompleteFacetViaMethodFactory.java | 11 +- ...ParameterChoicesFacetViaMethodFactory.java | 11 +- ...arameterDefaultsFacetViaMethodFactory.java | 11 +- ...arameterDisabledFacetViaMethodFactory.java | 11 +- ...nParameterHiddenFacetViaMethodFactory.java | 11 +- .../layout/ParameterLayoutFacetFactory.java | 30 +- ...datoryFacetOnParametersDefaultFactory.java | 6 +- ...ameterNameFacetFactoryUsingReflection.java | 6 +- .../ParameterAnnotationFacetFactory.java | 51 +- ...vertedByNullableAnnotationOnParameter.java | 2 +- ...nParameterSupportFacetFactoryAbstract.java | 2 +- ...ameterValidationFacetViaMethodFactory.java | 11 +- ...opertyAccessorFacetViaAccessorFactory.java | 2 +- ...ropertyAutoCompleteFacetMethodFactory.java | 12 +- .../method/PropertyChoicesFacetViaMethod.java | 2 +- .../PropertyChoicesFacetViaMethodFactory.java | 13 +- .../PropertyDefaultFacetFromTypeFactory.java | 9 +- .../PropertyDefaultFacetViaMethodFactory.java | 14 +- .../DisabledFacetOnPropertyFromImmutable.java | 2 +- ...edFacetOnPropertyFromImmutableFactory.java | 6 +- ...isabledFacetOnPropertyInferredFactory.java | 6 +- ...MandatoryFacetOnProperyDefaultFactory.java | 6 +- ...ProjectingFacetFromPropertyAnnotation.java | 2 +- .../PropertyAnnotationFacetFactory.java | 79 +- ...yFacetFromXmlElementAnnotationFactory.java | 3 +- ...ExFacetForPatternAnnotationOnProperty.java | 5 +- .../CssClassFacetForPropertyLayoutXml.java | 21 +- .../HiddenFacetForPropertyLayoutXml.java | 21 +- .../LabelAtFacetForPropertyLayoutXml.java | 21 +- ...berDescribedFacetForPropertyLayoutXml.java | 21 +- .../MemberNamedFacetForPropertyLayoutXml.java | 10 +- .../MultiLineFacetForPropertyLayoutXml.java | 21 +- .../PropertyLayoutFacetFactory.java | 56 +- ...eredAdjustedFacetForPropertyLayoutXml.java | 21 +- ...ypicalLengthFacetForPropertyLayoutXml.java | 21 +- .../UnchangingFacetForPropertyLayoutXml.java | 21 +- .../TypicalLengthFacetOnPropertyFromType.java | 2 +- .../update/PropertySetterFacetFactory.java | 6 +- .../PropertyValidateFacetDefaultFactory.java | 6 +- ...PropertyValidateFacetViaMethodFactory.java | 13 +- ...igitsFacetFromJakartaDigitsAnnotation.java | 24 +- ...gitsFacetFromValueSemanticsAnnotation.java | 21 +- ...igitsFacetFromJakartaDigitsAnnotation.java | 24 +- ...gitsFacetFromValueSemanticsAnnotation.java | 21 +- ...gitsFacetFromValueSemanticsAnnotation.java | 21 +- ...igitsFacetFromJakartaDigitsAnnotation.java | 24 +- ...gitsFacetFromValueSemanticsAnnotation.java | 21 +- ...gitsFacetFromValueSemanticsAnnotation.java | 39 +- .../ValueSemanticsAnnotationFacetFactory.java | 89 +- .../core/metamodel/layout/DeweyOrderSet.java | 2 +- .../core/metamodel/object/MmSortUtils.java | 2 +- .../MetaModelPostProcessorAbstract.java | 2 +- ...ctionFromConfiguredRegexPostProcessor.java | 20 +- .../all/DescribedAsFromTypePostProcessor.java | 11 +- .../all/MixinSanityChecksValidator.java | 2 +- .../SynthesizeObjectNamingPostProcessor.java | 36 +- .../AuthorizationPostProcessor.java | 16 +- ...sizeDomainEventsForMixinPostProcessor.java | 11 +- ...ationFacetFromHiddenTypePostProcessor.java | 8 +- .../object/ProjectionFacetsPostProcessor.java | 42 +- .../ChoicesAndDefaultsPostProcessor.java | 40 +- .../TypicalLengthFromTypePostProcessor.java | 12 +- .../DisabledFromImmutablePostProcessor.java | 22 +- .../XmlLayoutRespectingFacetInstaller.java | 8 +- .../metamodel/MetaModelServiceDefault.java | 3 +- .../metamodel/spec/impl/FacetProcessor.java | 4 +- .../spec/impl/FacetedMethodsFactory.java | 2 +- .../spec/impl/ObjectActionDefault.java | 2 +- .../spec/impl/ObjectActionMixedIn.java | 3 +- .../spec/impl/ObjectAssociationAbstract.java | 2 +- .../spec/impl/ObjectMemberAbstract.java | 2 +- .../spec/impl/ObjectMetaDataFactory.java | 4 +- .../spec/impl/ObjectSpecificationDefault.java | 6 +- .../impl/OneToManyAssociationDefault.java | 2 +- .../impl/OneToManyAssociationMixedIn.java | 8 +- .../spec/impl/OneToOneAssociationDefault.java | 2 +- .../spec/impl/OneToOneAssociationMixedIn.java | 6 +- .../spec/impl/RegularMemberFactory.java | 2 +- .../SyntheticNavigationActionFactory.java | 53 +- ...notationEnforcesMetamodelContribution.java | 2 +- .../metamodel/spec/impl/_JUnitSupport.java | 2 +- .../validator/ValidationFailureUtils.java | 2 +- .../metamodel/facetapi/FacetAbstractTest.java | 8 +- .../facets/FacetFactoryTestAbstract.java | 2 + ...nnotationFacetFactoryTest_domainEvent.java | 2 +- ...nFacetFactoryTest_executionPublishing.java | 22 +- .../prototype/PrototypeFacetAbstractTest.java | 31 +- .../collections/JavaCollectionFacetTest.java | 17 +- .../CollectionAnnotationFacetFactoryTest.java | 30 +- ...ordingAwareCommandPublishingFacetTest.java | 33 +- .../CssClassFacetMethodWithProblemTest.java | 14 +- .../ident/icon/IconFacetMethodTest.java | 12 +- .../ident/layout/LayoutFacetMethodTest.java | 12 +- .../ident/title/TitleFacetViaMethodTest.java | 9 +- .../TitleFacetViaMethodsFactoryTest.java | 7 +- .../TitleFacetViaTitleAnnotationTest.java | 14 +- .../facets/object/mixin/MixinIntendedAs.java | 2 +- .../NavigableSubtreeFacetFactoryTest.java | 44 +- .../memberorder/DeweyOrderComparatorTest.java | 17 +- .../memberorder/DeweyOrderSetTest.java | 17 +- .../PropertyAnnotationFacetFactoryTest.java | 31 +- ...tStyleFacetFromPropertyAnnotationTest.java | 48 +- ...ueSemanticsAnnotationFacetFactoryTest.java | 13 +- .../ObjectActionLayoutXmlDefaultTest.java | 14 +- .../services/grid/GridLoadingTest.java | 2 +- .../services/grid/LayoutSwitchingTest.java | 14 +- .../MetaModelServiceDefaultTest.java | 2 +- .../impl/ObjectAssociationAbstractTest.java | 50 +- ...tAssociationAbstractTest_alwaysHidden.java | 29 +- .../impl/OneToManyAssociationDefaultTest.java | 11 +- .../impl/OneToOneAssociationAbstractTest.java | 43 +- .../bootstrap/MenuBarsServiceBootstrap.java | 2 +- .../bootstrap/MenuBarsServiceBSTest.java | 18 +- .../TenantedAuthorizationPostProcessor.java | 16 +- ...PdfJsViewerFacetFromAnnotationFactory.java | 14 +- ...sViewer_IntegTest.dump_facets.approved.xml | 26 +- ...nDomain_IntegTest.dump_facets.approved.xml | 26 +- ...sViewer_IntegTest.dump_facets.approved.xml | 24 +- ...pDomain_IntegTest.dump_facets.approved.xml | 24 +- .../facets/SseAnnotationFacetFactory.java | 7 +- .../metamodel/JdbcEntityFacetFactory.java | 6 +- .../entity/JpaEntityFacetFactory.java | 9 +- ...alFromJpaColumnAnnotationFacetFactory.java | 13 +- ...ryFromJpaColumnAnnotationFacetFactory.java | 7 +- ...nalDigitsFacetFromJpaColumnAnnotation.java | 24 +- ...thFromJpaColumnAnnotationFacetFactory.java | 8 +- ...talDigitsFacetFromJpaColumnAnnotation.java | 24 +- ...nalDigitsFacetFromJpaColumnAnnotation.java | 24 +- .../JpaTransientAnnotationFacetFactory.java | 9 +- .../table/JpaTableAnnotationFacetFactory.java | 11 +- ...utoCompleteGeneratedQueryFacetFactory.java | 11 +- ...etaModelRegressionTest.verify.approved.xml | 1084 ++++++++--------- 234 files changed, 2644 insertions(+), 3123 deletions(-) create mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/{facets => facetapi}/FacetedMethod.java (95%) rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/{facets => facetapi}/FacetedMethodParameter.java (92%) rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/{facets => facetapi}/TypedFacetHolder.java (83%) create mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetRecord.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacetRecord.java diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessor.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessor.java index 18b86f56b2f..dd73814fe99 100644 --- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessor.java +++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanFactoryPostProcessor.java @@ -20,8 +20,11 @@ import java.util.Objects; -import jakarta.inject.Named; - +import org.apache.causeway.applib.annotation.DomainObject; +import org.apache.causeway.applib.annotation.DomainService; +import org.apache.causeway.commons.internal.base._Timing; +import org.apache.causeway.core.config.CausewayModuleCoreConfig; +import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier.ContextType; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; @@ -32,12 +35,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; -import org.apache.causeway.applib.annotation.DomainObject; -import org.apache.causeway.applib.annotation.DomainService; -import org.apache.causeway.commons.internal.base._Timing; -import org.apache.causeway.core.config.CausewayModuleCoreConfig; -import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier.ContextType; - +import jakarta.inject.Named; import lombok.extern.slf4j.Slf4j; /** @@ -87,8 +85,8 @@ public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFac this.componentScanResult = new CausewayBeanTypeRegistry(introspectableTypes); log.info("post processing {}/{} bean definitions took {}ms", + introspectableTypes.size(), beanFactory.getBeanDefinitionCount(), - introspectableTypes.size(), stopWatch.getMillis()); if(log.isDebugEnabled()) { diff --git a/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationAutoConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationAutoConfiguration.java index 003da1c9f0e..c626b2a0329 100644 --- a/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationAutoConfiguration.java +++ b/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationAutoConfiguration.java @@ -2,6 +2,8 @@ import java.util.Optional; +import org.apache.causeway.commons.internal.observation.ObservationClosure; +import org.apache.causeway.core.config.observation.CausewayObservationAutoConfiguration.DiscardedSpanExportingPredicate; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -9,16 +11,13 @@ import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Profile; -import org.apache.causeway.commons.internal.observation.ObservationClosure; -import org.apache.causeway.core.config.observation.CausewayObservationAutoConfiguration.DiscardedSpanExportingPredicate; - import io.micrometer.observation.ObservationRegistry; import io.micrometer.tracing.exporter.FinishedSpan; import io.micrometer.tracing.exporter.SpanExportingPredicate; /** * Makes observation an opt-in choice based on Spring Profile 'observation' being active. - * + * *

see Spring's org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration */ @AutoConfiguration @@ -27,7 +26,7 @@ DiscardedSpanExportingPredicate.class }) public class CausewayObservationAutoConfiguration { - + /** * Does not allow discarded spans to be exported. Register with Spring (before auto configuration is running). */ @@ -37,26 +36,26 @@ public boolean isExportable(final FinishedSpan span) { return !span.getTags().containsKey(ObservationClosure.DISCARD_KEY.getKey()); } } - + @Profile("!observation") - @Bean - ObservationRegistry noopObservationRegistry() { + @Bean + public ObservationRegistry noopObservationRegistry() { return ObservationRegistry.NOOP; } - + /** * Same as in org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration, - * that is, acts as a fallback. + * that is, acts as a fallback. */ @Profile("observation") @Bean @ConditionalOnMissingBean - ObservationRegistry observationRegistry() { + public ObservationRegistry observationRegistry() { return ObservationRegistry.create(); } - + @Bean - CausewayObservationIntegration causewayObservationIntegration( + public CausewayObservationIntegration causewayObservationIntegration( final Optional observationRegistryOpt) { return new CausewayObservationIntegration(observationRegistryOpt); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java index 2312138cce3..74bfb815a3c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/Facet.java @@ -23,7 +23,6 @@ import org.apache.causeway.applib.Identifier; import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet; @@ -127,7 +126,7 @@ default Identifier getFeatureIdentifier() { } default Optional getSharedFacetRanking() { - return facetHolder().getFacetRanking(facetType()); + return facetHolder().lookupFacetRanking(facetType()); } default FacetRanking getSharedFacetRankingElseFail() { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java index c831ffe6365..61b84be4ba5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java @@ -27,7 +27,7 @@ public abstract class FacetAbstract implements Facet, HasMetaModelContext { - @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true) private final @NonNull Class facetType; @Override @@ -35,7 +35,7 @@ public Precedence precedence() { return Precedence.DEFAULT; } - @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true) private final @NonNull FacetHolder facetHolder; protected FacetAbstract( @@ -43,7 +43,7 @@ protected FacetAbstract( final FacetHolder facetHolder) { this.facetType = facetType; this.facetHolder = facetHolder; - //TODO refactor facetHolder.addFacet(this); + _BindUtil.bind(this); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java index bd416475937..bcbe4c0ab30 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java @@ -22,14 +22,13 @@ import java.util.function.Predicate; import java.util.stream.Stream; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.Identifier; import org.apache.causeway.applib.id.LogicalType; import org.apache.causeway.applib.services.i18n.HasTranslationContext; import org.apache.causeway.applib.services.i18n.TranslationContext; import org.apache.causeway.core.metamodel.context.HasMetaModelContext; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.jspecify.annotations.NonNull; /** * Anything in the metamodel (which also includes peers in the reflector) that @@ -86,16 +85,6 @@ default Optional lookupNonFallbackFacet( return lookupFacet(facetType, facet->!facet.precedence().isFallback()); } - /** - * Get the facet of the specified type (as per the type it reports from - * {@link Facet#facetType()}). - * @deprecated - */ - @Deprecated - default T getFacet(final Class facetType) { - return lookupFacet(facetType).orElse(null); - } - // -- CONTAINS /** @@ -135,20 +124,10 @@ default Stream streamFacets(final Class requiredType) { .map(requiredType::cast); } - /** - * Adds the facet, extracting its {@link Facet#facetType() type} as the key. - * - *

- * Any previously added facet of the same type will be overwritten, - * when given {@link Facet} has equal or higher precedence. - * Otherwise is ignored. - */ - void addFacet(@NonNull Facet facet); - // -- VALIDATION SUPPORT Stream streamFacetRankings(); - Optional getFacetRanking(Class facetType); + Optional lookupFacetRanking(Class facetType); // -- TRANSLATION CONTEXT diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java new file mode 100644 index 00000000000..3e8dfbc24c6 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java @@ -0,0 +1,38 @@ +/* + * 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.causeway.core.metamodel.facetapi; + +import org.jspecify.annotations.Nullable; + +interface FacetHolderInternal extends FacetHolder { + + /** + * Adds the facet, extracting its {@link Facet#facetType() type} as the key. + * + *

Any previously added facet of the same type will be overwritten, + * when given {@link Facet} has equal or higher precedence. + * Otherwise is ignored. + * + *

If facet is null acts as a no-op. + */ + void addFacet(@Nullable Facet facet); + + void removeFacet(@Nullable Facet facet); + +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java index 69efbaf77bc..481422592d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java @@ -22,11 +22,10 @@ import java.util.Optional; import java.util.stream.Stream; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.Identifier; import org.apache.causeway.applib.services.i18n.TranslationContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * Provides a merged view of the local and the shared list of {@link Facet}s, @@ -46,7 +45,7 @@ record FacetHolderLayered( @NonNull Identifier featureIdentifier, @NonNull FacetHolder shared, @NonNull FacetHolder local) -implements FacetHolder { +implements FacetHolderInternal { @Override public Identifier getFeatureIdentifier() { return featureIdentifier; } @@ -66,12 +65,27 @@ public TranslationContext getTranslationContext() { } @Override - public void addFacet(final @NonNull Facet facet) { + public void addFacet(final @Nullable Facet facet) { + if(facet==null) + return; + // eg. if a Facet originates from layout.xml introspection, don't install it on the shared FacetHolder + var facetHolder = facet.isObjectTypeSpecific() + ? local + : shared; + _BindUtil.resolveInternalElseFail(facetHolder) + .addFacet(facet); + } + + @Override + public void removeFacet(@Nullable final Facet facet) { + if(facet==null) + return; // eg. if a Facet originates from layout.xml introspection, don't install it on the shared FacetHolder var facetHolder = facet.isObjectTypeSpecific() ? local : shared; - facetHolder.addFacet(facet); + _BindUtil.resolveInternalElseFail(facetHolder) + .removeFacet(facet); } @Override @@ -134,13 +148,13 @@ public Stream streamFacetRankings() { if(local.getFacetCount()==0) return shared.streamFacetRankings(); return streamPopulatedFacetTypes() - .map(facetType->getFacetRanking(facetType).orElseThrow()); + .map(facetType->lookupFacetRanking(facetType).orElseThrow()); } @Override - public Optional getFacetRanking(final Class facetType) { - var localFacetRanking = local.getFacetRanking(facetType); - var sharedFacetRanking = shared.getFacetRanking(facetType); + public Optional lookupFacetRanking(final Class facetType) { + var localFacetRanking = local.lookupFacetRanking(facetType); + var sharedFacetRanking = shared.lookupFacetRanking(facetType); if(localFacetRanking.isEmpty()) return sharedFacetRanking; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java index a5201717181..ca49533399e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java @@ -23,10 +23,10 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.Identifier; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * Provides a (simple) list of {@link Facet}s. @@ -35,7 +35,7 @@ record FacetHolderSimple( MetaModelContext metaModelContext, Identifier featureIdentifier, Map, FacetRanking> rankingByType) -implements FacetHolder { +implements FacetHolderInternal { public FacetHolderSimple( final @NonNull MetaModelContext metaModelContext, @@ -61,14 +61,26 @@ public boolean containsFacet(final Class facetType) { } @Override - public void addFacet(final @NonNull Facet facet) { + public void addFacet(final @Nullable Facet facet) { + if(facet==null) + return; rankingByType.computeIfAbsent(facet.facetType(), FacetRanking::new) .add(facet); } + @Override + public void removeFacet(@Nullable final Facet facet) { + if(facet==null) + return; + lookupFacetRanking(facet.facetType()) + .ifPresent(ranking->{ + ranking.remove(facet); + }); + } + @Override public Optional lookupFacet(final Class facetType) { - return getFacetRanking(facetType) + return lookupFacetRanking(facetType) .flatMap(facetRanking->facetRanking.getWinner(facetType)); } @@ -92,7 +104,7 @@ public Stream streamFacetRankings() { } @Override - public Optional getFacetRanking(final Class facetType) { + public Optional lookupFacetRanking(final Class facetType) { return Optional.ofNullable(rankingByType.get(facetType)); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java index b69abc4cb2e..774221b1617 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java @@ -22,14 +22,14 @@ import java.util.Optional; import java.util.function.Predicate; -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.commons.internal.collections._Lists; import org.apache.causeway.commons.internal.collections._Multimaps; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet.Key; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; +import org.springframework.util.Assert; /** * Multiple {@link FacetRank}(s) are collected into a single {@link FacetRanking}. @@ -70,6 +70,16 @@ FacetRank add(final @Nullable F facet) { return this; } + public void remove(final F facet) { + if(facet==null) + return; // no-op + + var key = QualifiedFacet.Key.forFacet(facet); + var list = facetsByQualifier.getOrElseEmpty(key); + var success = list.remove(facet); + Assert.isTrue(success, ()->"facet not found " + facet); + } + /** * Removes all matching facets from the underlying collections. */ diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java index e34e7622a8c..fb6f180bfa6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java @@ -22,11 +22,10 @@ import java.util.function.BiConsumer; import java.util.function.Predicate; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.services.grid.GridService.LayoutKey; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; +import org.jspecify.annotations.NonNull; /** * Acts as a facade to {@link TypedFacetRanking}, encapsulating type casting complexity. @@ -49,6 +48,10 @@ public void add(final F facet) { delegate(facet).add(facet); } + public void remove(final F facet) { + delegate(facet).remove(facet); + } + public void addAll(final FacetRanking facetRanking) { @SuppressWarnings("unchecked") var a = delegate((Class)facetType); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java index a6ade20421c..7d05896250b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java @@ -24,6 +24,7 @@ import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -42,61 +43,16 @@ @UtilityClass public final class FacetUtil { - /** - * Attaches the {@link Facet} to its {@link Facet#getFacetHolder()}. - * @param facet - non-null - * @return the argument as is - */ - public static F addFacet(final @NonNull F facet) { - facet.facetHolder().addFacet(facet); - return facet; - } - - /** - * Attaches the {@link Facet} to its {@link Facet#getFacetHolder() facet - * holder} based on precedence. Acts as a no-op if facet is null. - * @param facetIfAny - null-able (for fail-safety) - * @return the argument as is - or just in case if null converted to an Optional.empty() - */ - public static Optional addFacetIfPresent(final @Nullable Optional facetIfAny) { - if (facetIfAny == null) return Optional.empty(); - - facetIfAny - .ifPresent(facet->facet.facetHolder().addFacet(facet)); - return facetIfAny; - } - - /** - * Attaches each {@link Facet} to its {@link Facet#getFacetHolder() facet - * holder} based on precedence. - * - * @return whether given {@code facetList} contains any non-null facets - */ - public static boolean addFacets(final @NonNull Iterable facetList) { - boolean addedFacets = false; - for (var facet : facetList) { - addedFacets = addFacetIfPresent(Optional.ofNullable(facet)).isPresent() - | addedFacets; - } - return addedFacets; - } - public static XmlSchema.ExtensionData getFacetsByType(final FacetHolder facetHolder) { - return new XmlSchema.ExtensionData<>() { - - @Override - public int size() { + @Override public int size() { return facetHolder.getFacetCount(); } - @SuppressWarnings("unchecked") - @Override - public void visit(final BiConsumer, T> elementConsumer) { + @Override public void visit(final BiConsumer, T> elementConsumer) { facetHolder.streamFacets() - .forEach(facet->elementConsumer.accept((Class)facet.facetType(), (T)facet)); + .forEach(facet->elementConsumer.accept((Class)facet.facetType(), (T)facet)); } - }; } @@ -108,11 +64,15 @@ public void visit(final BiConsumer, T> elementConsumer) { * then adds given facet to its facetHolder, honoring precedence. */ public static void updateFacet(final @Nullable Facet facet) { - if(facet==null) return; + if(facet==null) + return; + var facetHolder = facet.facetHolder(); var qualifierKey = QualifiedFacet.Key.forFacet(facet); - facet.facetHolder().getFacetRanking(facet.facetType()) + _BindUtil.unbind(facet); + + facetHolder.lookupFacetRanking(facet.facetType()) .ifPresent(ranking->ranking.purgeIf(facet.facetType(), qualifierKey, // discriminate by qualifier facet.getClass()::isInstance, // facet filter @@ -121,7 +81,7 @@ public static void updateFacet(final @Nullable Facet facet) { : prec.ordinal()<=facet.precedence().ordinal() // don't change ranks of higher precedence )); - addFacet(facet); + _BindUtil.bind(facet); } /** @@ -185,13 +145,13 @@ public static Optional lookupFacetInButExcluding( if(facetHolders==null) return Optional.empty(); return Stream.of(facetHolders) - .filter(Objects::nonNull) - .filter(x -> !excluded.test(x)) - .map(facetHolder->facetHolder.lookupFacet(facetType).orElse(null)) - .filter(Objects::nonNull) - .reduce((a, b)->b.precedence().ordinal()>a.precedence().ordinal() - ? b - : a); + .filter(Objects::nonNull) + .filter(x -> !excluded.test(x)) + .map(facetHolder->facetHolder.lookupFacet(facetType).orElse(null)) + .filter(Objects::nonNull) + .reduce((a, b)->b.precedence().ordinal()>a.precedence().ordinal() + ? b + : a); } /** @@ -209,17 +169,18 @@ public static Optional computeIfAbsentExact( final Function facetFactory) { T winnerFacet = facetHolder.lookupFacet(facetType).orElse(null); - if(winnerFacet==null) return Optional.of(addFacet(facetFactory.apply(facetHolder))); + if(winnerFacet==null) + return Optional.of(_BindUtil.bind(facetFactory.apply(facetHolder))); if(winnerFacet.getClass().equals(facetExactClass)) return Optional.of(winnerFacet).map(facetExactClass::cast); // check if we are allowed to override based on precedence if(winnerFacet.precedence().ordinal()<=overrideUpToIncluding.ordinal()) - return Optional.of(addFacet(facetFactory.apply(facetHolder))); + return Optional.of(_BindUtil.bind(facetFactory.apply(facetHolder))); // not allowed to override return Optional.empty(); } public static void visitAttributes(final Facet facet, final BiConsumer visitor) { - visitor.accept("facet", ClassUtils.getShortName(facet.getClass())); + visitor.accept("facet", canonicalFacetShortName(facet)); visitor.accept("precedence", facet.precedence().name()); var interactionAdvisors = interactionAdvisors(facet, ", "); @@ -230,6 +191,13 @@ public static void visitAttributes(final Facet facet, final BiConsumermarker.isAssignableFrom(facet.getClass())) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethod.java similarity index 95% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethod.java index ee6bc555029..35fbaeca7b2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethod.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.causeway.core.metamodel.facets; +package org.apache.causeway.core.metamodel.facetapi; import java.util.ArrayList; import java.util.List; @@ -33,9 +33,6 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.commons.semantics.CollectionSemantics; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; @@ -144,11 +141,7 @@ private static Can getParameters( // this is based on similar logic to ActionAnnotationFacetFactory#processTypeOf var facetedMethodParamToUse = TypeOfFacet .inferFromMethodParameter(actionMethod, paramIndex, facetedMethodParam) - .map(typeOfFacet->{ - // (corresponds to similar code for OneToManyAssociation in FacetMethodsBuilder). - FacetUtil.addFacet(typeOfFacet); - return facetedMethodParam.withResolvedType(typeOfFacet.value()); - }) + .map(typeOfFacet -> facetedMethodParam.withResolvedType(typeOfFacet.value())) .orElse(facetedMethodParam); actionParams.add(facetedMethodParamToUse); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java similarity index 92% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java index cff56065485..0b7e51bfd57 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java @@ -16,14 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.causeway.core.metamodel.facets; +package org.apache.causeway.core.metamodel.facetapi; import org.apache.causeway.applib.id.LogicalType; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType; import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; public record FacetedMethodParameter( int paramIndex, @@ -59,4 +57,5 @@ public String toString() { return resolvedType.toString(); } + } \ No newline at end of file diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/HasFacetHolder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/HasFacetHolder.java index 3746d7837dd..6b700fea594 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/HasFacetHolder.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/HasFacetHolder.java @@ -57,19 +57,14 @@ default Stream streamFacets() { return facetHolder().streamFacets(); } - @Override - default void addFacet(final Facet facet) { - facetHolder().addFacet(facet); - } - @Override default Stream streamFacetRankings() { return facetHolder().streamFacetRankings(); } @Override - default Optional getFacetRanking(final Class facetType) { - return facetHolder().getFacetRanking(facetType); + default Optional lookupFacetRanking(final Class facetType) { + return facetHolder().lookupFacetRanking(facetType); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java index 9bf3a014da8..99e09366023 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java @@ -1,8 +1,7 @@ package org.apache.causeway.core.metamodel.facetapi; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.commons.internal.base._Strings; +import org.jspecify.annotations.Nullable; /** * A {@link Facet} can be qualified (similar to Spring beans) in order to allow for alternative @@ -19,7 +18,6 @@ * * @since 4.0 */ -@FunctionalInterface public interface QualifiedFacet { record Key( @@ -55,6 +53,6 @@ public Key toQualified() { } } - @Nullable String qualifier(); + default @Nullable String qualifier() { return null; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetHolder.java similarity index 83% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetHolder.java index 2b77d9ee6f0..9ee7a3dda32 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetHolder.java @@ -16,12 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.causeway.core.metamodel.facets; +package org.apache.causeway.core.metamodel.facetapi; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facetapi.HasFacetHolder; /** * A {@link FacetHolder} that also has a {@link ResolvedType}. diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java index 2ef9bed6981..8af0d71a6a1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java @@ -29,14 +29,13 @@ import java.util.function.Consumer; import java.util.function.Predicate; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.services.grid.GridService.LayoutKey; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.commons.internal.collections._Maps; import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; +import org.jspecify.annotations.NonNull; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -112,6 +111,19 @@ public void addAll(final @NonNull TypedFacetRanking facetRanking) { .forEach(this::add)); } + public void remove(final F facet) { + if(facet == null) + return; + // guard against invalidly mocked facets + var facetPrecedence = Objects.requireNonNull(facet.precedence(), + ()->String.format("facet %s declares no precedence", facet.getClass())); + if(facetPrecedence.ordinal()>=Facet.Precedence.EVENT.ordinal()) + throw new UnsupportedOperationException(); + ranksByPrecedence.get(facetPrecedence) + .remove(facet); + nonEventWinnerCache.clear(); // for simplicity invalidate the entire cache + } + /** * Optionally returns the winning facet, considering the event facet (if any) and the top rank, * based on whether there was any added that has given facetType. diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java new file mode 100644 index 00000000000..418ef6ffd0c --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java @@ -0,0 +1,63 @@ +/* + * 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.causeway.core.metamodel.facetapi; + +import java.util.Objects; +import java.util.Optional; + +import org.jspecify.annotations.Nullable; +import org.springframework.util.Assert; + +import lombok.experimental.UtilityClass; + +@UtilityClass +class _BindUtil { + + @Nullable + F bind(final @Nullable F facet) { + if(facet==null) + return facet; + Assert.isTrue(facet instanceof FacetAbstract, ()->"not a Facet that inherits FacetAbstract %s".formatted(facet.getClass().getName())); + resolveInternalElseFail(facet.facetHolder()) + .addFacet(facet); + return facet; + } + + FacetHolderInternal resolveInternalElseFail(final FacetHolder facetHolder) { + return resolveInternal(Objects.requireNonNull(facetHolder)) + .orElseThrow(()-> + new UnsupportedOperationException("FacetHolder is not internal %s".formatted(facetHolder.getClass().getName()))); + } + + Optional resolveInternal(final @Nullable FacetHolder facetHolder) { + if(facetHolder == null) + return Optional.empty(); + if(facetHolder instanceof FacetHolderInternal facetHolderInternal) + return Optional.of(facetHolderInternal); + if(facetHolder instanceof HasFacetHolder hasFacetHolder) + return resolveInternal(hasFacetHolder.facetHolder()); + return Optional.empty(); + } + + void unbind(@Nullable final Facet facet) { + resolveInternalElseFail(facet.facetHolder()) + .removeFacet(facet); + } + +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/AccessorFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/AccessorFacetFactoryAbstract.java index 2dff11ebe27..a825a704da0 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/AccessorFacetFactoryAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/AccessorFacetFactoryAbstract.java @@ -22,6 +22,7 @@ import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.methods.MethodPrefixBasedFacetFactoryAbstract; @@ -56,7 +57,7 @@ public final void process(final ProcessMethodContext processMethodContext) { var typeSpec = processMethodContext.loadSpecificationTypeOnly(processMethodContext.cls()); var facetHolder = processMethodContext.facetHolder(); - addFacet(createFacet(typeSpec, accessorMethod, facetHolder)); + createFacet(typeSpec, accessorMethod, facetHolder); } protected abstract PropertyOrCollectionAccessorFacet createFacet( diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java index f3d0235ca74..1db903be7f4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java @@ -34,6 +34,8 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MethodRemover; import org.apache.causeway.core.metamodel.facetapi.MethodRemover.HasMethodRemover; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactoryAbstract.java index a255b8b2021..7f0fc431726 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactoryAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactoryAbstract.java @@ -18,22 +18,16 @@ */ package org.apache.causeway.core.metamodel.facets; -import java.util.Optional; - -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.annotation.ObjectSupport; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal.reflection._ClassCache; import org.apache.causeway.core.metamodel.context.HasMetaModelContext; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.jspecify.annotations.NonNull; import lombok.AccessLevel; import lombok.Getter; -import org.jspecify.annotations.NonNull; public abstract class FacetFactoryAbstract implements FacetFactory, HasMetaModelContext { @@ -64,26 +58,6 @@ public void process(final ProcessMethodContext processMethodContext) { public void processParams(final ProcessParameterContext processParameterContext) { } - // -- FACET UTILITIES - - /** - * Shortcut to {@link FacetUtil#addFacet}. - * @param facet - non-null - * @return the argument as is - */ - public F addFacet(final @NonNull F facet) { - return FacetUtil.addFacet(facet); - } - - /** - * Shortcut to {@link FacetUtil#addFacetIfPresent}. Acts as a no-op if facet is null. - * @param facetIfAny - null-able - * @return the argument as is - or just in case if null converted to an Optional.empty() - */ - public Optional addFacetIfPresent(final @Nullable Optional facetIfAny) { - return FacetUtil.addFacetIfPresent(facetIfAny); - } - // -- METHOD UTILITITES protected static final Class[] NO_ARG = new Class[0]; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasFacetedMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasFacetedMethod.java index 7035edc8c78..6654b7f301f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasFacetedMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasFacetedMethod.java @@ -18,6 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; + @FunctionalInterface public interface HasFacetedMethod { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java index 0bab3402b0f..76a11283103 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java @@ -86,9 +86,8 @@ void processExplicit(final ProcessMethodContext processMethodContext, final Opti var holder = processMethodContext.facetHolder(); // check for @Action at all. - addFacetIfPresent( - ActionExplicitFacetForActionAnnotation - .create(actionIfAny, holder)); + ActionExplicitFacetForActionAnnotation + .create(actionIfAny, holder); } void processDomainEvent(final ProcessMethodContext processMethodContext, final Optional actionIfAny) { @@ -115,22 +114,21 @@ void processDomainEvent(final ProcessMethodContext processMethodContext, final O // search for @Action(domainEvent=...), else use the default event type var actionDomainEventFacet = ActionDomainEventFacet.create(actionIfAny, typeSpec, processMethodContext.facetHolder()); - addFacet(actionDomainEventFacet); // replace the current actionInvocationFacet with one that will // emit the appropriate domain event and then delegate onto the underlying - addFacet( - /* lazily binds the event-type to the actionDomainEventFacet, - * such that any changes to the latter during post processing - * are reflected here as well - */ - isAction - ? new ActionInvocationFacetForAction( - actionDomainEventFacet, - actionMethod, typeSpec, returnSpec, processMethodContext.facetHolder()) - // when in a mixed-in prop/coll situation, the prop/coll event-type must be used instead - : new ActionInvocationFacetForMixedInPropertyOrCollection( - actionMethod, typeSpec, returnSpec, processMethodContext.facetHolder())); + /* lazily binds the event-type to the actionDomainEventFacet, + * such that any changes to the latter during post processing + * are reflected here as well + */ + @SuppressWarnings("unused") + var actionInvocationFacet = isAction + ? new ActionInvocationFacetForAction( + actionDomainEventFacet, + actionMethod, typeSpec, returnSpec, processMethodContext.facetHolder()) + // when in a mixed-in prop/coll situation, the prop/coll event-type must be used instead + : new ActionInvocationFacetForMixedInPropertyOrCollection( + actionMethod, typeSpec, returnSpec, processMethodContext.facetHolder()); } finally { processMethodContext.removeMethod(actionMethod.asMethodForIntrospection()); } @@ -140,24 +138,21 @@ void processRestrictTo(final ProcessMethodContext processMethodContext, final Op var facetedMethod = processMethodContext.facetHolder(); // search for @Action(restrictTo=...) - addFacetIfPresent( - PrototypeFacetForActionAnnotation - .create( - actionIfAny, facetedMethod, - ()->super.getSystemEnvironment().deploymentType())); + PrototypeFacetForActionAnnotation + .create( + actionIfAny, facetedMethod, + ()->super.getSystemEnvironment().deploymentType()); } void processSemantics(final ProcessMethodContext processMethodContext, final Optional actionIfAny) { var facetedMethod = processMethodContext.facetHolder(); // check for @Action(semantics=...) - addFacet( - actionIfAny - .map(Action::semantics) - .filter(semanticsOf -> semanticsOf != SemanticsOf.NOT_SPECIFIED) - .map(semanticsOf -> new ActionSemanticsFacet("ActionAnnotation", semanticsOf, facetedMethod)) - .orElseGet(()->new ActionSemanticsFacet("FallbackToNonIdempotent", SemanticsOf.NON_IDEMPOTENT, facetedMethod)) - ); + actionIfAny + .map(Action::semantics) + .filter(semanticsOf -> semanticsOf != SemanticsOf.NOT_SPECIFIED) + .map(semanticsOf -> new ActionSemanticsFacet("ActionAnnotation", semanticsOf, facetedMethod)) + .orElseGet(()->new ActionSemanticsFacet("FallbackToNonIdempotent", SemanticsOf.NON_IDEMPOTENT, facetedMethod)); } void processCommandPublishing( @@ -175,8 +170,8 @@ void processCommandPublishing( return; // check for @Action(commandPublishing=...) - addFacetIfPresent(CommandPublishingFacetForActionAnnotation - .create(actionIfAny, getConfiguration(), getServiceInjector(), facetedMethod)); + CommandPublishingFacetForActionAnnotation + .create(actionIfAny, getConfiguration(), getServiceInjector(), facetedMethod); } void processExecutionPublishing( @@ -196,9 +191,9 @@ void processExecutionPublishing( return; // check for @Action(executionPublishing=...) - addFacetIfPresent( - ExecutionPublishingFacetForActionAnnotation - .create(actionIfAny, getConfiguration(), facetedMethod)); + + ExecutionPublishingFacetForActionAnnotation + .create(actionIfAny, getConfiguration(), facetedMethod); } @@ -210,15 +205,13 @@ void processTypeOf(final ProcessMethodContext processMethodContext, final Option var methodReturnType = method.getReturnType(); CollectionSemantics.valueOf(methodReturnType) - .ifPresent(collectionType->{ - addFacetIfPresent( + .ifPresent(collectionType->{ TypeOfFacetForActionAnnotation.create(actionIfAny, collectionType, facetedMethod) .or( // else infer from generic type arg if any ()->TypeOfFacet.inferFromMethodReturnType(method, facetedMethod) - )); - - }); + ); + }); } void processChoicesFrom(final ProcessMethodContext processMethodContext, final Optional actionIfAny) { @@ -226,14 +219,11 @@ void processChoicesFrom(final ProcessMethodContext processMethodContext, final O var holder = processMethodContext.facetHolder(); // check for @Action(choicesFrom=...) - addFacetIfPresent( - ChoicesFromFacetForActionAnnotation - .create(actionIfAny, holder)); - - addFacetIfPresent( - LayoutGroupFacetForActionAnnotation - .create(actionIfAny, holder)); + ChoicesFromFacetForActionAnnotation + .create(actionIfAny, holder); + LayoutGroupFacetForActionAnnotation + .create(actionIfAny, holder); } void processFileAccept(final ProcessMethodContext processMethodContext, final Optional actionIfAny) { @@ -241,9 +231,8 @@ void processFileAccept(final ProcessMethodContext processMethodContext, final Op var holder = processMethodContext.facetHolder(); // check for @Action(fileAccept=...) - addFacetIfPresent( - FileAcceptFacetForActionAnnotation - .create(actionIfAny, holder)); + FileAcceptFacetForActionAnnotation + .create(actionIfAny, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java index 416b89e6118..97eef04edcb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java @@ -22,7 +22,7 @@ import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; public class ActionExplicitFacetForActionAnnotation extends ActionExplicitFacetAbstract { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/contributing/derived/ContributingFacetFromMixinFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/contributing/derived/ContributingFacetFromMixinFacetFactory.java index 92248dc9a03..8702a8fbefc 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/contributing/derived/ContributingFacetFromMixinFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/contributing/derived/ContributingFacetFromMixinFacetFactory.java @@ -21,7 +21,6 @@ import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.annotation.ActionLayout; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; @@ -61,7 +60,7 @@ public void process(final ProcessMethodContext processMethodContext) { || processMethodContext.synthesizeOnMethodOrMixinType(ActionLayout.class, ()->{}).isPresent(); if(isForceContributedAsAction) { - FacetUtil.addFacet(ContributingFacetAbstract.createAsAction(facetedMethod)); + ContributingFacetAbstract.createAsAction(facetedMethod); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java index 5b64bb10640..b2ba8dc419c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java @@ -29,11 +29,9 @@ import org.apache.causeway.applib.Identifier; import org.apache.causeway.applib.annotation.HomePage; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.homepage.HomePageFacet; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -65,8 +63,8 @@ public void process(final ProcessMethodContext processMethodContext) { if (homepageAnnot == null) return; - final FacetedMethod facetHolder = processMethodContext.facetHolder(); - FacetUtil.addFacet(new HomePageFacetAnnotation(facetHolder)); + var facetHolder = processMethodContext.facetHolder(); + new HomePageFacetAnnotation(facetHolder); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java index 57a13504090..56180c211ee 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java @@ -54,50 +54,40 @@ public void process(final ProcessMethodContext processMethodContext) { .raiseAmbiguousMixinAnnotations(processMethodContext.facetHolder(), ActionLayout.class)); // cssClass - addFacetIfPresent( - CssClassFacetForActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + CssClassFacetForActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // cssClassFa - addFacetIfPresent( - FaFacetForActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + FaFacetForActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // describedAs - addFacetIfPresent( - MemberDescribedFacetForActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + MemberDescribedFacetForActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // hidden - addFacetIfPresent( - HiddenFacetForActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + HiddenFacetForActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // layoutGroup (explicit via field set, or implicit via associated collection) - addFacetIfPresent( - LayoutGroupFacetFromActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + LayoutGroupFacetFromActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // named - addFacetIfPresent( - NamedFacetForActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + NamedFacetForActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); // promptStyle - addFacetIfPresent( - createPromptStyleFacetForActionLayoutAnnotation(actionLayoutIfAny, getConfiguration(), facetHolder)); + createPromptStyleFacetForActionLayoutAnnotation(actionLayoutIfAny, getConfiguration(), facetHolder); // position - var actionPositionFacet = ActionPositionFacetForActionLayoutAnnotation + ActionPositionFacetForActionLayoutAnnotation .create(actionLayoutIfAny, facetHolder) .orElseGet(()->new ActionPositionFacetFallback(facetHolder)); - addFacet(actionPositionFacet); - // sequence (layout) - addFacetIfPresent( - LayoutOrderFacetFromActionLayoutAnnotation - .create(actionLayoutIfAny, facetHolder)); + LayoutOrderFacetFromActionLayoutAnnotation + .create(actionLayoutIfAny, facetHolder); } // -- HELPER diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java index d26e4b6d047..bc4f7fde0c7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java @@ -21,16 +21,12 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.ActionLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet; import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class ActionPositionFacetForActionLayoutXml extends ActionPositionFacetAbstract implements QualifiedFacet { @@ -45,23 +41,16 @@ public static Optional create( final var position = actionLayout.getPosition(); return Optional.ofNullable(position) - .map(pos->new ActionPositionFacetForActionLayoutXml(pos, holder, precedence, qualifier)); + .map(pos->new ActionPositionFacetForActionLayoutXml(pos, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private ActionPositionFacetForActionLayoutXml( final org.apache.causeway.applib.annotation.ActionLayout.Position position, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(position, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java index 861a77b55dc..7899614e460 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class CssClassFacetForActionLayoutXml extends CssClassFacetSimple implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String cssClass = _Strings.emptyToNull(actionLayout.getCssClass()); return cssClass != null - ? Optional.of(new CssClassFacetForActionLayoutXml(cssClass, holder, precedence, qualifier)) + ? Optional.of(new CssClassFacetForActionLayoutXml(cssClass, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private CssClassFacetForActionLayoutXml( final String value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForActionLayoutXml.java index 84438e6a9d1..b6b17a5cac1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForActionLayoutXml.java @@ -23,16 +23,12 @@ import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.applib.layout.component.CssClassFaPosition; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaStaticFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class FaFacetForActionLayoutXml extends FaStaticFacetAbstract implements QualifiedFacet { @@ -47,25 +43,18 @@ public static Optional create( final String cssClassFa = _Strings.emptyToNull(actionLayout.getCssClassFa()); CssClassFaPosition cssClassFaPosition = actionLayout.getCssClassFaPosition(); return cssClassFa != null - ? Optional.of(new FaFacetForActionLayoutXml(cssClassFa, cssClassFaPosition, holder, precedence, qualifier)) + ? Optional.of(new FaFacetForActionLayoutXml(cssClassFa, cssClassFaPosition, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private FaFacetForActionLayoutXml( final String value, final CssClassFaPosition position, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, position, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java index 24a28b8c2b7..7f03ec4620a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java @@ -22,7 +22,6 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.layout.component.ActionLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -30,9 +29,6 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class HiddenFacetForActionLayoutXml extends HiddenFacetAbstract implements QualifiedFacet { @@ -47,24 +43,17 @@ public static Optional create( final Where where = actionLayout.getHidden(); return where != null && where != Where.NOT_SPECIFIED - ? Optional.of(new HiddenFacetForActionLayoutXml(where, holder, precedence, qualifier)) + ? Optional.of(new HiddenFacetForActionLayoutXml(where, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private HiddenFacetForActionLayoutXml( final Where where, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(where, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java index 01677d813c6..dc03a9fb7a2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForActionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberDescribedFacetForActionLayoutXml extends MemberDescribedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -46,24 +42,17 @@ public static Optional create( return Optional.empty(); final String describedAs = _Strings.emptyToNull(actionLayout.getDescribedAs()); return describedAs != null - ? Optional.of(new MemberDescribedFacetForActionLayoutXml(describedAs, holder, precedence, qualifier)) + ? Optional.of(new MemberDescribedFacetForActionLayoutXml(describedAs, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberDescribedFacetForActionLayoutXml( final String described, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(described, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java index 5a4d6b37a7e..9a60a720c7f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForActionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberNamedFacetForActionLayoutXml extends MemberNamedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String named = _Strings.emptyToNull(actionLayout.getNamed()); return named != null - ? Optional.of(new MemberNamedFacetForActionLayoutXml(named, holder, precedence, qualifier)) + ? Optional.of(new MemberNamedFacetForActionLayoutXml(named, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberNamedFacetForActionLayoutXml( final String named, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(named, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java index 4893e2a0ee4..9422f414289 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java @@ -20,34 +20,35 @@ import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.annotation.SemanticsOf; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import lombok.Getter; +import lombok.experimental.Accessors; + /** * Represents the semantics of an action. - *

- * Specifically, whether it is safe, idempotent or non-idempotent. + * + *

Specifically, whether it is safe, idempotent or non-idempotent. */ -public record ActionSemanticsFacet( - @NonNull String origin, - @NonNull SemanticsOf value, - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence - ) implements Facet { +public final class ActionSemanticsFacet extends FacetAbstract { - @Override public Class facetType() { return getClass(); } + @Getter @Accessors(fluent = true) + private final String origin; + @Getter @Accessors(fluent = true) + private final SemanticsOf value; - public ActionSemanticsFacet(final String origin, final SemanticsOf of, final FacetHolder holder) { - this(origin, of, holder, Precedence.DEFAULT); + public ActionSemanticsFacet(final String origin, final SemanticsOf of, final FacetHolder facetHolder) { + super(ActionSemanticsFacet.class, facetHolder); + this.origin = origin; + this.value = of; } @Override public void visitAttributes(final BiConsumer visitor) { - Facet.super.visitAttributes(visitor); - visitor.accept("origin", origin()); + super.visitAttributes(visitor); + visitor.accept("origin", origin); visitor.accept("value", value); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java index a734af0a6c8..6e1eb4b6d12 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java @@ -56,9 +56,9 @@ protected final void search( var validateMethod = searchResult.supportingMethod(); processMethodContext.removeMethod(validateMethod); var patConstructor = searchResult.patConstructor(); - addFacet( - new ActionValidationFacetViaMethod( - validateMethod, patConstructor, processMethodContext.facetHolder())); + + new ActionValidationFacetViaMethod( + validateMethod, patConstructor, processMethodContext.facetHolder()); }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java index e99464ea4e2..256f468716e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java @@ -25,9 +25,9 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; import org.apache.causeway.commons.semantics.AccessorSemantics; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.AccessorFacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java index 3a36648b951..ac2709a1ea4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java @@ -24,9 +24,9 @@ import org.apache.causeway.applib.annotation.SemanticsOf; import org.apache.causeway.commons.semantics.CollectionSemantics; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; @@ -83,8 +83,8 @@ Optional collectionIfAny(final ProcessMethodContext processMethodCon void inferMixinSort(final FacetedMethod facetedMethod) { /* if @Collection detected on method or type level infer: * @Action(semantics=SAFE) */ - addFacet(new ActionSemanticsFacet("InferSafeForMixedInCollection", SemanticsOf.SAFE, facetedMethod)); - addFacet(ContributingFacetAbstract.createAsCollection(facetedMethod)); + new ActionSemanticsFacet("InferSafeForMixedInCollection", SemanticsOf.SAFE, facetedMethod); + ContributingFacetAbstract.createAsCollection(facetedMethod); } void processDomainEvent(final ProcessMethodContext processMethodContext, final Optional collectionIfAny) { @@ -104,9 +104,8 @@ void processDomainEvent(final ProcessMethodContext processMethodContext, final O // // search for @Collection(domainEvent=...) - addFacet( - CollectionDomainEventFacet - .create(collectionIfAny, processMethodContext)); + CollectionDomainEventFacet + .create(collectionIfAny, processMethodContext); } void processTypeOf(final ProcessMethodContext processMethodContext, final Optional collectionIfAny) { @@ -116,18 +115,15 @@ void processTypeOf(final ProcessMethodContext processMethodContext, final Option var methodReturnType = method.getReturnType(); CollectionSemantics.valueOf(methodReturnType) - .ifPresent(collectionType->{ - addFacetIfPresent( - // check for @Collection(typeOf=...) - TypeOfFacetForCollectionAnnotation - .create(collectionIfAny, collectionType, facetHolder) - .or( - // else infer from return type - ()-> TypeOfFacet.inferFromMethodReturnType( - method, - facetHolder)) - ); - + .ifPresent(collectionType->{ + // check for @Collection(typeOf=...) + TypeOfFacetForCollectionAnnotation + .create(collectionIfAny, collectionType, facetHolder) + .or( + // else infer from return type + ()-> TypeOfFacet.inferFromMethodReturnType( + method, + facetHolder)); }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/typeof/TypeOfFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/typeof/TypeOfFacetForCollectionAnnotation.java index f5eaffba83a..e03f1c7bdeb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/typeof/TypeOfFacetForCollectionAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/typeof/TypeOfFacetForCollectionAnnotation.java @@ -24,7 +24,7 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType; import org.apache.causeway.commons.semantics.CollectionSemantics; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java index 01ef3faee5b..31a8bf172b2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java @@ -40,14 +40,14 @@ public void process(final ProcessClassContext processClassContext) { var cls = processClassContext.cls(); CollectionSemantics.valueOf(cls) - .ifPresent(collectionType->{ - var facetHolder = processClassContext.facetHolder(); - if (collectionType.isArray()) { - addFacet(new JavaArrayFacet(facetHolder)); - } - addFacet(new JavaCollectionFacet(facetHolder)); - addFacetIfPresent(TypeOfFacet.inferFromPluralType(collectionType, cls, facetHolder)); - }); + .ifPresent(collectionType->{ + var facetHolder = processClassContext.facetHolder(); + if (collectionType.isArray()) { + new JavaArrayFacet(facetHolder); + } + new JavaCollectionFacet(facetHolder); + TypeOfFacet.inferFromPluralType(collectionType, cls, facetHolder); + }); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java index 543e74b67c5..e03416edfb4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java @@ -48,49 +48,41 @@ public void process(final ProcessMethodContext processMethodContext) { () -> ValidationFailureUtils .raiseAmbiguousMixinAnnotations(processMethodContext.facetHolder(), CollectionLayout.class)); - addFacetIfPresent( - CssClassFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacet( - DefaultViewFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder) - .orElseGet(()->DefaultViewFacetAsConfigured.create(facetHolder))); - - addFacetIfPresent( - MemberDescribedFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - HiddenFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - LayoutOrderFacetFromCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - MemberNamedFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - TableDecoratorFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - PagedFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - SortedByFacetForCollectionLayoutAnnotation - .create(collectionLayoutIfAny, facetHolder)); - - addFacetIfPresent( - collectionLayoutIfAny - .map(CollectionLayout::navigableSubtree) - .filter(StringUtils::hasLength) - .flatMap(sequence->NavigableSubtreeSequenceFacet.create("CollectionLayout annotation", - processMethodContext.cls(), processMethodContext.methodFacade().asMethod(), sequence, facetHolder))); + + CssClassFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + DefaultViewFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder) + .orElseGet(()->DefaultViewFacetAsConfigured.create(facetHolder)); + + MemberDescribedFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + + HiddenFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + LayoutOrderFacetFromCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + MemberNamedFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + TableDecoratorFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + PagedFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + SortedByFacetForCollectionLayoutAnnotation + .create(collectionLayoutIfAny, facetHolder); + + collectionLayoutIfAny + .map(CollectionLayout::navigableSubtree) + .filter(StringUtils::hasLength) + .flatMap(sequence->NavigableSubtreeSequenceFacet.create("CollectionLayout annotation", + processMethodContext.cls(), processMethodContext.methodFacade().asMethod(), sequence, facetHolder)); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java index 69bb7cd57f3..53a7b54018b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class CssClassFacetForCollectionLayoutXml extends CssClassFacetSimple implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String cssClass = _Strings.emptyToNull(collectionLayout.getCssClass()); return cssClass != null - ? Optional.of(new CssClassFacetForCollectionLayoutXml(cssClass, holder, precedence, qualifier)) + ? Optional.of(new CssClassFacetForCollectionLayoutXml(cssClass, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private CssClassFacetForCollectionLayoutXml( final String value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java index 596234fd096..ff708c73252 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class DefaultViewFacetForCollectionLayoutXml extends DefaultViewFacetAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String defaultView = _Strings.emptyToNull(collectionLayout.getDefaultView()); return defaultView != null - ? Optional.of(new DefaultViewFacetForCollectionLayoutXml(defaultView, holder, precedence, qualifier)) + ? Optional.of(new DefaultViewFacetForCollectionLayoutXml(defaultView, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private DefaultViewFacetForCollectionLayoutXml( final String value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java index a7780a2d16e..103db121ded 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java @@ -22,7 +22,6 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.layout.component.CollectionLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -30,9 +29,6 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class HiddenFacetForCollectionLayoutXml extends HiddenFacetAbstract implements QualifiedFacet { @@ -47,24 +43,17 @@ public static Optional create( final Where where = collectionLayout.getHidden(); return where != null && where != Where.NOT_SPECIFIED - ? Optional.of(new HiddenFacetForCollectionLayoutXml(where, holder, precedence, qualifier)) + ? Optional.of(new HiddenFacetForCollectionLayoutXml(where, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private HiddenFacetForCollectionLayoutXml( final Where where, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(where, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java index d556e6f9f75..37705157e75 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberDescribedFacetForCollectionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberDescribedFacetForCollectionLayoutXml extends MemberDescribedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String describedAs = _Strings.emptyToNull(collectionLayout.getDescribedAs()); return describedAs != null - ? Optional.of(new MemberDescribedFacetForCollectionLayoutXml(describedAs, holder, precedence, qualifier)) + ? Optional.of(new MemberDescribedFacetForCollectionLayoutXml(describedAs, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberDescribedFacetForCollectionLayoutXml( final String described, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(described, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java index 6038705fdfd..37a317dd98c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java @@ -22,7 +22,6 @@ import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -45,23 +44,20 @@ public static Optional create( return Optional.empty(); final String named = _Strings.emptyToNull(collectionLayout.getNamed()); return named != null - ? Optional.of(new MemberNamedFacetForCollectionLayoutXml(named, holder, precedence, qualifier)) + ? Optional.of(new MemberNamedFacetForCollectionLayoutXml(named, holder, qualifier) { + @Override public Precedence precedence() { return precedence; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) private final @Nullable String qualifier; private MemberNamedFacetForCollectionLayoutXml( final String named, final FacetHolder holder, - final Precedence precedence, final @Nullable String qualifier) { super(named, holder); - this.precedence = precedence; this.qualifier = qualifier; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java index c6d972e732c..9a69d67cf9c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java @@ -21,16 +21,12 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.CollectionLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.object.paged.PagedFacet; import org.apache.causeway.core.metamodel.facets.object.paged.PagedFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class PagedFacetForCollectionLayoutXml extends PagedFacetAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( final Integer paged = collectionLayout.getPaged(); return paged != null && paged != -1 - ? Optional.of(new PagedFacetForCollectionLayoutXml(paged, holder, precedence, qualifier)) + ? Optional.of(new PagedFacetForCollectionLayoutXml(paged, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private PagedFacetForCollectionLayoutXml( final int paged, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(paged, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java index cc2140f6797..088221baa09 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java @@ -25,16 +25,12 @@ import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.core.metamodel.commons.ClassUtil; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.collections.sortedby.SortedByFacet; import org.apache.causeway.core.metamodel.facets.collections.sortedby.SortedByFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class SortedByFacetForCollectionLayoutXml extends SortedByFacetAbstract implements QualifiedFacet { @@ -54,24 +50,17 @@ public static Optional create( return Optional.empty(); return sortedByClass != null - ? Optional.of(new SortedByFacetForCollectionLayoutXml(uncheckedCast(sortedByClass), holder, precedence, qualifier)) + ? Optional.of(new SortedByFacetForCollectionLayoutXml(uncheckedCast(sortedByClass), holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private SortedByFacetForCollectionLayoutXml( final Class> sortedBy, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(sortedBy, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/columnorder/ColumnOrderPatchingFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/columnorder/ColumnOrderPatchingFacet.java index 2e1564b0128..6492c65f43f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/columnorder/ColumnOrderPatchingFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/columnorder/ColumnOrderPatchingFacet.java @@ -23,12 +23,14 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.Identifier; import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.jspecify.annotations.Nullable; + +import lombok.Getter; +import lombok.experimental.Accessors; /** * Holder of a {@link Map} that is mutable during runtime and collects column order patching information. @@ -39,22 +41,14 @@ * * @since 4.0 */ -public record ColumnOrderPatchingFacet( - FacetHolder facetHolder, - Map> columnOrder) implements Facet { +public final class ColumnOrderPatchingFacet extends FacetAbstract { - public ColumnOrderPatchingFacet(final FacetHolder facetHolder) { - this(facetHolder, new ConcurrentHashMap<>()); - } + @Getter @Accessors(fluent = true) + private final Map> columnOrder; - @Override - public Class facetType() { - return ColumnOrderPatchingFacet.class; - } - - @Override - public Precedence precedence() { - return Precedence.DEFAULT; + public ColumnOrderPatchingFacet(final FacetHolder facetHolder) { + super(ColumnOrderPatchingFacet.class, facetHolder); + this.columnOrder = new ConcurrentHashMap<>(); } /** @@ -87,7 +81,7 @@ public Optional> lookupColumnOrder(final @Nullable Identifier identi @Override public void visitAttributes(final BiConsumer visitor) { - Facet.super.visitAttributes(visitor); + super.visitAttributes(visitor); columnOrder.forEach((identifier, order)->{ visitor.accept(identifier.toString(), order.join(",")); }); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/TableDecoratorFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/TableDecoratorFacetForCollectionLayoutXml.java index 2d22b135119..e1ed0f72282 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/TableDecoratorFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/TableDecoratorFacetForCollectionLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.applib.layout.component.CollectionLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class TableDecoratorFacetForCollectionLayoutXml extends TableDecoratorFacetAbstract implements QualifiedFacet { @@ -44,23 +40,16 @@ public static Optional create( return Optional.ofNullable(collectionLayout) .map(CollectionLayoutData::getTableDecorator) .map(tableDecorator-> - new TableDecoratorFacetForCollectionLayoutXml(tableDecorator, holder, precedence, qualifier)); + new TableDecoratorFacetForCollectionLayoutXml(tableDecorator, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private TableDecoratorFacetForCollectionLayoutXml( final Class value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java index 3729e7ead6a..ac831d27557 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.facets.collections.parented; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet; @@ -48,7 +47,7 @@ public ParentedFacetSinceCollectionFactory(final MetaModelContext mmc) { public void process(final ProcessClassContext processClassContaxt) { if (!processClassContaxt.facetHolder().containsFacet(CollectionFacet.class)) return; - FacetUtil.addFacet(new ParentedCollectionFacetDefault(processClassContaxt.facetHolder())); + new ParentedCollectionFacetDefault(processClassContaxt.facetHolder()); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java index 5248ff16359..3211ce9ed0a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java @@ -23,10 +23,10 @@ import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facetapi.TypedFacetHolder; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; -import org.apache.causeway.core.metamodel.facets.TypedFacetHolder; import jakarta.inject.Inject; @@ -64,51 +64,47 @@ public FallbackFacetFactory(final MetaModelContext mmc) { @Override public void process(final ProcessClassContext processClassContext) { - var facetHolder = processClassContext.facetHolder(); - addFacet(new TitleFacetNone(facetHolder)); - addFacet(new PagedFacetFromConfiguration( - getConfiguration().applib().annotation().domainObjectLayout().paged(), - facetHolder)); + new TitleFacetNone(facetHolder); + new PagedFacetFromConfiguration( + getConfiguration().applib().annotation().domainObjectLayout().paged(), + facetHolder); } @Override public void process(final ProcessMethodContext processMethodContext) { - final FacetedMethod facetedMethod = processMethodContext.facetHolder(); - addFacet(new NamedFacetFallbackFromMemberName(facetedMethod)); + new NamedFacetFallbackFromMemberName(facetedMethod); final FeatureType featureType = facetedMethod.featureType(); if (featureType.isProperty()) { - addFacet(new MaxLengthFacetUnlimited(facetedMethod)); - addFacet(new MultiLineFacetNone(facetedMethod)); - addFacet(new LabelAtFacetFromLayoutConfiguration( + new MaxLengthFacetUnlimited(facetedMethod); + new MultiLineFacetNone(facetedMethod); + new LabelAtFacetFromLayoutConfiguration( getConfiguration().applib().annotation().propertyLayout().labelPosition(), - facetedMethod)); + facetedMethod); } if (featureType.isAction()) { // none } if (featureType.isCollection()) { - addFacet( - new PagedFacetFromConfiguration( - getConfiguration().applib().annotation().collectionLayout().paged(), - facetedMethod)); + new PagedFacetFromConfiguration( + getConfiguration().applib().annotation().collectionLayout().paged(), + facetedMethod); } - } @Override public void processParams(final ProcessParameterContext processParameterContext) { final TypedFacetHolder typedHolder = processParameterContext.facetHolder(); if (typedHolder.featureType().isActionParameter()) { - addFacet(new MultiLineFacetNone(typedHolder)); - addFacet(new MaxLengthFacetUnlimited(typedHolder)); - addFacet(new LabelAtFacetFromLayoutConfiguration( + new MultiLineFacetNone(typedHolder); + new MaxLengthFacetUnlimited(typedHolder); + new LabelAtFacetFromLayoutConfiguration( getConfiguration().applib().annotation().parameterLayout().labelPosition(), - typedHolder)); + typedHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/jaxb/JaxbFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/jaxb/JaxbFacetFactory.java index ffc3562d6a0..2d1e2d38646 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/jaxb/JaxbFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/jaxb/JaxbFacetFactory.java @@ -75,33 +75,27 @@ public void process(final ProcessClassContext processClassContext) { } private void processXmlJavaTypeAdapter(final ProcessClassContext processClassContext) { - var xmlJavaTypeAdapterIfAny = processClassContext.synthesizeOnType(XmlJavaTypeAdapter.class); if(!xmlJavaTypeAdapterIfAny.isPresent()) return; var facetHolder = processClassContext.facetHolder(); - - addFacet( - new XmlJavaTypeAdapterFacetDefault(facetHolder, xmlJavaTypeAdapterIfAny.get().value())); + new XmlJavaTypeAdapterFacetDefault(facetHolder, xmlJavaTypeAdapterIfAny.get().value()); } private void processXmlAccessorTypeFacet(final ProcessClassContext processClassContext) { - var xmlAccessorTypeIfAny = processClassContext.synthesizeOnType(XmlAccessorType.class); if(!xmlAccessorTypeIfAny.isPresent()) return; var facetHolder = processClassContext.facetHolder(); - addFacet( - new XmlAccessorTypeFacetDefault(facetHolder, xmlAccessorTypeIfAny.get().value())); + new XmlAccessorTypeFacetDefault(facetHolder, xmlAccessorTypeIfAny.get().value()); } // -- METHOD CONTEXT @Override public void process(final ProcessMethodContext processMethodContext) { - //[ahuber] accessType not yet used, but could be in future extensions final Optional accessorTypeFacet = Optional.ofNullable(processMethodContext.facetHolder().lookupFacet(XmlAccessorTypeFacet.class).orElse(null)); @@ -112,37 +106,32 @@ public void process(final ProcessMethodContext processMethodContext) { processXmlJavaTypeAdapter(processMethodContext, accessType); processXmlTransient(processMethodContext, accessType); - } private void processXmlJavaTypeAdapter(final ProcessMethodContext processMethodContext, final XmlAccessType accessType) { - var xmlJavaTypeAdapterIfAny = processMethodContext.synthesizeOnMethod(XmlJavaTypeAdapter.class); if(!xmlJavaTypeAdapterIfAny.isPresent()) return; var facetHolder = processMethodContext.facetHolder(); - addFacet( - new XmlJavaTypeAdapterFacetDefault(facetHolder, xmlJavaTypeAdapterIfAny.get().value())); + new XmlJavaTypeAdapterFacetDefault(facetHolder, xmlJavaTypeAdapterIfAny.get().value()); } private void processXmlTransient(final ProcessMethodContext processMethodContext, final XmlAccessType accessType) { - var xmlTransientIfAny = processMethodContext.synthesizeOnMethod(XmlTransient.class); if(!xmlTransientIfAny.isPresent()) return; var facetHolder = processMethodContext.facetHolder(); - addFacet(new XmlTransientFacetDefault(facetHolder)); + new XmlTransientFacetDefault(facetHolder); } // -- @Override public void refineProgrammingModel(final ProgrammingModel programmingModel) { - final List typeValidators = getTypeValidators(getConfiguration()); final List associationValidators = getAssociationValidators(getConfiguration()); @@ -164,20 +153,19 @@ public void refineProgrammingModel(final ProgrammingModel programmingModel) { .streamAssociations(MixedIn.EXCLUDED); associations - // ignore derived - .filter(association->association.containsNonFallbackFacet(PropertySetterFacet.class)) - .forEach(association->{ - for (final AssociationValidator adapterValidator : associationValidators) { - adapterValidator.validate(objectSpec, association); - } - }); + // ignore derived + .filter(association->association.containsNonFallbackFacet(PropertySetterFacet.class)) + .forEach(association->{ + for (final AssociationValidator adapterValidator : associationValidators) { + adapterValidator.validate(objectSpec, association); + } + }); }); } private List getTypeValidators(final CausewayConfiguration configuration) { - final List typeValidators = new ArrayList<>(); if(configuration.core().metaModel().validator().jaxbViewModel().notAbstract()) { typeValidators.add(new JaxbViewModelNotAbstractValidator()); @@ -332,7 +320,6 @@ void validate( private static class JaxbViewModelPublicNoArgConstructorValidator extends TypeValidator { @Override void validate(final ObjectSpecification objectSpec) { - var correspondingClass = objectSpec.correspondingClass(); var publicNoArgConstructors = _Reflect diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java index 58f2efae8d1..9a7457cd09d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java @@ -19,9 +19,9 @@ package org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import jakarta.inject.Inject; @@ -47,9 +47,8 @@ public void process(final ProcessMethodContext processMethodContext) { // the name which we match the regex against var actionName = processMethodContext.methodFacade().getName(); - addFacetIfPresent( - CssClassFacetOnActionFromConfiguredRegex - .create(actionName, facetHolder)); + CssClassFacetOnActionFromConfiguredRegex + .create(actionName, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java index a3228c39caa..53a73908ef7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java @@ -38,15 +38,12 @@ public DescribedAsFacetForMemberViaMethodFactory(final MetaModelContext mmc) { protected void search( final ProcessMethodContext processMethodContext, final MethodFinder methodFinder) { - methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(describedMethod->{ - addFacet( - new MemberDescribedFacetViaMethod( - describedMethod, processMethodContext.facetHolder())); - }); + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(describedMethod-> + new MemberDescribedFacetViaMethod( + describedMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java index 46045f9786d..60234079559 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java @@ -38,16 +38,12 @@ public DisableForContextFacetViaMethodFactory(final MetaModelContext mmc) { protected void search( final ProcessMethodContext processMethodContext, final MethodFinder methodFinder) { - methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(disableMethod->{ - addFacet( - new DisableForContextFacetViaMethod( - disableMethod, processMethodContext.facetHolder())); - }); - + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(disableMethod-> + new DisableForContextFacetViaMethod( + disableMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java index db20bfde795..a2bb7c6c51a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java @@ -40,14 +40,11 @@ protected void search( final MethodFinder methodFinder) { methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(hideMethod->{ - addFacet( - new HideForContextFacetViaMethod( - hideMethod, processMethodContext.facetHolder())); - }); - + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(hideMethod-> + new HideForContextFacetViaMethod( + hideMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/annotprop/FaFacetOnMemberFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/annotprop/FaFacetOnMemberFromConfiguredRegex.java index e64d652e1c1..2ded004087f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/annotprop/FaFacetOnMemberFromConfiguredRegex.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/annotprop/FaFacetOnMemberFromConfiguredRegex.java @@ -23,16 +23,15 @@ import java.util.function.BiConsumer; import java.util.regex.Pattern; -import org.springframework.util.ClassUtils; - import org.apache.causeway.applib.annotation.ActionLayout; import org.apache.causeway.applib.fa.FontAwesomeLayers; import org.apache.causeway.applib.layout.component.CssClassFaPosition; import org.apache.causeway.commons.functional.Either; import org.apache.causeway.commons.internal.base._StableValue; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaImperativeFacet; @@ -44,6 +43,7 @@ import org.apache.causeway.core.metamodel.postprocessors.all.CssOnActionFromConfiguredRegexPostProcessor; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.springframework.util.ClassUtils; /** * Installed by {@link CssOnActionFromConfiguredRegexPostProcessor}, @@ -52,34 +52,9 @@ * *

Supports imperative action naming, if required. */ -public record FaFacetOnMemberFromConfiguredRegex( - ObjectSpecification objectSpecification, - Map faIconByPattern, - MemberNamedFacet memberNamedFacet, - /** - * If the memberNamedFacet provides static names, - * we can also provide a static {@link FaLayersProvider}. - */ - _StableValue> staticCssClassFaFactoryRef, - - FacetHolder facetHolder -) implements FaImperativeFacet { - - @Override public Class facetType() { return FaFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } - - @Override - public Either getSpecialization() { - return Either.right(this); - } - - @Override - public void visitAttributes(final BiConsumer visitor) { - visitor.accept("facet", ClassUtils.getShortName(getClass())); - visitor.accept("precedence", precedence().name()); - visitor.accept("position", "!imperative"); - visitor.accept("classes", "!imperative"); - } +public final class FaFacetOnMemberFromConfiguredRegex +extends FacetAbstract +implements FaImperativeFacet { public static Optional create( final ObjectSpecification objectSpecification, @@ -90,6 +65,15 @@ public static Optional create( objectSpecification, memberNamedFacet, objectAction)); } + private final ObjectSpecification objectSpecification; + private final Map faIconByPattern; + private final MemberNamedFacet memberNamedFacet; + /** + * If the memberNamedFacet provides static names, + * we can also provide a static {@link FaLayersProvider}. + */ + private final _StableValue> staticCssClassFaFactoryRef; + // non-canonical constructor private FaFacetOnMemberFromConfiguredRegex( final ObjectSpecification objectSpecification, @@ -103,13 +87,49 @@ private FaFacetOnMemberFromConfiguredRegex( facetHolder); } + private FaFacetOnMemberFromConfiguredRegex( + final ObjectSpecification objectSpecification, + final Map faIconByPattern, + final MemberNamedFacet memberNamedFacet, + /** + * If the memberNamedFacet provides static names, + * we can also provide a static {@link FaLayersProvider}. + */ + final _StableValue> staticCssClassFaFactoryRef, + + final FacetHolder facetHolder + ) { + super(FaFacet.class, facetHolder); + this.objectSpecification = objectSpecification; + this.faIconByPattern = faIconByPattern; + this.memberNamedFacet = memberNamedFacet; + /** + * If the memberNamedFacet provides static names, + * we can also provide a static {@link FaLayersProvider}. + */ + this.staticCssClassFaFactoryRef = staticCssClassFaFactoryRef; + } + + @Override + public Either getSpecialization() { + return Either.right(this); + } + + @Override + public void visitAttributes(final BiConsumer visitor) { + visitor.accept("facet", ClassUtils.getShortName(getClass())); + visitor.accept("precedence", precedence().name()); + visitor.accept("position", "!imperative"); + visitor.accept("classes", "!imperative"); + } + @Override public FaLayersProvider getFaLayersProvider(final ManagedObject domainObject) { var staticCssClassFaFactory = staticCssClassFaFactoryRef.orElseSet(()-> memberNamedFacet .getSpecialization() .left() - .map(hasStaticName->hasStaticName.translated()) + .map(HasStaticText::translated) .flatMap(this::faLayersProviderForMemberFriendlyName)); return staticCssClassFaFactory .orElse(() -> faLayersProviderForConfiguredRegexIfPossible(domainObject) @@ -123,9 +143,8 @@ private Optional faIconForName(final String name) { for (Map.Entry entry : faIconByPattern.entrySet()) { final Pattern pattern = entry.getKey(); final String faIcon = entry.getValue(); - if (pattern.matcher(name).matches()) { - return _Strings.nonEmpty(faIcon); - } + if (pattern.matcher(name).matches()) + return _Strings.nonEmpty(faIcon); } return Optional.empty(); } @@ -136,16 +155,15 @@ private Optional faLayersProviderForConfiguredRegexIfPossible( final String memberFriendlyName = memberNamedFacet .getSpecialization() .fold( - hasStaticName->hasStaticName.translated(), // unexpected code reach, due to optimization above + HasStaticText::translated, // unexpected code reach, due to optimization above hasImperativeName->hasImperativeName.textElseNull(targetFor(domainObject))); return faLayersProviderForMemberFriendlyName(memberFriendlyName); } private ManagedObject targetFor(final ManagedObject domainObject) { - if(ManagedObjects.isNullOrUnspecifiedOrEmpty(domainObject)) { - return ManagedObject.empty(objectSpecification); - } + if(ManagedObjects.isNullOrUnspecifiedOrEmpty(domainObject)) + return ManagedObject.empty(objectSpecification); return objectSpecification.isMixin() ? ManagedObject.mixin( objectSpecification, @@ -180,9 +198,9 @@ private Optional faLayersProviderForMemberFriendlyName( * @implNote because {@link FaStaticFacetAbstract} has all the fa-icon logic, * we simply reuse it here by creating an anonymous instance */ - private static FaLayersProvider faIconProvider(final String faIcon, final CssClassFaPosition position) { + private FaLayersProvider faIconProvider(final String faIcon, final CssClassFaPosition position) { return new FaStaticFacetAbstract( - faIcon, position, null) {}; + faIcon, position, FacetHolder.simple(getMetaModelContext(), null)) {}; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java index e8617a1fc60..c0dc2d81620 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/group/LayoutGroupFacetForLayoutXml.java @@ -21,15 +21,11 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.FieldSet; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class LayoutGroupFacetForLayoutXml extends LayoutGroupFacetAbstract implements QualifiedFacet { @@ -42,7 +38,10 @@ public static Optional create( final Precedence precedence, final @Nullable String qualifier) { return Optional.ofNullable(groupIdAndName) - .map(gIdAndName->new LayoutGroupFacetForLayoutXml(gIdAndName, holder, precedence, qualifier)); + .map(gIdAndName->new LayoutGroupFacetForLayoutXml(gIdAndName, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } public static Optional create( @@ -57,20 +56,10 @@ public static Optional create( // -- - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private LayoutGroupFacetForLayoutXml( final GroupIdAndName groupIdAndName, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(groupIdAndName, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java index ed14c6c9368..72a2fd39270 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java @@ -18,14 +18,10 @@ */ package org.apache.causeway.core.metamodel.facets.members.layout.order; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class LayoutOrderFacetForLayoutXml extends LayoutOrderFacetAbstract implements QualifiedFacet { @@ -35,23 +31,16 @@ public static LayoutOrderFacetForLayoutXml create( final FacetHolder holder, final Precedence precedence, final @Nullable String qualifier) { - return new LayoutOrderFacetForLayoutXml("" + sequenceAsInt, holder, precedence, qualifier); + return new LayoutOrderFacetForLayoutXml("" + sequenceAsInt, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }; } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private LayoutOrderFacetForLayoutXml( final String sequence, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(sequence, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java index b882585857a..423fad4ffb2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java @@ -40,13 +40,11 @@ protected void search( final MethodFinder methodFinder) { methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(namedMethod->{ - addFacet( - new MemberNamedFacetViaMethod( - namedMethod, processMethodContext.facetHolder())); - }); + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(namedMethod-> + new MemberNamedFacetViaMethod( + namedMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java index 60bae6bd001..6aa3b1cd170 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java @@ -29,7 +29,7 @@ import org.apache.causeway.core.config.metamodel.facets.PropertyConfigOptions; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.TypedFacetHolder; +import org.apache.causeway.core.metamodel.facetapi.TypedFacetHolder; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet; import org.apache.causeway.core.metamodel.util.Facets; @@ -65,10 +65,9 @@ public static CommandPublishingFacet create( final ServiceInjector servicesInjector) { if(configuration.extensions().commandLog().recordingSupport().isEnabled() - && (propertyIfAny.isPresent() || representsProperty(holder))) { - return new CommandPublishingFacetForPropertyFromConfiguration.EnabledByRecordingSupport( + && (propertyIfAny.isPresent() || representsProperty(holder))) + return new CommandPublishingFacetForPropertyFromConfiguration.EnabledByRecordingSupport( holder, servicesInjector); - } var publishingPolicy = PropertyConfigOptions.propertyCommandPublishingPolicy(configuration); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java index f08b54d6e34..a81dea8a3d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java @@ -27,7 +27,7 @@ import org.apache.causeway.core.config.metamodel.facets.PropertyConfigOptions; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.TypedFacetHolder; +import org.apache.causeway.core.metamodel.facetapi.TypedFacetHolder; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet; import org.apache.causeway.core.metamodel.util.Facets; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java index f03a9abd2ec..735604228d5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java @@ -46,12 +46,12 @@ public BookmarkPolicyFacetFallbackFactory(final MetaModelContext mmc) { @Override public void process(final ProcessClassContext processClassContext) { - addFacet(new BookmarkPolicyFacetFallback(processClassContext.facetHolder())); + new BookmarkPolicyFacetFallback(processClassContext.facetHolder()); } @Override public void process(final ProcessMethodContext processMethodContext) { - addFacet(new BookmarkPolicyFacetFallback(processMethodContext.facetHolder())); + new BookmarkPolicyFacetFallback(processMethodContext.facetHolder()); } /** @@ -59,7 +59,6 @@ public void process(final ProcessMethodContext processMethodContext) { */ @Override public void refineProgrammingModel(final ProgrammingModel programmingModel) { - programmingModel.addValidatorSkipManagedBeans(objectSpec -> { // as an optimization only checking 'declared' members (skipping inherited ones) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java index f863c72380d..c0d624f8988 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java @@ -76,7 +76,7 @@ private void processCallback( .collect(Can.toCan()); if(callbackMethods.isNotEmpty()) { - addFacet(callbackFacetConstructor.apply(callbackMethods, facetHolder)); + callbackFacetConstructor.apply(callbackMethods, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/enums/ChoicesFacetFromEnumFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/enums/ChoicesFacetFromEnumFactory.java index a67f61c2385..c01037308f6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/enums/ChoicesFacetFromEnumFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/enums/ChoicesFacetFromEnumFactory.java @@ -38,7 +38,7 @@ public void process(final ProcessClassContext processClassContext) { var facetHolder = processClassContext.facetHolder(); if (!cls.isEnum()) return; - addFacet(new ChoicesFacetFromEnum(facetHolder, cls)); + new ChoicesFacetFromEnum(facetHolder, cls); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java index d80378f73aa..1777b64c5be 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java @@ -49,7 +49,6 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -197,9 +196,9 @@ void processEntityChangePublishing( // check for @DomainObject(entityChangePublishing=....) var entityChangePublishing = domainObjectIfAny .map(DomainObject::entityChangePublishing); - addFacetIfPresent( - EntityChangePublishingFacetForDomainObjectAnnotation - .create(entityChangePublishing, getConfiguration(), facetHolder)); + + EntityChangePublishingFacetForDomainObjectAnnotation + .create(entityChangePublishing, getConfiguration(), facetHolder); } // -- AUTO COMPLETE @@ -212,22 +211,20 @@ void processAutoComplete( // check from @DomainObject(autoCompleteRepository=...) processClassContext.synthesizeOnType(DomainObject.class) - .map(AnnotHelper::new) - .filter(a -> a.autoCompleteRepository != Object.class) - .filter(a -> { - a.repositoryMethod = findRepositoryMethod( - facetHolder, - cls, - "@DomainObject", - a.autoCompleteRepository, - a.autoCompleteMethod); - - return a.repositoryMethod != null; - }) - .map(a -> new AutoCompleteFacetForDomainObjectAnnotation( - facetHolder, a.autoCompleteRepository, a.repositoryMethod)) - .ifPresent(super::addFacet); - + .map(AnnotHelper::new) + .filter(a -> a.autoCompleteRepository != Object.class) + .filter(a -> { + a.repositoryMethod = findRepositoryMethod( + facetHolder, + cls, + "@DomainObject", + a.autoCompleteRepository, + a.autoCompleteMethod); + + return a.repositoryMethod != null; + }) + .ifPresent(a -> new AutoCompleteFacetForDomainObjectAnnotation( + facetHolder, a.autoCompleteRepository, a.repositoryMethod)); } private static final class AnnotHelper { @@ -278,9 +275,8 @@ void processBounded( final Optional domainObjectIfAny, final ProcessClassContext processClassContext) { var facetHolder = processClassContext.facetHolder(); - FacetUtil.addFacetIfPresent( - ChoicesFacetForDomainObjectAnnotation - .create(domainObjectIfAny, facetHolder)); + ChoicesFacetForDomainObjectAnnotation + .create(domainObjectIfAny, facetHolder); } // check from @DomainObject(editing=...) @@ -288,40 +284,30 @@ void processEditing( final Optional domainObjectIfAny, final ProcessClassContext processClassContext) { var facetHolder = processClassContext.facetHolder(); - - FacetUtil.addFacetIfPresent( - EditingEnabledFacetForDomainObjectAnnotation - .create(domainObjectIfAny, facetHolder)); - - FacetUtil.addFacetIfPresent( - ImmutableFacetForDomainObjectAnnotation - .create(domainObjectIfAny, getConfiguration(), facetHolder)); + EditingEnabledFacetForDomainObjectAnnotation + .create(domainObjectIfAny, facetHolder); + ImmutableFacetForDomainObjectAnnotation + .create(domainObjectIfAny, getConfiguration(), facetHolder); } // check from @DomainObject(aliased=...) void processAliased( final Optional domainObjectIfAny, final ProcessObjectTypeContext processClassContext) { - var cls = processClassContext.cls(); var facetHolder = processClassContext.facetHolder(); - - FacetUtil.addFacetIfPresent( - AliasedFacetForDomainObjectAnnotation - .create(domainObjectIfAny, cls, facetHolder)); + AliasedFacetForDomainObjectAnnotation + .create(domainObjectIfAny, cls, facetHolder); } // check from @DomainObject(introspection=...) void processIntrospecion( final Optional domainObjectIfAny, final ProcessObjectTypeContext processClassContext) { - var cls = processClassContext.cls(); var facetHolder = processClassContext.facetHolder(); - - FacetUtil.addFacetIfPresent( - IntrospectionPolicyFacetForDomainObjectAnnotation - .create(domainObjectIfAny, cls, facetHolder)); + IntrospectionPolicyFacetForDomainObjectAnnotation + .create(domainObjectIfAny, cls, facetHolder); } void processNature( @@ -334,13 +320,12 @@ void processNature( return; // handle with least priority - if(addFacetIfPresent( - ViewModelFacetForDomainObjectAnnotation - .create( - domainObjectIfAny, - mementoContext, - facetHolder)) - .isPresent()) + if(ViewModelFacetForDomainObjectAnnotation + .create( + domainObjectIfAny, + mementoContext, + facetHolder) + .isPresent()) return; if(cls.isInterface() @@ -354,10 +339,8 @@ void processNature( domainObjectIfAny .filter(domainObject -> domainObject.nature() == Nature.MIXIN); - addFacetIfPresent( - MixinFacetImpl - .createForDomainObjectAnnotation(mixinDomainObjectIfAny, cls, facetHolder)); - + MixinFacetImpl + .createForDomainObjectAnnotation(mixinDomainObjectIfAny, cls, facetHolder); } private void processLifecycleEvents( @@ -390,163 +373,146 @@ private void processDomainEvents( } private void processLifecycleEventCreated( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::createdLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectCreatedEvent.Noop.class, - ObjectCreatedEvent.Default.class, - getConfiguration().applib().annotation().domainObject().createdLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new CreatedLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::createdLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectCreatedEvent.Noop.class, + ObjectCreatedEvent.Default.class, + getConfiguration().applib().annotation().domainObject().createdLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new CreatedLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventLoaded( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::loadedLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectLoadedEvent.Noop.class, - ObjectLoadedEvent.Default.class, - getConfiguration().applib().annotation().domainObject().loadedLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new LoadedLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::loadedLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectLoadedEvent.Noop.class, + ObjectLoadedEvent.Default.class, + getConfiguration().applib().annotation().domainObject().loadedLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new LoadedLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventPersisting( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::persistingLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectPersistingEvent.Noop.class, - ObjectPersistingEvent.Default.class, - getConfiguration().applib().annotation().domainObject().persistingLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new PersistingLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::persistingLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectPersistingEvent.Noop.class, + ObjectPersistingEvent.Default.class, + getConfiguration().applib().annotation().domainObject().persistingLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new PersistingLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventPersisted( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::persistedLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectPersistedEvent.Noop.class, - ObjectPersistedEvent.Default.class, - getConfiguration().applib().annotation().domainObject().persistedLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new PersistedLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::persistedLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectPersistedEvent.Noop.class, + ObjectPersistedEvent.Default.class, + getConfiguration().applib().annotation().domainObject().persistedLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new PersistedLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventRemoving( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::removingLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectRemovingEvent.Noop.class, - ObjectRemovingEvent.Default.class, - getConfiguration().applib().annotation().domainObject().removingLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new RemovingLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::removingLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectRemovingEvent.Noop.class, + ObjectRemovingEvent.Default.class, + getConfiguration().applib().annotation().domainObject().removingLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new RemovingLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventUpdated( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::updatedLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectUpdatedEvent.Noop.class, - ObjectUpdatedEvent.Default.class, - getConfiguration().applib().annotation().domainObject().updatedLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new UpdatedLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::updatedLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectUpdatedEvent.Noop.class, + ObjectUpdatedEvent.Default.class, + getConfiguration().applib().annotation().domainObject().updatedLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new UpdatedLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processLifecycleEventUpdating( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::updatingLifecycleEvent) - .filter(lifecycleEvent -> - MmEventUtils.eventTypeIsPostable( - lifecycleEvent, - ObjectUpdatingEvent.Noop.class, - ObjectUpdatingEvent.Default.class, - getConfiguration().applib().annotation().domainObject().updatingLifecycleEvent().postForDefault()) - ) - .map(lifecycleEvent -> new UpdatingLifecycleEventFacetForDomainObjectAnnotation( - holder, lifecycleEvent)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::updatingLifecycleEvent) + .filter(lifecycleEvent -> + MmEventUtils.eventTypeIsPostable( + lifecycleEvent, + ObjectUpdatingEvent.Noop.class, + ObjectUpdatingEvent.Default.class, + getConfiguration().applib().annotation().domainObject().updatingLifecycleEvent().postForDefault()) + ) + .ifPresent(lifecycleEvent -> new UpdatingLifecycleEventFacetForDomainObjectAnnotation( + holder, lifecycleEvent)); } private void processDomainEventAction( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - domainObjectIfAny - .map(DomainObject::actionDomainEvent) - .flatMap(domainEvent -> ActionDomainEventDefaultFacetForDomainObjectAnnotation - .create(domainEvent, holder)) - .ifPresent(super::addFacet); - + domainObjectOpt + .map(DomainObject::actionDomainEvent) + .ifPresent(domainEvent -> + ActionDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)); } private void processDomainEventProperty( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::propertyDomainEvent) - .flatMap(domainEvent -> PropertyDomainEventDefaultFacetForDomainObjectAnnotation - .create(domainEvent, holder)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::propertyDomainEvent) + .ifPresent(domainEvent -> + PropertyDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)); } private void processDomainEventCollection( - final Optional domainObjectIfAny, + final Optional domainObjectOpt, final FacetHolder holder) { - - domainObjectIfAny - .map(DomainObject::collectionDomainEvent) - .flatMap(domainEvent -> CollectionDomainEventDefaultFacetForDomainObjectAnnotation - .create(domainEvent, holder)) - .ifPresent(super::addFacet); + domainObjectOpt + .map(DomainObject::collectionDomainEvent) + .ifPresent(domainEvent -> + CollectionDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)); } @Override @@ -555,7 +521,6 @@ public void refineProgrammingModel(final ProgrammingModel programmingModel) { } private void addValidatorToEnsureUniqueLogicalTypeNames(final ProgrammingModel programmingModel) { - programmingModel .addValidator( new MetaModelValidatorAbstract(getMetaModelContext(), spec->!spec.isAbstract()){ diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java index 54c28d01bfc..2196dc1a2ef 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.annotation.BookmarkPolicy; import org.apache.causeway.applib.layout.component.DomainObjectLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class BookmarkPolicyFacetForDomainObjectLayoutXml extends BookmarkPolicyFacetAbstract implements QualifiedFacet { @@ -46,24 +42,17 @@ public static Optional create( final BookmarkPolicy bookmarkPolicy = domainObjectLayout.getBookmarking(); return bookmarkPolicy != null && bookmarkPolicy != BookmarkPolicy.NEVER - ? Optional.of(new BookmarkPolicyFacetForDomainObjectLayoutXml(bookmarkPolicy, holder, precedence, qualifier)) + ? Optional.of(new BookmarkPolicyFacetForDomainObjectLayoutXml(bookmarkPolicy, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private BookmarkPolicyFacetForDomainObjectLayoutXml( final BookmarkPolicy bookmarkPolicy, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(bookmarkPolicy, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java index ee18ab478d6..3a8fe017a2a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectLayoutXml.java @@ -29,9 +29,6 @@ import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class CssClassFacetForDomainObjectLayoutXml extends CssClassFacetSimple implements QualifiedFacet { @@ -45,24 +42,17 @@ public static Optional create( return Optional.empty(); final String cssClass = _Strings.emptyToNull(domainObjectLayout.getCssClass()); return cssClass != null - ? Optional.of(new CssClassFacetForDomainObjectLayoutXml(cssClass, holder, precedence, qualifier)) + ? Optional.of(new CssClassFacetForDomainObjectLayoutXml(cssClass, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private CssClassFacetForDomainObjectLayoutXml( final String value, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java index dff8af5515c..9f40fd716e9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java @@ -37,45 +37,42 @@ public DomainObjectLayoutFacetFactory(final MetaModelContext mmc) { @Override public void process(final ProcessClassContext processClassContext) { - var facetHolder = processClassContext.facetHolder(); var domainObjectLayoutIfAny = processClassContext.synthesizeOnType(DomainObjectLayout.class); var metamodelEventService = this.metamodelEventService.get(); - addFacetIfPresent(TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent - .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder)); - - addFacetIfPresent(IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent - .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder)); + TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent + .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder); - addFacetIfPresent(CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent - .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder)); + IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent + .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder); - addFacetIfPresent(LayoutPrefixFacetForUiEvent.create( - domainObjectLayoutIfAny, metamodelEventService, facetHolder)); + CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent + .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder); - addFacetIfPresent(CssClassFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + LayoutPrefixFacetForUiEvent + .create(domainObjectLayoutIfAny, metamodelEventService, facetHolder); - addFacetIfPresent(FaFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + CssClassFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - addFacetIfPresent(ObjectDescribedFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + FaFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - addFacetIfPresent(ObjectNamedFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + ObjectDescribedFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - addFacetIfPresent(TableDecoratorFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + ObjectNamedFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - addFacetIfPresent(PagedFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + TableDecoratorFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - addFacetIfPresent(BookmarkPolicyFacetForDomainObjectLayoutAnnotation - .create(domainObjectLayoutIfAny, facetHolder)); + PagedFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); - return; + BookmarkPolicyFacetForDomainObjectLayoutAnnotation + .create(domainObjectLayoutIfAny, facetHolder); } private final _Lazy metamodelEventService = _Lazy.threadSafe(()-> diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/FaFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/FaFacetForDomainObjectLayoutXml.java index 1fc82ce71fa..51fef89f2e7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/FaFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/FaFacetForDomainObjectLayoutXml.java @@ -30,9 +30,6 @@ import org.apache.causeway.core.metamodel.facets.members.iconfa.FaStaticFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class FaFacetForDomainObjectLayoutXml extends FaStaticFacetAbstract implements QualifiedFacet { @@ -47,25 +44,18 @@ public static Optional create( final String cssClassFa = _Strings.emptyToNull(domainObjectLayout.getCssClassFa()); CssClassFaPosition cssClassFaPosition = domainObjectLayout.getCssClassFaPosition(); return cssClassFa != null - ? Optional.of(new FaFacetForDomainObjectLayoutXml(cssClassFa, cssClassFaPosition, holder, precedence, qualifier)) + ? Optional.of(new FaFacetForDomainObjectLayoutXml(cssClassFa, cssClassFaPosition, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private FaFacetForDomainObjectLayoutXml( final String value, final CssClassFaPosition position, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, position, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java index 0d8abddea89..97069c58596 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java @@ -26,7 +26,7 @@ import org.apache.causeway.applib.events.EventObjectBase; import org.apache.causeway.applib.events.ui.IconUiEvent; import org.apache.causeway.commons.internal.base._Casts; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; @@ -34,13 +34,11 @@ import org.apache.causeway.core.metamodel.object.MmEventUtils; import org.apache.causeway.core.metamodel.services.events.MetamodelEventService; -public record IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent( - Class> iconUiEventClass, - MetamodelEventService metamodelEventService, - FacetHolder facetHolder) +public final class IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent +extends FacetAbstract implements IconFacet { - public static Optional create( + public static Optional create( final Optional domainObjectLayoutIfAny, final MetamodelEventService metamodelEventService, final FacetHolder facetHolder) { @@ -57,7 +55,18 @@ public static Optional _Casts.uncheckedCast(iconUiEvent), metamodelEventService, facetHolder)); } - @Override public Class facetType() { return IconFacet.class; } + private final Class> iconUiEventClass; + private final MetamodelEventService metamodelEventService; + + private IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent( + final Class> iconUiEventClass, + final MetamodelEventService metamodelEventService, + final FacetHolder facetHolder) { + super(IconFacet.class, facetHolder); + this.iconUiEventClass = iconUiEventClass; + this.metamodelEventService = metamodelEventService; + } + @Override public Precedence precedence() { return Precedence.EVENT; } @Override @@ -88,6 +97,8 @@ public void visitAttributes(final BiConsumer visitor) { visitor.accept("iconUiEventClass", iconUiEventClass); } + // --HELPER + private IconUiEvent newIconUiEvent(final ManagedObject owningAdapter, final ObjectSupport.IconSize iconSize) { var iconUiEvent = EventObjectBase.getInstanceWithSourceSupplier(iconUiEventClass, owningAdapter::getPojo) .orElseThrow(); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectDescribedFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectDescribedFacetForDomainObjectLayoutXml.java index 482b6bdb80e..50da4f73ce9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectDescribedFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectDescribedFacetForDomainObjectLayoutXml.java @@ -29,9 +29,6 @@ import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class ObjectDescribedFacetForDomainObjectLayoutXml extends ObjectDescribedFacetAbstract implements QualifiedFacet { @@ -45,24 +42,17 @@ public static Optional create( return Optional.empty(); final String describedAs = _Strings.emptyToNull(domainObjectLayout.getDescribedAs()); return describedAs != null - ? Optional.of(new ObjectDescribedFacetForDomainObjectLayoutXml(describedAs, holder, precedence, qualifier)) + ? Optional.of(new ObjectDescribedFacetForDomainObjectLayoutXml(describedAs, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private ObjectDescribedFacetForDomainObjectLayoutXml( final String described, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(described, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java index 1ce5c50dab5..c6b8d346b95 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java @@ -29,9 +29,6 @@ import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class ObjectNamedFacetForDomainObjectLayoutXml extends ObjectNamedFacetAbstract implements QualifiedFacet { @@ -46,23 +43,16 @@ public static Optional create( var noun = new Noun(domainObjectLayout.getNamed()); return noun.isEmpty() ? Optional.empty() - : Optional.of(new ObjectNamedFacetForDomainObjectLayoutXml(noun, holder, precedence, qualifier)); + : Optional.of(new ObjectNamedFacetForDomainObjectLayoutXml(noun, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private ObjectNamedFacetForDomainObjectLayoutXml( final Noun noun, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(noun, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/TableDecoratorFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/TableDecoratorFacetForDomainObjectLayoutXml.java index 0b77c0805eb..0c7bd409658 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/TableDecoratorFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/TableDecoratorFacetForDomainObjectLayoutXml.java @@ -29,9 +29,6 @@ import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class TableDecoratorFacetForDomainObjectLayoutXml extends TableDecoratorFacetAbstract implements QualifiedFacet { @@ -44,23 +41,16 @@ public static Optional create( return Optional.ofNullable(domainObjectLayout) .map(DomainObjectLayoutData::getTableDecorator) .map(tableDecorator-> - new TableDecoratorFacetForDomainObjectLayoutXml(tableDecorator, holder, precedence, qualifier)); + new TableDecoratorFacetForDomainObjectLayoutXml(tableDecorator, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private TableDecoratorFacetForDomainObjectLayoutXml( final Class value, - final FacetHolder holder, - final Facet.Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java index 04dcfa1948d..0775bc6ed30 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java @@ -44,10 +44,8 @@ public void process(final ProcessClassContext processClassContext) { if (!domainServiceIfAny.isPresent()) return; var facetHolder = processClassContext.facetHolder(); - - addFacetIfPresent( - AliasedFacetForDomainServiceAnnotation - .create(domainServiceIfAny, processClassContext.cls(), facetHolder)); + AliasedFacetForDomainServiceAnnotation + .create(domainServiceIfAny, processClassContext.cls(), facetHolder); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java index 51f91c302c5..7915f4a1a34 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java @@ -55,12 +55,10 @@ public void process(final ProcessClassContext processClassContext) { .filter(mb -> mb != DomainServiceLayout.MenuBar.NOT_SPECIFIED) // redundant since _Annotations .orElse(DomainServiceLayout.MenuBar.PRIMARY); - addFacet( - new DomainServiceLayoutFacetAnnotation(facetHolder, menuBar)); + new DomainServiceLayoutFacetAnnotation(facetHolder, menuBar); - addFacetIfPresent( - ObjectNamedFacetForDomainServiceLayoutAnnotation - .create(domainServiceLayoutIfAny, facetHolder)); + ObjectNamedFacetForDomainServiceLayoutAnnotation + .create(domainServiceLayoutIfAny, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/BSGridFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/BSGridFacet.java index f7a190d8dcc..68aba5ef4d1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/BSGridFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/BSGridFacet.java @@ -22,43 +22,46 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.layout.grid.bootstrap.BSGrid; import org.apache.causeway.applib.services.grid.GridService; import org.apache.causeway.applib.services.grid.GridService.LayoutKey; import org.apache.causeway.commons.internal.base._Lazy; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.commons.internal.exceptions._Exceptions; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.object.layout.LayoutPrefixFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.jspecify.annotations.Nullable; -record BSGridFacet( - GridService gridService, - Map normalizedGridByLayoutPrefix, - _Lazy layoutFacetLazy, - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence) +final class BSGridFacet +extends FacetAbstract implements GridFacet { - // -- FACTORIES + // -- FACTORIES - public static GridFacet create( - final FacetHolder facetHolder, - final GridService gridService) { - return new BSGridFacet(gridService, new ConcurrentHashMap<>(), - _Lazy.threadSafe(()->facetHolder.lookupFacet(LayoutPrefixFacet.class).orElse(null)), - facetHolder, Precedence.DEFAULT); - } + public static GridFacet create( + final FacetHolder facetHolder, + final GridService gridService) { + return new BSGridFacet(gridService, facetHolder); + } - // -- METHODS + // -- CONSTRUCTION + + private final GridService gridService; + private final Map normalizedGridByLayoutPrefix; + private final _Lazy layoutFacetLazy; - @Override public Class facetType() { return GridFacet.class; } + private BSGridFacet(final GridService gridService, final FacetHolder facetHolder) { + super(GridFacet.class, facetHolder); + this.gridService = gridService; + this.normalizedGridByLayoutPrefix = new ConcurrentHashMap<>(); + this.layoutFacetLazy = _Lazy.threadSafe(()->facetHolder.lookupFacet(LayoutPrefixFacet.class).orElse(null)); + } + + // -- METHODS @Override public BSGrid getGrid(final @Nullable ManagedObject mo) { @@ -123,18 +126,20 @@ private ObjectSpecification objSpec() { return (ObjectSpecification) facetHolder(); } - record NoLayout( - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence) implements GridFacet { - @Override public Class facetType() { return GridFacet.class; } - - @Override public void visitAttributes(final BiConsumer visitor) { - GridFacet.super.visitAttributes(visitor); - } + final static class NoLayout extends FacetAbstract implements GridFacet { + NoLayout(final FacetHolder facetHolder) { + super(GridFacet.class, facetHolder); + } + @Override public Precedence precedence() { + return Precedence.LOW; + } @Override public BSGrid getGrid(@Nullable final ManagedObject mo) { return null; } @Override public void clearCache() {} + @Override public void visitAttributes(final BiConsumer visitor) { + GridFacet.super.visitAttributes(visitor); + } } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetFactory.java index b1bdf9e8da8..4122358fc87 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetFactory.java @@ -19,7 +19,6 @@ import org.apache.causeway.applib.services.grid.GridService; import org.apache.causeway.commons.internal.base._Lazy; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -42,8 +41,8 @@ public void process(final ProcessClassContext processClassContext) { if(facetHolder instanceof ObjectSpecification objSpec) { if(objSpec.isEntityOrViewModelOrAbstract()) { - addFacet(BSGridFacet - .create(facetHolder, gridService.get())); + BSGridFacet + .create(facetHolder, gridService.get()); } else { /* as of time of writing, when not installing a facet here, we end up in recursive update cycle later (test code) * @@ -76,7 +75,7 @@ public void process(final ProcessClassContext processClassContext) { at org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract.collectionScenario(FacetFactoryTestAbstract.java:367) at org.apache.causeway.core.metamodel.facets.object.navchild.NavigableSubtreeFacetFactoryTest.treeNodeFacetShouldBeInstalledWhenNodeHasAnnotations(NavigableSubtreeFacetFactoryTest.java:59) */ - addFacet(new BSGridFacet.NoLayout(facetHolder, Precedence.LOW)); + new BSGridFacet.NoLayout(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java index 11fecf1b985..840ac701e59 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java @@ -18,32 +18,32 @@ */ package org.apache.causeway.core.metamodel.facets.object.hidden; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext; import org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.MixedIn; -public record HiddenTypeFacetFromAuthorization( - FacetHolder facetHolder - ) implements HiddenTypeFacet { - - @Override - public Class facetType() { - return HiddenTypeFacet.class; +public final class HiddenTypeFacetFromAuthorization +extends FacetAbstract +implements HiddenTypeFacet { + + public HiddenTypeFacetFromAuthorization(final FacetHolder facetHolder) { + super(HiddenTypeFacet.class, facetHolder); } - + @Override public Precedence precedence() { return Precedence.HIGH; // facet has final say, don't override; } - + @Override public String hides(final VisibilityContext vc) { var spec = (ObjectSpecification) facetHolder(); - if(!spec.isEntityOrViewModelOrAbstract()) return null; + if(!spec.isEntityOrViewModelOrAbstract()) + return null; /*[CAUSEWAY-3657] Don't hide members based on their element type having no visible actions, * properties or collections in case the element type is an interface. @@ -53,7 +53,8 @@ public String hides(final VisibilityContext vc) { * and it is the case that any interface when PROTOTYPING has some Object_ actions mixed in, * but not necessarily in production. */ - if(spec.correspondingClass().isInterface()) return null; + if(spec.correspondingClass().isInterface()) + return null; var hasVisibleProperty = spec.streamProperties(MixedIn.INCLUDED) .anyMatch(prop -> !AuthorizationFacet.hidesProperty(prop, vc)); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java index a66090f3b0f..c395375ab45 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorizationFactory.java @@ -19,8 +19,6 @@ package org.apache.causeway.core.metamodel.facets.object.hidden; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -41,8 +39,8 @@ public HiddenTypeFacetFromAuthorizationFactory(final MetaModelContext mmc) { @Override public void process(final ProcessClassContext processClassContext) { - final FacetHolder facetHolder = processClassContext.facetHolder(); - FacetUtil.addFacet(new HiddenTypeFacetFromAuthorization(facetHolder)); + var facetHolder = processClassContext.facetHolder(); + new HiddenTypeFacetFromAuthorization(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java index 3cb2fde883c..912c2fe0999 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconMethod.java @@ -21,21 +21,21 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.annotation.ObjectSupport; import org.apache.causeway.applib.annotation.ObjectSupport.IconSize; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.HasImperativeAspect; import org.apache.causeway.core.metamodel.facets.ImperativeAspect; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.jspecify.annotations.Nullable; -public record IconFacetViaIconMethod( - ImperativeAspect imperativeAspect, - FacetHolder facetHolder) +import lombok.Getter; + +public final class IconFacetViaIconMethod +extends FacetAbstract implements IconFacet, HasImperativeAspect { public static Optional create( @@ -48,12 +48,16 @@ public static Optional create( holder)); } - @Override public Class facetType() { return IconFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } - @Override public ImperativeAspect getImperativeAspect() { return imperativeAspect; } + @Getter(onMethod_ = {@Override}) + private final ImperativeAspect imperativeAspect; + + private IconFacetViaIconMethod(final ImperativeAspect imperativeAspect, final FacetHolder facetHolder) { + super(IconFacet.class, facetHolder); + this.imperativeAspect = imperativeAspect; + } @Override - public Optional icon(ManagedObject domainObject, IconSize iconSize) { + public Optional icon(final ManagedObject domainObject, final IconSize iconSize) { return Optional.ofNullable(imperativeAspect.eval(domainObject, (ObjectSupport.IconResource)null, iconSize)); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java index 68bd46e1eba..6b2a00e31f9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java @@ -21,22 +21,20 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.annotation.ObjectSupport; import org.apache.causeway.applib.annotation.ObjectSupport.IconSize; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.HasImperativeAspect; import org.apache.causeway.core.metamodel.facets.ImperativeAspect; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.jspecify.annotations.Nullable; -public record IconFacetViaIconNameMethod( - ImperativeAspect imperativeAspect, - FacetHolder facetHolder) +public final class IconFacetViaIconNameMethod +extends FacetAbstract implements IconFacet, HasImperativeAspect { public static Optional create( @@ -49,12 +47,18 @@ public static Optional create( holder)); } - @Override public Class facetType() { return IconFacet.class; } + private IconFacetViaIconNameMethod(final ImperativeAspect imperativeAspect, final FacetHolder facetHolder) { + super(IconFacet.class, facetHolder); + this.imperativeAspect = imperativeAspect; + } + + private final ImperativeAspect imperativeAspect; + @Override public Precedence precedence() { return Precedence.LOW; } @Override public ImperativeAspect getImperativeAspect() { return imperativeAspect; } @Override - public Optional icon(ManagedObject domainObject, IconSize iconSize) { + public Optional icon(final ManagedObject domainObject, final IconSize iconSize) { return Optional.of(new ObjectSupport.ClassPathIconResource( _Strings.nullToEmpty(imperativeAspect.eval(domainObject, (String)null)))); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/immutable/immutableannot/CopyImmutableFacetOntoMembersFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/immutable/immutableannot/CopyImmutableFacetOntoMembersFactory.java index 7a0b3b319a0..e709f2fa889 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/immutable/immutableannot/CopyImmutableFacetOntoMembersFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/immutable/immutableannot/CopyImmutableFacetOntoMembersFactory.java @@ -19,10 +19,9 @@ package org.apache.causeway.core.metamodel.facets.object.immutable.immutableannot; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.object.immutable.ImmutableFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -47,7 +46,7 @@ public void process(final ProcessMethodContext processMethodContext) { owningSpec .lookupFacet(ImmutableFacet.class) .ifPresent(immutableFacet-> - FacetUtil.addFacet(immutableFacet.clone(member))); + immutableFacet.clone(member)); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetForUiEvent.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetForUiEvent.java index d6650a98176..9d30789ea4d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetForUiEvent.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetForUiEvent.java @@ -21,26 +21,21 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.annotation.DomainObjectLayout; import org.apache.causeway.applib.events.EventObjectBase; import org.apache.causeway.applib.events.ui.LayoutUiEvent; import org.apache.causeway.commons.internal.base._Casts; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; import org.apache.causeway.core.metamodel.object.MmEventUtils; import org.apache.causeway.core.metamodel.services.events.MetamodelEventService; +import org.jspecify.annotations.NonNull; -public record LayoutPrefixFacetForUiEvent( - @NonNull String origin, - @NonNull Class> layoutUiEventClass, - @NonNull MetamodelEventService metamodelEventService, - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence -) implements LayoutPrefixFacet { +public final class LayoutPrefixFacetForUiEvent +extends FacetAbstract +implements LayoutPrefixFacet { // -- FACTORIES @@ -59,12 +54,28 @@ public static Optional create( .domainObjectLayout().layoutUiEvent().postForDefault())) .map(layoutUiEvent -> new LayoutPrefixFacetForUiEvent("DomainObjectLayoutAnnotationWithLayoutUiEvent", _Casts.uncheckedCast(layoutUiEvent), metamodelEventService, - facetHolder, Precedence.EVENT)); + facetHolder)); + } + + private final String origin; + private final Class> layoutUiEventClass; + private final MetamodelEventService metamodelEventService; + + private LayoutPrefixFacetForUiEvent( + @NonNull final String origin, + @NonNull final Class> layoutUiEventClass, + @NonNull final MetamodelEventService metamodelEventService, + @NonNull final FacetHolder facetHolder) { + super(LayoutPrefixFacet.class, facetHolder); + this.origin = origin; + this.layoutUiEventClass = layoutUiEventClass; + this.metamodelEventService = metamodelEventService; } // -- METHODS - @Override public Class facetType() { return LayoutPrefixFacet.class; } + @Override + public Precedence precedence() { return Precedence.EVENT; } @Override public String layoutPrefix(final ManagedObject managedObject) { @@ -87,7 +98,7 @@ public String layoutPrefix(final ManagedObject managedObject) { @Override public void visitAttributes(final BiConsumer visitor) { LayoutPrefixFacet.super.visitAttributes(visitor); - visitor.accept("origin", origin()); + visitor.accept("origin", origin); visitor.accept("layoutUiEventClass", layoutUiEventClass); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java index b218b0fe685..bd4e0231401 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/layout/LayoutPrefixFacetViaMethod.java @@ -21,23 +21,23 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.HasImperativeAspect; import org.apache.causeway.core.metamodel.facets.ImperativeAspect; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.object.ManagedObjects; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + +import lombok.Getter; +import lombok.experimental.Accessors; -public record LayoutPrefixFacetViaMethod( - @NonNull String origin, - @NonNull ImperativeAspect imperativeAspect, - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence -) implements LayoutPrefixFacet, HasImperativeAspect { +public final class LayoutPrefixFacetViaMethod +extends FacetAbstract +implements LayoutPrefixFacet, HasImperativeAspect { // -- FACTORIES @@ -54,9 +54,22 @@ public static Optional create( new LayoutPrefixFacetViaMethod("LayoutMethod", imperativeAspect, holder, Precedence.DEFAULT)); } - // -- METHODS + @Getter @Accessors(fluent = true) + private final String origin; + @Getter(onMethod_ = {@Override}) + private final ImperativeAspect imperativeAspect; - @Override public Class facetType() { return LayoutPrefixFacet.class; } + private LayoutPrefixFacetViaMethod( + @NonNull final String origin, + @NonNull final ImperativeAspect imperativeAspect, + @NonNull final FacetHolder facetHolder, + final Facet.@NonNull Precedence precedence) { + super(LayoutPrefixFacet.class, facetHolder); + this.origin = origin; + this.imperativeAspect = imperativeAspect; + } + + // -- METHODS @Override public String layoutPrefix(final ManagedObject managedObject) { @@ -68,15 +81,10 @@ public String layoutPrefix(final ManagedObject managedObject) { } } - @Override - public ImperativeAspect getImperativeAspect() { - return imperativeAspect(); - } - @Override public void visitAttributes(final BiConsumer visitor) { LayoutPrefixFacet.super.visitAttributes(visitor); - visitor.accept("origin", origin()); + visitor.accept("origin", origin); imperativeAspect.visitAttributes(visitor); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java index dcb7c2aae43..91dd7418d46 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java @@ -33,19 +33,17 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet; -public record MixinFacetImpl( - Class mixinType, - String mainMethodName, - ResolvedConstructor resolvedConstructor, - FacetHolder facetHolder, - Class mixeeType, - AtomicReference contributingRef) +import lombok.Getter; +import lombok.experimental.Accessors; + +public final class MixinFacetImpl +extends FacetAbstract implements MixinFacet { public static Optional createForDomainObjectAnnotation( @@ -70,7 +68,7 @@ static MixinFacetImpl forTesting( final String mainMethodName, final Constructor constructor) { return new MixinFacetImpl(mixinType, mainMethodName, - _GenericResolver.resolveConstructor(constructor, mixinType), null); + _GenericResolver.resolveConstructor(constructor, mixinType), FacetHolder.simple(null, null)); } private MixinFacetImpl( @@ -84,8 +82,30 @@ private MixinFacetImpl( new AtomicReference<>()); } - @Override public Class facetType() { return MixinFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final Class mixinType; + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final Class mixeeType; + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final String mainMethodName; + + private final ResolvedConstructor resolvedConstructor; + private final AtomicReference contributingRef; + + MixinFacetImpl( + final Class mixinType, + final String mainMethodName, + final ResolvedConstructor resolvedConstructor, + final FacetHolder facetHolder, + final Class mixeeType, + final AtomicReference contributingRef) { + super(MixinFacet.class, facetHolder); + this.mixinType = mixinType; + this.mainMethodName = mainMethodName; + this.resolvedConstructor = resolvedConstructor; + this.mixeeType = mixeeType; + this.contributingRef = contributingRef; + } @Override public boolean isMixinFor(final Class candidateDomainType) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java index c6915241b5f..03cb6d52381 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java @@ -20,36 +20,86 @@ import java.lang.invoke.MethodHandle; import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.stream.Stream; import org.apache.causeway.applib.graph.tree.TreeAdapter; import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.commons.internal.base._NullSafe; +import org.apache.causeway.commons.internal.exceptions._Exceptions; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.util.DeweyOrderComparator; +import lombok.extern.slf4j.Slf4j; + /** * Provides the parent/child relationship information between pojos * to derive a tree-structure. * * @since 3.2 */ -public sealed interface NavigableSubtreeFacet -extends Facet, TreeAdapter -permits NavigableSubtreeFacetRecord { - +@Slf4j +public final class NavigableSubtreeFacet +extends FacetAbstract +implements TreeAdapter{ + // -- FACTORY - + static Optional create( final Can navigableSubtreeSequenceFacets, final FacetHolder facetHolder) { if(navigableSubtreeSequenceFacets.isEmpty()) return Optional.empty(); - + var comparator = new DeweyOrderComparator(); Can subNodesMethodHandles = navigableSubtreeSequenceFacets .sorted((a, b)->comparator.compare(a.sequence(), b.sequence())) .map(NavigableSubtreeSequenceFacet::methodHandle); - - return Optional.of(new NavigableSubtreeFacetRecord(subNodesMethodHandles, facetHolder)); + + return Optional.of(new NavigableSubtreeFacet(subNodesMethodHandles, facetHolder)); + } + + + private final Can subNodesMethodHandles; + + NavigableSubtreeFacet( + final Can subNodesMethodHandles, + final FacetHolder facetHolder) { + super(NavigableSubtreeFacet.class, facetHolder); + this.subNodesMethodHandles = subNodesMethodHandles; + } + + @Override + public final int childCountOf(final Object node) { + return subNodesMethodHandles.stream() + .mapToInt(mh->{ + try { + return _NullSafe.sizeAutodetect(mh.invoke(node)); + } catch (Throwable e) { + log.error("failed to invoke subNodesMethodHandle {}", + mh.toString(), e); + return 0; + } + }) + .sum(); + } + + @Override + public final Stream childrenOf(final Object node) { + return subNodesMethodHandles.stream() + .flatMap(mh->{ + try { + return _NullSafe.streamAutodetect(mh.invoke(node)); + } catch (Throwable e) { + throw _Exceptions.unrecoverable(e); + } + }); + } + + @Override + public void visitAttributes(final BiConsumer visitor) { + NavigableSubtreeFacet.super.visitAttributes(visitor); + visitor.accept("subNodesMethodHandles", subNodesMethodHandles.map(MethodHandle::toString)); } - -} + +} \ No newline at end of file diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetPostProcessor.java index ceca8de2bbd..ab0251e9504 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetPostProcessor.java @@ -20,7 +20,6 @@ import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.MixedIn; @@ -28,7 +27,7 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectMember; /** - * Installs the {@link NavigableSubtreeFacet} + * Installs the {@link NavigableSubtreeFacet} * as aggregated via {@link NavigableSubtreeSequenceFacet} collected from {@link ObjectAssociation}s. * {@link ObjectMember}s of the {@link ObjectSpecification}. */ @@ -40,12 +39,13 @@ public NavigableSubtreeFacetPostProcessor(final MetaModelContext metaModelContex @Override public void postProcessObject(final ObjectSpecification objSpec) { - var navigableSubtreeSequenceFacets = + var navigableSubtreeSequenceFacets = objSpec.streamAssociations(MixedIn.EXCLUDED) .flatMap(assoc->assoc.lookupFacet(NavigableSubtreeSequenceFacet.class).stream()) .collect(Can.toCan()); - - FacetUtil.addFacetIfPresent(NavigableSubtreeFacet.create(navigableSubtreeSequenceFacets, objSpec)); + + NavigableSubtreeFacet + .create(navigableSubtreeSequenceFacets, objSpec); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetRecord.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetRecord.java deleted file mode 100644 index b2119cad0b0..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetRecord.java +++ /dev/null @@ -1,75 +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.causeway.core.metamodel.facets.object.navchild; - -import java.lang.invoke.MethodHandle; -import java.util.function.BiConsumer; -import java.util.stream.Stream; - -import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.commons.internal.base._NullSafe; -import org.apache.causeway.commons.internal.exceptions._Exceptions; -import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -record NavigableSubtreeFacetRecord ( - Can subNodesMethodHandles, - FacetHolder facetHolder) -implements NavigableSubtreeFacet { - - @Override public Class facetType() { return NavigableSubtreeFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } - - @Override - public final int childCountOf(final Object node) { - return subNodesMethodHandles.stream() - .mapToInt(mh->{ - try { - return _NullSafe.sizeAutodetect(mh.invoke(node)); - } catch (Throwable e) { - log.error("failed to invoke subNodesMethodHandle {}", - mh.toString(), e); - return 0; - } - }) - .sum(); - } - - @Override - public final Stream childrenOf(final Object node) { - return subNodesMethodHandles.stream() - .flatMap(mh->{ - try { - return _NullSafe.streamAutodetect(mh.invoke(node)); - } catch (Throwable e) { - throw _Exceptions.unrecoverable(e); - } - }); - } - - @Override - public void visitAttributes(final BiConsumer visitor) { - NavigableSubtreeFacet.super.visitAttributes(visitor); - visitor.accept("subNodesMethodHandles", subNodesMethodHandles.map(MethodHandle::toString)); - } - -} \ No newline at end of file diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacet.java index 6b9ac38502c..8a935643f83 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacet.java @@ -21,27 +21,33 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.util.Optional; +import java.util.function.BiConsumer; import org.apache.causeway.commons.functional.Try; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import lombok.Getter; +import lombok.experimental.Accessors; + /** * Provides a MethodHandle and its associated Dewey order. * * @since 3.2 */ -public sealed interface NavigableSubtreeSequenceFacet -extends Facet -permits NavigableSubtreeSequenceFacetRecord { +public final class NavigableSubtreeSequenceFacet +extends FacetAbstract { - String sequence(); - MethodHandle methodHandle(); + @Getter @Accessors(fluent = true) + private final String sequence; + @Getter @Accessors(fluent = true) + private final MethodHandle methodHandle; + private final String origin; // -- FACTORY - static Optional create( + public static Optional create( /** * Informal text, describing the origin of this facet. */ @@ -56,9 +62,29 @@ static Optional create( .flatMap(method->Try.call(()->MethodHandles .privateLookupIn(cls, MethodHandles.lookup()) .unreflect(method)) - .ifFailure(e->e.printStackTrace()) + .ifFailure(Throwable::printStackTrace) .getValue() - .map(mh->new NavigableSubtreeSequenceFacetRecord(sequence, mh, origin, facetHolder))); + .map(mh->new NavigableSubtreeSequenceFacet(sequence, mh, origin, facetHolder))); + } + + private NavigableSubtreeSequenceFacet( + final String sequence, + final MethodHandle methodHandle, + final String origin, + final FacetHolder facetHolder) { + super(NavigableSubtreeSequenceFacet.class, facetHolder); + this.sequence = sequence; + this.methodHandle = methodHandle; + this.origin = origin; + } + + @Override + public void visitAttributes(final BiConsumer visitor) { + super.visitAttributes(visitor); + visitor.accept("origin", origin); + visitor.accept("sequence", sequence); + visitor.accept("methodHandle", methodHandle); } } + diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacetRecord.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacetRecord.java deleted file mode 100644 index 4deae6d1a3b..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeSequenceFacetRecord.java +++ /dev/null @@ -1,45 +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.causeway.core.metamodel.facets.object.navchild; - -import java.lang.invoke.MethodHandle; -import java.util.function.BiConsumer; - -import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; - -record NavigableSubtreeSequenceFacetRecord( - String sequence, - MethodHandle methodHandle, - String origin, - FacetHolder facetHolder) -implements NavigableSubtreeSequenceFacet { - - @Override public Class facetType() { return NavigableSubtreeSequenceFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } - - @Override - public void visitAttributes(final BiConsumer visitor) { - NavigableSubtreeSequenceFacet.super.visitAttributes(visitor); - visitor.accept("origin", origin); - visitor.accept("sequence", sequence); - visitor.accept("methodHandle", methodHandle); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java index 82d4ffa0488..611dccd2495 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java @@ -96,8 +96,7 @@ public void process(final ProcessClassContext processClassContext) { } else return; // no parent resolvable - addFacetIfPresent( - NavigableParentFacetViaMethod.create(processClassContext, method)); + NavigableParentFacetViaMethod.create(processClassContext, method); } private static boolean isNavigableParentFlagSet(final AnnotatedElement annotatedElement){ diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImplFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImplFactory.java index 679a3c2ca4c..5e7628db8b6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImplFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImplFactory.java @@ -34,7 +34,6 @@ public ObjectValidPropertiesFacetImplFactory(final MetaModelContext mmc) { @Override public void process(final ProcessClassContext processClassContaxt) { - addFacet( - new ObjectValidPropertiesFacetImpl(processClassContaxt.facetHolder())); + new ObjectValidPropertiesFacetImpl(processClassContaxt.facetHolder()); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java index 1273a4e1821..dd1e7a47270 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java @@ -21,22 +21,25 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; - import org.apache.causeway.applib.annotation.ObjectSupport; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.facets.object.projection.ProjectionFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.jspecify.annotations.NonNull; -public record IconFacetFromProjectionFacet( - ProjectionFacet projectionFacet, - FacetHolder facetHolder) +public final class IconFacetFromProjectionFacet +extends FacetAbstract implements IconFacet { - @Override public Class facetType() { return IconFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + private final ProjectionFacet projectionFacet; + + public IconFacetFromProjectionFacet(final ProjectionFacet projectionFacet, final FacetHolder facetHolder) { + super(IconFacet.class, facetHolder); + this.projectionFacet = projectionFacet; + } @Override public Optional icon(final ManagedObject targetAdapter, final ObjectSupport.IconSize iconSize) { @@ -52,9 +55,9 @@ public void visitAttributes(final BiConsumer visitor) { @Override public boolean semanticEquals(final @NonNull Facet other) { - return other instanceof IconFacetFromProjectionFacet + return other instanceof IconFacetFromProjectionFacet i ? this.projectionFacet - .semanticEquals(((IconFacetFromProjectionFacet)other).projectionFacet) + .semanticEquals(i.projectionFacet) : false; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java index fb7a5d337fc..337acf52a02 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java @@ -21,36 +21,34 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; - import org.apache.causeway.applib.annotation.PromptStyle; import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.applib.layout.component.PropertyLayoutData; import org.apache.causeway.core.config.CausewayConfiguration; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import org.jspecify.annotations.Nullable; + +import lombok.Getter; +import lombok.experimental.Accessors; /** * Provides the prompt style for editing of a property. */ -public record PromptStyleFacet( - @NonNull String origin, - @NonNull PromptStyle value, - @NonNull FacetHolder facetHolder, - Facet.@NonNull Precedence precedence, - @Nullable String qualifier, - boolean isObjectTypeSpecific - ) implements Facet, QualifiedFacet { +public class PromptStyleFacet + extends FacetAbstract + implements QualifiedFacet { public static PromptStyleFacet compositeValueEdit(final FacetHolder facetHolder) { - return new PromptStyleFacet("CompositeValueEdit", PromptStyle.INLINE_AS_IF_EDIT, facetHolder, Precedence.SYNTHESIZED, null, false); + return new PromptStyleFacet("CompositeValueEdit", PromptStyle.INLINE_AS_IF_EDIT, facetHolder){ + @Override public Precedence precedence() { return Precedence.SYNTHESIZED; } + }; } public static PromptStyleFacet asConfgured(final CausewayConfiguration configuration, final FacetHolder facetHolder) { - return new PromptStyleFacet("Configuration", configuration.viewer().wicket().promptStyle(), facetHolder, Precedence.DEFAULT, null, false); + return new PromptStyleFacet("Configuration", configuration.viewer().wicket().promptStyle(), facetHolder); } public static Optional createForActionLayoutXml( final ActionLayoutData actionLayoutData, @@ -59,7 +57,11 @@ public static Optional createForActionLayoutXml( @Nullable final String qualifier) { return Optional.ofNullable(actionLayoutData) .map(ActionLayoutData::getPromptStyle) - .map(promptStyle->new PromptStyleFacet("ActionLayoutXml", promptStyle, objectAction, precedence, qualifier, true)); + .map(promptStyle->new PromptStyleFacet("ActionLayoutXml", promptStyle, objectAction) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + @Override final public boolean isObjectTypeSpecific() { return true; } + }); } public static Optional createForPropertyLayoutXml( final PropertyLayoutData propertyLayoutData, @@ -68,24 +70,31 @@ public static Optional createForPropertyLayoutXml( @Nullable final String qualifier) { return Optional.ofNullable(propertyLayoutData) .map(PropertyLayoutData::getPromptStyle) - .map(promptStyle->new PromptStyleFacet("PropertyLayoutXml", promptStyle, oneToOneAssociation, precedence, qualifier, true)); + .map(promptStyle->new PromptStyleFacet("PropertyLayoutXml", promptStyle, oneToOneAssociation) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + @Override final public boolean isObjectTypeSpecific() { return true; } + }); } - public PromptStyleFacet(final String origin, final PromptStyle of, final FacetHolder holder) { - this(origin, of, holder, Precedence.DEFAULT, null, false); - } + @Getter @Accessors(fluent = true) + private final String origin; + @Getter @Accessors(fluent = true) + private final PromptStyle value; - public PromptStyleFacet(final String origin, final PromptStyle of, final FacetHolder holder, - final @Nullable String qualifier, final boolean isObjectTypeSpecific) { - this(origin, of, holder, Precedence.DEFAULT, qualifier, isObjectTypeSpecific); + public PromptStyleFacet( + final String origin, + final PromptStyle value, + final FacetHolder facetHolder) { + super(PromptStyleFacet.class, facetHolder); + this.origin = origin; + this.value = value; } - @Override public Class facetType() { return getClass(); } - @Override public void visitAttributes(final BiConsumer visitor) { - Facet.super.visitAttributes(visitor); - visitor.accept("origin", origin()); + super.visitAttributes(visitor); + visitor.accept("origin", origin); visitor.accept("promptStyle", value); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java index 5f5cc23f060..b608d1c27af 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java @@ -28,10 +28,9 @@ import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.object.cssclass.method.CssClassFacetViaCssClassMethod; import org.apache.causeway.core.metamodel.facets.object.disabled.DisabledObjectFacet; import org.apache.causeway.core.metamodel.facets.object.disabled.method.DisabledObjectFacetViaMethod; @@ -98,20 +97,16 @@ public void process(final ProcessMethodContext processMethodContext) { var owningSpec = processMethodContext.loadSpecificationTypeOnly(owningClass); owningSpec.lookupFacet(DisabledObjectFacet.class) - .map(disabledObjectFacet->disabledObjectFacet.clone(member)) - .ifPresent(FacetUtil::addFacet); + .ifPresent(disabledObjectFacet->disabledObjectFacet.clone(member)); owningSpec.lookupFacet(HiddenObjectFacet.class) - .map(hiddenObjectFacet->hiddenObjectFacet.copyTo(member)) - .ifPresent(FacetUtil::addFacet); + .ifPresent(hiddenObjectFacet->hiddenObjectFacet.copyTo(member)); } // -- HELPER private void inferTitleFromToString(final ProcessClassContext processClassContext) { - var toString = ObjectSupportMethod.TO_STRING; - MethodFinder .publicOnly( processClassContext.cls(), @@ -119,10 +114,9 @@ private void inferTitleFromToString(final ProcessClassContext processClassContex .withReturnTypeAnyOf(toString.getReturnTypeCategory().getReturnTypes()) .streamMethodsMatchingSignature(NO_ARG) .peek(processClassContext::removeMethod) - .forEach(method->{ - addFacetIfPresent(TitleFacetFromToStringMethod + .forEach(method-> + TitleFacetFromToStringMethod .create(method, processClassContext.facetHolder())); - }); } private void processObjectSupport( @@ -138,11 +132,9 @@ private void processObjectSupport( .withReturnTypeAnyOf(objectSupportMethodEnum.getReturnTypeCategory().getReturnTypes()) .streamMethodsMatchingSignature(methodSignature) .peek(processClassContext::removeMethod) - .forEach(method->{ - addFacetIfPresent(objectSupportFacetConstructor - .apply(method, processClassContext.facetHolder())) - .orElse(null); - }); + .forEach(method-> + objectSupportFacetConstructor + .apply(method, processClassContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java index 8735d02dc2f..58c219842a1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java @@ -50,7 +50,7 @@ public void process(final ProcessClassContext processClassContext) { var cls = processClassContext.cls(); var facetHolder = processClassContext.facetHolder(); - addFacetIfPresent(TitleFacetViaTitleAnnotation.create(cls, facetHolder)); + TitleFacetViaTitleAnnotation.create(cls, facetHolder); } /** @@ -70,7 +70,7 @@ public void refineProgrammingModel(final ProgrammingModel programmingModel) { var titleFacetTopRank = objectSpec - .getFacetRanking(TitleFacet.class) + .lookupFacetRanking(TitleFacet.class) .map(facetRanking->facetRanking.getTopRank(TitleFacet.class)) .orElse(Can.empty()) .distinct(TitleFacet::semanticEquals); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java index 27930b75dbc..b1fc514c70f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/annotcfg/ValueFacetForValueAnnotationOrAnyMatchingValueSemanticsFacetFactory.java @@ -29,7 +29,6 @@ import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.object.defaults.DefaultedFacet; @@ -130,13 +129,11 @@ public static ValueFacet installValueFacet( final ValueFacet valueFacet = ValueFacetUsingSemanticsProvider .create(valueClass, valueSemanticsProviders, valueSpec); - valueSpec.addFacet(valueFacet); - valueSpec.addFacet(new ImmutableFacetViaValueSemantics(valueSpec)); - valueSpec.addFacet(TitleFacetFromValueFacet.create(valueFacet, valueSpec)); - - FacetUtil.addFacetIfPresent(TypicalLengthFacetFromValueFacet.create(valueFacet, valueSpec)); - FacetUtil.addFacetIfPresent(MaxLengthFacetFromValueFacet.create(valueFacet, valueSpec)); - FacetUtil.addFacetIfPresent(DefaultedFacetFromValueFacet.create(valueFacet, valueSpec)); + new ImmutableFacetViaValueSemantics(valueSpec); + TitleFacetFromValueFacet.create(valueFacet, valueSpec); + TypicalLengthFacetFromValueFacet.create(valueFacet, valueSpec); + MaxLengthFacetFromValueFacet.create(valueFacet, valueSpec); + DefaultedFacetFromValueFacet.create(valueFacet, valueSpec); _Assert.assertTrue(valueSpec.valueFacet().isPresent(), ()->"value facet not created for %s (provider-count=%d)" .formatted(valueSpec.correspondingClass().getName(), diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java index 47e36e8e0f2..2f33e8ff200 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetFactory.java @@ -26,7 +26,6 @@ import org.apache.causeway.commons.internal.reflection._ClassCache; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -81,21 +80,16 @@ public void process(final ProcessClassContext processClassContext) { // XmlRootElement annotation (with default precedence) var hasXmlRootElementAnnotation = _ClassCache.getInstance().head(type).hasJaxbRootElementSemantics(); - FacetUtil - .addFacetIfPresent( - ViewModelFacetForXmlRootElementAnnotation - .create(hasXmlRootElementAnnotation, hmacUrlCodec, jaxbService, facetHolder)); - - // (with high precedence) - FacetUtil - .addFacetIfPresent( - // either ViewModel interface (highest precedence) - ViewModelFacetForViewModelInterface.create(type, hmacUrlCodec, facetHolder) - // or Serializable interface (if any) - .or(()->ViewModelFacetForSerializableInterface.create(type, hmacUrlCodec, facetHolder)) - // or else Java record (if any) - .or(()->ViewModelFacetForJavaRecord.create(type, mementoHmacContext, facetHolder)) - ); + + ViewModelFacetForXmlRootElementAnnotation + .create(hasXmlRootElementAnnotation, hmacUrlCodec, jaxbService, facetHolder); + + // either ViewModel interface (highest precedence) + ViewModelFacetForViewModelInterface.create(type, hmacUrlCodec, facetHolder) + // or Serializable interface (if any) + .or(()->ViewModelFacetForSerializableInterface.create(type, hmacUrlCodec, facetHolder)) + // or else Java record (if any) + .or(()->ViewModelFacetForJavaRecord.create(type, mementoHmacContext, facetHolder)); // DomainObject(nature=VIEW_MODEL) is managed by the DomainObjectAnnotationFacetFactory as a fallback strategy } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxFractionalDigitsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxFractionalDigitsFacet.java index a82ae42078a..29997cab758 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxFractionalDigitsFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxFractionalDigitsFacet.java @@ -20,13 +20,14 @@ import java.util.Optional; import java.util.function.BiConsumer; - -import jakarta.validation.constraints.Digits; - -import org.jspecify.annotations.NonNull; +import java.util.function.Function; import org.apache.causeway.applib.annotation.ValueSemantics; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.jspecify.annotations.NonNull; + +import jakarta.validation.constraints.Digits; /** * The maximum allowed number of digits to the right of the decimal place (fractional part) @@ -68,15 +69,23 @@ default void visitAttributes(final BiConsumer visitor) { * The stronger constraint wins. If equal, first argument wins over second. */ static Optional strongestConstraint( - final Optional a, - final Optional b) { + final FacetHolder facetHolder, + final Function> factoryA, + final Function> factoryB) { + + var tmp = FacetHolder.simple(facetHolder.getMetaModelContext(), null); + + var b = factoryB.apply(tmp); if(b.isEmpty()) - return a; + return factoryA.apply(facetHolder); + + var a = factoryA.apply(tmp); if(a.isEmpty()) - return b; + return factoryB.apply(facetHolder); + return a.get().maxFractionalDigits() <= b.get().maxFractionalDigits() - ? a - : b; + ? factoryA.apply(facetHolder) + : factoryB.apply(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxIntegerDigitsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxIntegerDigitsFacet.java index d8ed715aa77..1ace5c49775 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxIntegerDigitsFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxIntegerDigitsFacet.java @@ -20,11 +20,12 @@ import java.util.Optional; import java.util.function.BiConsumer; - -import org.jspecify.annotations.NonNull; +import java.util.function.Function; import org.apache.causeway.applib.annotation.ValueSemantics; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.jspecify.annotations.NonNull; /** * The maximum allowed number of digits to the left of the decimal place @@ -61,16 +62,24 @@ default void visitAttributes(final BiConsumer visitor) { /** * The stronger constraint wins. If equal, first argument wins over second. */ - public static Optional strongestConstraint( - final Optional a, - final Optional b) { + static Optional strongestConstraint( + final FacetHolder facetHolder, + final Function> factoryA, + final Function> factoryB) { + + var tmp = FacetHolder.simple(facetHolder.getMetaModelContext(), null); + + var b = factoryB.apply(tmp); if(b.isEmpty()) - return a; + return factoryA.apply(facetHolder); + + var a = factoryA.apply(tmp); if(a.isEmpty()) - return b; + return factoryB.apply(facetHolder); + return a.get().maxIntegerDigits() <= b.get().maxIntegerDigits() - ? a - : b; + ? factoryA.apply(facetHolder) + : factoryB.apply(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacet.java index 34358729a12..b59d6ace3ef 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MinFractionalDigitsFacet.java @@ -20,11 +20,12 @@ import java.util.Optional; import java.util.function.BiConsumer; - -import org.jspecify.annotations.NonNull; +import java.util.function.Function; import org.apache.causeway.applib.annotation.ValueSemantics; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.jspecify.annotations.NonNull; /** * The minimum required number of digits to the right of the decimal place (fractional part) @@ -63,15 +64,23 @@ default void visitAttributes(final BiConsumer visitor) { * The stronger constraint wins. If equal, first argument wins over second. */ static Optional strongestConstraint( - final Optional a, - final Optional b) { + final FacetHolder facetHolder, + final Function> factoryA, + final Function> factoryB) { + + var tmp = FacetHolder.simple(facetHolder.getMetaModelContext(), null); + + var b = factoryB.apply(tmp); if(b.isEmpty()) - return a; + return factoryA.apply(facetHolder); + + var a = factoryA.apply(tmp); if(a.isEmpty()) - return b; + return factoryB.apply(facetHolder); + return a.get().minFractionalDigits() <= b.get().minFractionalDigits() - ? a - : b; + ? factoryA.apply(facetHolder) + : factoryB.apply(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java index b5b31db68d5..69ba4208526 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java @@ -18,15 +18,15 @@ */ package org.apache.causeway.core.metamodel.facets.param.autocomplete.method; -import jakarta.inject.Inject; - import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; +import jakarta.inject.Inject; + public class ActionParameterAutoCompleteFacetViaMethodFactory extends ActionParameterSupportFacetFactoryAbstract { @@ -44,9 +44,8 @@ protected void onSearchResult( var autoCompleteMethod = searchResult.supportingMethod(); var patConstructor = searchResult.patConstructor(); var paramSupportReturnType = searchResult.paramSupportReturnType(); - addFacet( - new ActionParameterAutoCompleteFacetViaMethod( - autoCompleteMethod, paramSupportReturnType, patConstructor, paramAsHolder)); + new ActionParameterAutoCompleteFacetViaMethod( + autoCompleteMethod, paramSupportReturnType, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java index 6c64d631677..b0236e1e525 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java @@ -18,14 +18,14 @@ */ package org.apache.causeway.core.metamodel.facets.param.choices.methodnum; -import jakarta.inject.Inject; - import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; +import jakarta.inject.Inject; + public class ActionParameterChoicesFacetViaMethodFactory extends ActionParameterSupportFacetFactoryAbstract { @@ -41,9 +41,8 @@ protected void onSearchResult( var choicesMethod = searchResult.supportingMethod(); var patConstructor = searchResult.patConstructor(); var paramSupportReturnType = searchResult.paramSupportReturnType(); - addFacet( - new ActionParameterChoicesFacetViaMethod( - choicesMethod, paramSupportReturnType, patConstructor, paramAsHolder)); + new ActionParameterChoicesFacetViaMethod( + choicesMethod, paramSupportReturnType, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java index 3a8bbb2ce4a..6535b4d16a4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java @@ -18,14 +18,14 @@ */ package org.apache.causeway.core.metamodel.facets.param.defaults.methodnum; -import jakarta.inject.Inject; - import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; +import jakarta.inject.Inject; + public class ActionParameterDefaultsFacetViaMethodFactory extends ActionParameterSupportFacetFactoryAbstract { @@ -41,9 +41,8 @@ protected void onSearchResult( var defaultMethod = searchResult.supportingMethod(); var paramIndex = searchResult.paramIndex(); var patConstructor = searchResult.patConstructor(); - addFacet( - new ActionParameterDefaultsFacetViaMethod( - defaultMethod, paramIndex, patConstructor, paramAsHolder)); + new ActionParameterDefaultsFacetViaMethod( + defaultMethod, paramIndex, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java index 1f8ceda670d..d464b281beb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java @@ -18,15 +18,15 @@ */ package org.apache.causeway.core.metamodel.facets.param.disable.method; -import jakarta.inject.Inject; - import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.param.disable.ActionParameterDisabledFacet; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; +import jakarta.inject.Inject; + /** * Sets up {@link ActionParameterDisabledFacet}. */ @@ -44,9 +44,8 @@ protected void onSearchResult( final ParamSupportingMethodSearchResult searchResult) { var disableMethod = searchResult.supportingMethod(); var patConstructor = searchResult.patConstructor(); - addFacet( - new ActionParameterDisabledFacetViaMethod( - disableMethod, patConstructor, paramAsHolder)); + new ActionParameterDisabledFacetViaMethod( + disableMethod, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java index 2ea4457fba4..483adfba836 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java @@ -18,15 +18,15 @@ */ package org.apache.causeway.core.metamodel.facets.param.hide.method; -import jakarta.inject.Inject; - import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.param.hide.ActionParameterHiddenFacet; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; +import jakarta.inject.Inject; + /** * Sets up {@link ActionParameterHiddenFacet}. */ @@ -44,9 +44,8 @@ protected void onSearchResult( final ParamSupportingMethodSearchResult searchResult) { var hideMethod = searchResult.supportingMethod(); var patConstructor = searchResult.patConstructor(); - addFacet( - new ActionParameterHiddenFacetViaMethod( - hideMethod, patConstructor, paramAsHolder)); + new ActionParameterHiddenFacetViaMethod( + hideMethod, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java index 00c7d8b3819..8b575efb4f7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java @@ -47,29 +47,23 @@ protected void addFacets( var facetHolder = processParameterContext.facetHolder(); - addFacetIfPresent( - CssClassFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); + CssClassFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); - addFacetIfPresent( - ParamDescribedFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); + ParamDescribedFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); - addFacetIfPresent( - LabelAtFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); + LabelAtFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); - addFacetIfPresent( - MultiLineFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); + MultiLineFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); - addFacetIfPresent( - NamedFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); - - addFacetIfPresent(TypicalLengthFacetForParameterLayoutAnnotation - .create(parameterLayoutIfAny, facetHolder)); + NamedFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); + TypicalLengthFacetForParameterLayoutAnnotation + .create(parameterLayoutIfAny, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java index aea3bcc767c..73e87ad810d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/mandatory/dflt/MandatoryFacetOnParametersDefaultFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.facets.param.mandatory.dflt; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -49,9 +48,8 @@ public MandatoryFacetOnParametersDefaultFactory(final MetaModelContext mmc) { @Override public void processParams(final ProcessParameterContext processParameterContext) { - FacetUtil.addFacet( - MandatoryFacetDefault - .required(processParameterContext.facetHolder())); + MandatoryFacetDefault + .required(processParameterContext.facetHolder()); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetFactoryUsingReflection.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetFactoryUsingReflection.java index 9664361501c..7f9ef27fc38 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetFactoryUsingReflection.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetFactoryUsingReflection.java @@ -22,7 +22,6 @@ import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -52,7 +51,6 @@ public ParameterNameFacetFactoryUsingReflection(final MetaModelContext mmc) { @Override public void processParams(final ProcessParameterContext processParameterContext) { - var parameterName = processParameterContext.parameterName(); // if not compiled with -parameters flag or synthetic, then ignore @@ -62,9 +60,7 @@ public void processParams(final ProcessParameterContext processParameterContext) var naturalName = _Strings.asNaturalName.apply(parameterName); var facetHolder = processParameterContext.facetHolder(); - - FacetUtil.addFacet( - new NamedFacetForParameterUsingReflection(naturalName, facetHolder)); + new NamedFacetForParameterUsingReflection(naturalName, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java index 3a8e5a36847..0bc8fe26611 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java @@ -54,54 +54,41 @@ public void processParams(final ProcessParameterContext processParameterContext) // check for @Parameter(precedingParamsPolicy=...) void processPrecedingParamsPolicy(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); - - addFacetIfPresent( - PrecedingParametersPolicyFacet - .create(parameterIfAny, getConfiguration(), holder)); + PrecedingParametersPolicyFacet + .create(parameterIfAny, getConfiguration(), holder); } void processParamsMaxLength(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); - - addFacetIfPresent( - MaxLengthFacetForParameterAnnotation - .create(parameterIfAny, holder)); + MaxLengthFacetForParameterAnnotation + .create(parameterIfAny, holder); } void processParamsMustSatisfy(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); - - addFacetIfPresent( - MustSatisfySpecificationFacetForParameterAnnotation - .create(parameterIfAny, holder, getFactoryService())); + MustSatisfySpecificationFacetForParameterAnnotation + .create(parameterIfAny, holder, getFactoryService()); } void processParamsRegEx(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); var parameterType = processParameterContext.parameterType(); var patternIfAny = processParameterContext.synthesizeOnParameter(Pattern.class); - addFacetIfPresent( - RegExFacetForPatternAnnotationOnParameter - .create(patternIfAny, parameterType, holder)); - addFacetIfPresent( - RegExFacetForParameterAnnotation - .create(parameterIfAny, parameterType, holder)); + RegExFacetForPatternAnnotationOnParameter + .create(patternIfAny, parameterType, holder); + RegExFacetForParameterAnnotation + .create(parameterIfAny, parameterType, holder); } void processParamsOptional(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); @@ -110,23 +97,17 @@ void processParamsOptional(final ProcessParameterContext processParameterContext var parameterType = processParameterContext.parameterType(); - addFacetIfPresent( - MandatoryFacetInvertedByNullableAnnotationOnParameter - .create(hasNullable, parameterType, holder)); - - addFacetIfPresent( - MandatoryFacetForParameterAnnotation - .create(parameterIfAny, parameterType, holder)); + MandatoryFacetInvertedByNullableAnnotationOnParameter + .create(hasNullable, parameterType, holder); + MandatoryFacetForParameterAnnotation + .create(parameterIfAny, parameterType, holder); } void processParamsFileAccept(final ProcessParameterContext processParameterContext) { - var holder = processParameterContext.facetHolder(); var parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class); - - addFacetIfPresent( - FileAcceptFacetForParameterAnnotation - .create(parameterIfAny, holder)); + FileAcceptFacetForParameterAnnotation + .create(parameterIfAny, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByNullableAnnotationOnParameter.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByNullableAnnotationOnParameter.java index 9b155b4af6f..3f92b725ef8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByNullableAnnotationOnParameter.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByNullableAnnotationOnParameter.java @@ -23,7 +23,7 @@ import org.jspecify.annotations.Nullable; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetAbstract; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java index 5e172aa72d2..081289f953c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java @@ -23,8 +23,8 @@ import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ParamSupportingMethodSearchRequestBuilder; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java index 965fd8bce54..143969a9830 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java @@ -18,17 +18,17 @@ */ package org.apache.causeway.core.metamodel.facets.param.validate.method; -import jakarta.inject.Inject; - import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchResult; import org.apache.causeway.core.metamodel.facets.ParameterSupport.SearchAlgorithm; import org.apache.causeway.core.metamodel.facets.param.support.ActionParameterSupportFacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.param.validate.ActionParameterValidationFacet; +import jakarta.inject.Inject; + /** * Sets up {@link ActionParameterValidationFacet}. */ public class ActionParameterValidationFacetViaMethodFactory @@ -48,9 +48,8 @@ protected void onSearchResult( final ParamSupportingMethodSearchResult searchResult) { var validateMethod = searchResult.supportingMethod(); var patConstructor = searchResult.patConstructor(); - addFacet( - new ActionParameterValidationFacetViaMethod( - validateMethod, patConstructor, paramAsHolder)); + new ActionParameterValidationFacetViaMethod( + validateMethod, patConstructor, paramAsHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java index 70956b8e960..bef2f16552e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java @@ -25,9 +25,9 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; import org.apache.causeway.commons.semantics.AccessorSemantics; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.AccessorFacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java index f860e48a043..ff4dd4fa2a3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java @@ -43,13 +43,11 @@ protected void search( var getterType = getterOrMixinMain.getReturnType(); methodFinder - .streamMethodsMatchingSignature(STRING_ARG) - .peek(processMethodContext::removeMethod) - .forEach(autoCompleteMethod->{ - addFacet( - new PropertyAutoCompleteFacetMethod( - autoCompleteMethod, getterType, processMethodContext.facetHolder())); - }); + .streamMethodsMatchingSignature(STRING_ARG) + .peek(processMethodContext::removeMethod) + .forEach(autoCompleteMethod-> + new PropertyAutoCompleteFacetMethod( + autoCompleteMethod, getterType, processMethodContext.facetHolder())); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java index 830d1d907f2..d1fefe09358 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java @@ -25,7 +25,7 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract; import org.apache.causeway.core.metamodel.object.ManagedObject; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java index 7f634abd49a..1216588b6d3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java @@ -43,14 +43,11 @@ protected void search( var getterType = getterOrMixinMain.getReturnType(); methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(choicesMethod->{ - addFacet( - new PropertyChoicesFacetViaMethod( - choicesMethod, getterType, processMethodContext.facetHolder())); - }); - + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(choicesMethod-> + new PropertyChoicesFacetViaMethod( + choicesMethod, getterType, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetFromTypeFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetFromTypeFactory.java index 1274e6e3c99..7d1866a65cf 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetFromTypeFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetFromTypeFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.facets.properties.defaults.fromtype; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.object.defaults.DefaultedFacet; @@ -52,11 +51,9 @@ public void process(final ProcessMethodContext processMethodContext) { // try to infer defaults from the underlying return type processMethodContext.loadSpecificationTypeOnly(processMethodContext.methodFacade().getReturnType()) .lookupFacet(DefaultedFacet.class) - .ifPresent(returnTypeDefaultedFacet->{ - FacetUtil.addFacet( - new PropertyDefaultFacetFromDefaultedFacet( - returnTypeDefaultedFacet, processMethodContext.facetHolder())); - }); + .ifPresent(returnTypeDefaultedFacet-> + new PropertyDefaultFacetFromDefaultedFacet( + returnTypeDefaultedFacet, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java index f75c1308395..b653faab244 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java @@ -38,16 +38,12 @@ public PropertyDefaultFacetViaMethodFactory(final MetaModelContext mmc) { protected void search( final ProcessMethodContext processMethodContext, final MethodFinder methodFinder) { - methodFinder - .streamMethodsMatchingSignature(NO_ARG) - .peek(processMethodContext::removeMethod) - .forEach(defaultMethod->{ - addFacet( - new PropertyDefaultFacetViaMethod( - defaultMethod, processMethodContext.facetHolder())); - }); - + .streamMethodsMatchingSignature(NO_ARG) + .peek(processMethodContext::removeMethod) + .forEach(defaultMethod-> + new PropertyDefaultFacetViaMethod( + defaultMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutable.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutable.java index 6a5b0b3ae70..9e08a96ea50 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutable.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutable.java @@ -23,7 +23,7 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import org.apache.causeway.core.metamodel.facets.object.immutable.ImmutableFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutableFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutableFactory.java index 317fce42a7f..0c3018f4957 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutableFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/fromimmutable/DisabledFacetOnPropertyFromImmutableFactory.java @@ -49,9 +49,9 @@ public void process(final ProcessMethodContext processMethodContext) { if(semantics.isEnabled()) return; - addFacet( - DisabledFacetOnPropertyFromImmutable - .forImmutable(facetHolder, immutableFacet)); + + DisabledFacetOnPropertyFromImmutable + .forImmutable(facetHolder, immutableFacet); }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/inferred/DisabledFacetOnPropertyInferredFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/inferred/DisabledFacetOnPropertyInferredFactory.java index f56fd698f0e..d71f9ad15e7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/inferred/DisabledFacetOnPropertyInferredFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/disabled/inferred/DisabledFacetOnPropertyInferredFactory.java @@ -19,10 +19,9 @@ package org.apache.causeway.core.metamodel.facets.properties.disabled.inferred; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; @@ -41,7 +40,6 @@ public DisabledFacetOnPropertyInferredFactory(final MetaModelContext mmc) { @Override public void process(final ProcessMethodContext processMethodContext) { - final FacetedMethod property = processMethodContext.facetHolder(); if(property.containsNonFallbackFacet(DisabledFacet.class)) @@ -52,7 +50,7 @@ public void process(final ProcessMethodContext processMethodContext) { return; // else, infer that this is not modifiable - FacetUtil.addFacet(new DisabledFacetOnPropertyFromMissingSetter(property)); + new DisabledFacetOnPropertyFromMissingSetter(property); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java index 385ecefec9d..a2f9ef0a3a1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/mandatory/dflt/MandatoryFacetOnProperyDefaultFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.facets.properties.mandatory.dflt; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -50,9 +49,8 @@ public MandatoryFacetOnProperyDefaultFactory(final MetaModelContext mmc) { @Override public void process(final ProcessMethodContext processMethodContext) { - FacetUtil.addFacet( - MandatoryFacetDefault - .required(processMethodContext.facetHolder())); + MandatoryFacetDefault + .required(processMethodContext.facetHolder()); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/projection/ProjectingFacetFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/projection/ProjectingFacetFromPropertyAnnotation.java index d937dec5be5..0eb8fab6cfc 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/projection/ProjectingFacetFromPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/projection/ProjectingFacetFromPropertyAnnotation.java @@ -23,7 +23,7 @@ import org.apache.causeway.applib.annotation.Projecting; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; public class ProjectingFacetFromPropertyAnnotation extends ProjectingFacetAbstract { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java index f9599a43c49..a200ca65044 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java @@ -24,9 +24,9 @@ import org.apache.causeway.applib.annotation.SemanticsOf; import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet; @@ -109,8 +109,8 @@ Optional propertyIfAny(final ProcessMethodContext processMethodContext void inferMixinSort(final FacetedMethod facetedMethod) { /* if @Property detected on method or type level infer: * @Action(semantics=SAFE) */ - addFacet(new ActionSemanticsFacet("InferSafeForMixedInProperty", SemanticsOf.SAFE, facetedMethod)); - addFacet(ContributingFacetAbstract.createAsProperty(facetedMethod)); + new ActionSemanticsFacet("InferSafeForMixedInProperty", SemanticsOf.SAFE, facetedMethod); + ContributingFacetAbstract.createAsProperty(facetedMethod); } void processDomainEvent(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { @@ -143,8 +143,6 @@ void processDomainEvent(final ProcessMethodContext processMethodContext, final O var propertyDomainEventFacet = PropertyDomainEventFacet .create(propertyIfAny, processMethodContext, getterFacetIfAny); - addFacet(propertyDomainEventFacet); - getterFacetIfAny.ifPresent(getterFacet->{ /* if the property is mutable (never true for mixed-in props), * then replace the current setter and clear facets with equivalents that @@ -156,9 +154,9 @@ void processDomainEvent(final ProcessMethodContext processMethodContext, final O * such that any changes to the latter during post processing * are reflected here as well */ - addFacet(new PropertyModifyFacet( + new PropertyModifyFacet( PropertySetterFacet.class, - propertyDomainEventFacet, getterFacet, setterFacet, holder))); + propertyDomainEventFacet, getterFacet, setterFacet, holder)); }); } @@ -167,9 +165,8 @@ void processEditing(final ProcessMethodContext processMethodContext, final Optio var facetHolder = processMethodContext.facetHolder(); // search for @Property(editing=...) - addFacetIfPresent( - DisabledFacetForPropertyAnnotation - .create(propertyIfAny, facetHolder)); + DisabledFacetForPropertyAnnotation + .create(propertyIfAny, facetHolder); } void processCommandPublishing( @@ -192,19 +189,17 @@ void processCommandPublishing( return; // check for @Property(commandPublishing=...) - addFacet( - CommandPublishingFacetForPropertyAnnotation - .create(propertyIfAny, getConfiguration(), facetHolder, getServiceInjector())); + + CommandPublishingFacetForPropertyAnnotation + .create(propertyIfAny, getConfiguration(), facetHolder, getServiceInjector()); } void processProjecting(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { var facetHolder = processMethodContext.facetHolder(); - addFacetIfPresent( - ProjectingFacetFromPropertyAnnotation - .create(propertyIfAny, facetHolder)); - + ProjectingFacetFromPropertyAnnotation + .create(propertyIfAny, facetHolder); } void processExecutionPublishing( @@ -229,9 +224,8 @@ void processExecutionPublishing( return; // check for @Property(executionPublishing=...) - addFacet( - ExecutionPublishingFacetForPropertyAnnotation - .create(propertyIfAny, getConfiguration(), holder)); + ExecutionPublishingFacetForPropertyAnnotation + .create(propertyIfAny, getConfiguration(), holder); } void processMaxLength(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { @@ -239,36 +233,32 @@ void processMaxLength(final ProcessMethodContext processMethodContext, final Opt var holder = processMethodContext.facetHolder(); // search for @Property(maxLength=...) - addFacetIfPresent( - MaxLengthFacetForPropertyAnnotation - .create(propertyIfAny, holder)); + MaxLengthFacetForPropertyAnnotation + .create(propertyIfAny, holder); } void processMustSatisfy(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { var holder = processMethodContext.facetHolder(); // search for @Property(mustSatisfy=...) - addFacetIfPresent( - MustSatisfySpecificationFacetForPropertyAnnotation - .create(propertyIfAny, holder, getFactoryService())); + MustSatisfySpecificationFacetForPropertyAnnotation + .create(propertyIfAny, holder, getFactoryService()); } void processEntityPropertyChangePublishing(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { var holder = processMethodContext.facetHolder(); // search for @Property(entityPropertyChangePublishing=...) - addFacetIfPresent( - EntityPropertyChangePublishingPolicyFacetForPropertyAnnotation - .create(propertyIfAny, holder)); + EntityPropertyChangePublishingPolicyFacetForPropertyAnnotation + .create(propertyIfAny, holder); } void processSnapshot(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { var holder = processMethodContext.facetHolder(); // search for @Property(notPersisted=...) - addFacetIfPresent( - SnapshotExcludeFacetForPropertyAnnotation - .create(propertyIfAny, holder)); + SnapshotExcludeFacetForPropertyAnnotation + .create(propertyIfAny, holder); } void processOptional(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { @@ -279,14 +269,12 @@ void processOptional(final ProcessMethodContext processMethodContext, final Opti // check for @Nullable var hasNullable = method.isAnnotatedAsNullable(); - addFacetIfPresent( - MandatoryFacetInvertedByNullableAnnotationOnProperty - .create(hasNullable, method, holder)); + MandatoryFacetInvertedByNullableAnnotationOnProperty + .create(hasNullable, method, holder); // search for @Property(optional=...) - addFacetIfPresent( - MandatoryFacetForPropertyAnnotation - .create(propertyIfAny, method, holder)); + MandatoryFacetForPropertyAnnotation + .create(propertyIfAny, method, holder); } void processRegEx(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { @@ -295,25 +283,22 @@ void processRegEx(final ProcessMethodContext processMethodContext, final Optiona // check for @Pattern first var patternIfAny = processMethodContext.synthesizeOnMethod(Pattern.class); - if (addFacetIfPresent( - RegExFacetForPatternAnnotationOnProperty - .create(patternIfAny, returnType, holder)) + if (RegExFacetForPatternAnnotationOnProperty + .create(patternIfAny, returnType, holder) .isPresent()) return; // else search for @Property(pattern=...) - addFacetIfPresent( - RegExFacetForPropertyAnnotation - .create(propertyIfAny, returnType, holder)); + RegExFacetForPropertyAnnotation + .create(propertyIfAny, returnType, holder); } void processFileAccept(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { var holder = processMethodContext.facetHolder(); // check for @Property(maxLength=...) - addFacetIfPresent( - FileAcceptFacetForPropertyAnnotation - .create(propertyIfAny, holder)); + FileAcceptFacetForPropertyAnnotation + .create(propertyIfAny, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mandatory/jaxb/MandatoryFacetFromXmlElementAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mandatory/jaxb/MandatoryFacetFromXmlElementAnnotationFactory.java index 44e80970467..6ba3a1e1f2f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mandatory/jaxb/MandatoryFacetFromXmlElementAnnotationFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/mandatory/jaxb/MandatoryFacetFromXmlElementAnnotationFactory.java @@ -42,8 +42,7 @@ public void process(final ProcessMethodContext processMethodContext) { var facetHolder = processMethodContext.facetHolder(); // search for @XmlElement(required=...) - addFacetIfPresent( - MandatoryFacetFromXmlElementAnnotation.create(xmlElementIfAny, facetHolder)); + MandatoryFacetFromXmlElementAnnotation.create(xmlElementIfAny, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java index db934b94187..fe492c79c27 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java @@ -33,9 +33,8 @@ public static Optional create( final Class returnType, final FacetHolder holder) { - if (!returnType.equals(String.class)) { - return null; - } + if (!returnType.equals(String.class)) + return Optional.empty(); return patternIfAny .filter(pattern -> _Strings.emptyToNull(pattern.regexp()) != null) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java index 73a8d90c995..a1480e8f4a3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.PropertyLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class CssClassFacetForPropertyLayoutXml extends CssClassFacetSimple implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final String cssClass = _Strings.emptyToNull(propertyLayout.getCssClass()); return cssClass != null - ? Optional.of(new CssClassFacetForPropertyLayoutXml(cssClass, holder, precedence, qualifier)) + ? Optional.of(new CssClassFacetForPropertyLayoutXml(cssClass, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private CssClassFacetForPropertyLayoutXml( final String value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java index bb66ae48aea..20417d4b255 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/HiddenFacetForPropertyLayoutXml.java @@ -22,7 +22,6 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -30,9 +29,6 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class HiddenFacetForPropertyLayoutXml extends HiddenFacetAbstract implements QualifiedFacet { @@ -47,24 +43,17 @@ public static Optional create( final Where where = propertyLayout.getHidden(); return where != null && where != Where.NOT_SPECIFIED - ? Optional.of(new HiddenFacetForPropertyLayoutXml(where, holder, precedence, qualifier)) + ? Optional.of(new HiddenFacetForPropertyLayoutXml(where, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private HiddenFacetForPropertyLayoutXml( final Where where, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(where, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java index 65f17086ed1..b73089fb582 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.annotation.LabelPosition; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class LabelAtFacetForPropertyLayoutXml extends LabelAtFacetAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( return Optional.empty(); final LabelPosition labelPosition = propertyLayout.getLabelPosition(); return labelPosition != null - ? Optional.of(new LabelAtFacetForPropertyLayoutXml(labelPosition, holder, precedence, qualifier)) + ? Optional.of(new LabelAtFacetForPropertyLayoutXml(labelPosition, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private LabelAtFacetForPropertyLayoutXml( final LabelPosition value, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(value, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java index a102dd3bc73..b77e58b9665 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberDescribedFacetForPropertyLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.layout.component.PropertyLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberDescribedFacetForPropertyLayoutXml extends MemberDescribedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -45,23 +41,16 @@ public static Optional create( .map(PropertyLayoutData::getDescribedAs) .filter(_Strings::isNotEmpty) .map(describedAs-> - new MemberDescribedFacetForPropertyLayoutXml(describedAs, holder, precedence, qualifier)); + new MemberDescribedFacetForPropertyLayoutXml(describedAs, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberDescribedFacetForPropertyLayoutXml( final String described, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(described, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java index 1f2cbc6611d..2ef4dd2ace8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java @@ -22,7 +22,6 @@ import org.apache.causeway.applib.layout.component.PropertyLayoutData; import org.apache.causeway.commons.internal.base._Strings; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -45,22 +44,19 @@ public static Optional create( .map(PropertyLayoutData::getNamed) .filter(_Strings::isNotEmpty) .map(named-> - new MemberNamedFacetForPropertyLayoutXml(named, holder, precedence, qualifier)); + new MemberNamedFacetForPropertyLayoutXml(named, holder, qualifier) { + @Override public Precedence precedence() { return precedence; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) private final @Nullable String qualifier; private MemberNamedFacetForPropertyLayoutXml( final String named, final FacetHolder holder, - final Precedence precedence, final @Nullable String qualifier) { super(named, holder); - this.precedence = precedence; this.qualifier = qualifier; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java index 485ac399a30..9a0c9b6e4f4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MultiLineFacetForPropertyLayoutXml.java @@ -21,16 +21,12 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.multiline.MultiLineFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.multiline.MultiLineFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MultiLineFacetForPropertyLayoutXml extends MultiLineFacetAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( final Integer multiLine = propertyLayout.getMultiLine(); return multiLine != null && multiLine > 1 - ? Optional.of(new MultiLineFacetForPropertyLayoutXml(multiLine, holder, precedence, qualifier)) + ? Optional.of(new MultiLineFacetForPropertyLayoutXml(multiLine, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MultiLineFacetForPropertyLayoutXml( final int numberOfLines, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(numberOfLines, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java index 79fcaa550f5..98577db4aa7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java @@ -25,9 +25,9 @@ import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromPropertyLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromPropertyLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.object.navchild.NavigableSubtreeSequenceFacet; @@ -55,45 +55,43 @@ public void process(final ProcessMethodContext processMethodContext) { () -> ValidationFailureUtils .raiseAmbiguousMixinAnnotations(processMethodContext.facetHolder(), PropertyLayout.class)); - addFacetIfPresent(CssClassFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + CssClassFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(MemberDescribedFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + MemberDescribedFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(HiddenFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + HiddenFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(LabelAtFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + LabelAtFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(LayoutGroupFacetFromPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + LayoutGroupFacetFromPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(LayoutOrderFacetFromPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + LayoutOrderFacetFromPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(MultiLineFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + MultiLineFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(NamedFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + NamedFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent( - createPromptStyleFacetForPropertyLayoutAnnotation(propertyLayoutIfAny, getConfiguration(), facetHolder)); + createPromptStyleFacetForPropertyLayoutAnnotation(propertyLayoutIfAny, getConfiguration(), facetHolder); - addFacetIfPresent(TypicalLengthFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + TypicalLengthFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent(UnchangingFacetForPropertyLayoutAnnotation - .create(propertyLayoutIfAny, facetHolder)); + UnchangingFacetForPropertyLayoutAnnotation + .create(propertyLayoutIfAny, facetHolder); - addFacetIfPresent( - propertyLayoutIfAny - .map(PropertyLayout::navigableSubtree) - .filter(StringUtils::hasLength) - .flatMap(sequence->NavigableSubtreeSequenceFacet.create("PropertyLayout annotation", - processMethodContext.cls(), processMethodContext.methodFacade().asMethod(), sequence, facetHolder))); + propertyLayoutIfAny + .map(PropertyLayout::navigableSubtree) + .filter(StringUtils::hasLength) + .flatMap(sequence->NavigableSubtreeSequenceFacet.create("PropertyLayout annotation", + processMethodContext.cls(), processMethodContext.methodFacade().asMethod(), sequence, facetHolder)); } // -- HELPER diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java index 1af5bf3cd41..6b5b4833ae0 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutXml.java @@ -21,16 +21,12 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class RenderedAdjustedFacetForPropertyLayoutXml extends DateRenderAdjustFacetAbstract implements QualifiedFacet { @@ -44,24 +40,17 @@ public static Optional create( return Optional.empty(); final int adjustByDays = propertyLayout.getDateRenderAdjustDays(); return adjustByDays != 0 - ? Optional.of(new RenderedAdjustedFacetForPropertyLayoutXml(adjustByDays, holder, precedence, qualifier)) + ? Optional.of(new RenderedAdjustedFacetForPropertyLayoutXml(adjustByDays, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private RenderedAdjustedFacetForPropertyLayoutXml( final int adjustByDays, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(adjustByDays, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java index 5a4ba6529e1..1d52492fc78 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutXml.java @@ -21,16 +21,12 @@ import java.util.Optional; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class TypicalLengthFacetForPropertyLayoutXml extends TypicalLengthFacetAbstract implements QualifiedFacet { @@ -45,24 +41,17 @@ public static Optional create( final Integer typicalLength = propertyLayout.getTypicalLength(); return typicalLength != null && typicalLength != -1 - ? Optional.of(new TypicalLengthFacetForPropertyLayoutXml(typicalLength, holder, precedence, qualifier)) + ? Optional.of(new TypicalLengthFacetForPropertyLayoutXml(typicalLength, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private TypicalLengthFacetForPropertyLayoutXml( final int typicalLength, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(typicalLength, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java index f7dfcd22786..05994445a8b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java @@ -22,16 +22,12 @@ import org.apache.causeway.applib.annotation.Repainting; import org.apache.causeway.applib.layout.component.PropertyLayoutData; -import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.QualifiedFacet; import org.apache.causeway.core.metamodel.facets.properties.renderunchanged.UnchangingFacet; import org.apache.causeway.core.metamodel.facets.properties.renderunchanged.UnchangingFacetAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class UnchangingFacetForPropertyLayoutXml extends UnchangingFacetAbstract implements QualifiedFacet { @@ -48,23 +44,16 @@ public static Optional create( || repainting == Repainting.NOT_SPECIFIED) return Optional.empty(); return Optional.of( - new UnchangingFacetForPropertyLayoutXml(repainting == Repainting.NO_REPAINT, holder, precedence, qualifier)); + new UnchangingFacetForPropertyLayoutXml(repainting == Repainting.NO_REPAINT, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } + }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final Facet.Precedence precedence; - - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private UnchangingFacetForPropertyLayoutXml( final boolean unchanging, - final FacetHolder holder, - final Precedence precedence, - final @Nullable String qualifier) { + final FacetHolder holder) { super(unchanging, holder); - this.precedence = precedence; - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/typicallen/fromtype/TypicalLengthFacetOnPropertyFromType.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/typicallen/fromtype/TypicalLengthFacetOnPropertyFromType.java index 83b98380ff1..4cf187ac88b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/typicallen/fromtype/TypicalLengthFacetOnPropertyFromType.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/typicallen/fromtype/TypicalLengthFacetOnPropertyFromType.java @@ -21,7 +21,7 @@ import java.util.function.BiConsumer; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.multiline.MultiLineFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacetAbstract; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java index 11495de7c24..b256e10db79 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java @@ -68,12 +68,12 @@ public void process(final ProcessMethodContext processMethodContext) { setterMethods .forEach(setterMethod->{ - addFacet(new PropertySetterFacetViaSetterMethod(setterMethod, property)); - addFacet(new PropertyInitializationFacetViaSetterMethod(setterMethod, property)); + new PropertySetterFacetViaSetterMethod(setterMethod, property); + new PropertyInitializationFacetViaSetterMethod(setterMethod, property); }); } else { - addFacet(new SnapshotExcludeFacetFromImmutableMember(property)); + new SnapshotExcludeFacetFromImmutableMember(property); // previously we also added the DisabledFacetAlwaysEverywhere facet here. // however, the PropertyModifyFacetFactory (which comes next) might install a PropertySetterFacet instead. diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java index fafb4d0db28..da8f7784977 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/dflt/PropertyValidateFacetDefaultFactory.java @@ -47,15 +47,13 @@ public PropertyValidateFacetDefaultFactory(final MetaModelContext mmc) { @Override public void process(final ProcessMethodContext processMethodContext) { var facetHolder = processMethodContext.facetHolder(); - addFacet( - new PropertyValidateFacetDefault(facetHolder)); + new PropertyValidateFacetDefault(facetHolder); } @Override public void processParams(final ProcessParameterContext processParameterContext) { var facetHolder = processParameterContext.facetHolder(); - addFacet( - new PropertyValidateFacetDefault(facetHolder)); + new PropertyValidateFacetDefault(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java index 7fd2ce2dab8..53ca649c3fa 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java @@ -43,14 +43,11 @@ protected void search( var argType = getterMethod.getReturnType(); methodFinder - .streamMethodsMatchingSignature(new Class[] { argType }) - .peek(processMethodContext::removeMethod) - .forEach(validateMethod->{ - addFacet( - new PropertyValidateFacetViaMethod( - validateMethod, processMethodContext.facetHolder())); - }); - + .streamMethodsMatchingSignature(new Class[] { argType }) + .peek(processMethodContext::removeMethod) + .forEach(validateMethod-> + new PropertyValidateFacetViaMethod( + validateMethod, processMethodContext.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJakartaDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJakartaDigitsAnnotation.java index 013ed0af48c..e5f194d9517 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJakartaDigitsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromJakartaDigitsAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.validation.constraints.Digits; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; -record MaxFractionalDigitsFacetFromJakartaDigitsAnnotation( - int maxFractionalDigits, - FacetHolder facetHolder) +import jakarta.validation.constraints.Digits; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxFractionalDigitsFacetFromJakartaDigitsAnnotation +extends FacetAbstract implements MaxFractionalDigitsFacet { static Optional create( @@ -38,7 +39,14 @@ static Optional create( .map(digits-> new MaxFractionalDigitsFacetFromJakartaDigitsAnnotation(digits.fraction(), holder)); } - @Override public Class facetType() { return MaxFractionalDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxFractionalDigits; + + private MaxFractionalDigitsFacetFromJakartaDigitsAnnotation( + final int maxFractionalDigits, + final FacetHolder facetHolder) { + super(MaxFractionalDigitsFacet.class, facetHolder); + this.maxFractionalDigits = maxFractionalDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java index 20a2455f494..32e30c732f7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxFractionalDigitsFacetFromValueSemanticsAnnotation.java @@ -21,13 +21,15 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; -record MaxFractionalDigitsFacetFromValueSemanticsAnnotation( - int maxFractionalDigits, - FacetHolder facetHolder) +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxFractionalDigitsFacetFromValueSemanticsAnnotation +extends FacetAbstract implements MaxFractionalDigitsFacet { static Optional create( @@ -39,7 +41,14 @@ static Optional create( digits.maxFractionalDigits(), holder)); } - @Override public Class facetType() { return MaxFractionalDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxFractionalDigits; + + private MaxFractionalDigitsFacetFromValueSemanticsAnnotation( + final int maxFractionalDigits, + final FacetHolder facetHolder) { + super(MaxFractionalDigitsFacet.class, facetHolder); + this.maxFractionalDigits = maxFractionalDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromJakartaDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromJakartaDigitsAnnotation.java index 7d8c7692ad7..d607f03f69e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromJakartaDigitsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromJakartaDigitsAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.validation.constraints.Digits; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxIntegerDigitsFacet; -record MaxIntegerDigitsFacetFromJakartaDigitsAnnotation( - int maxIntegerDigits, - FacetHolder facetHolder) +import jakarta.validation.constraints.Digits; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxIntegerDigitsFacetFromJakartaDigitsAnnotation +extends FacetAbstract implements MaxIntegerDigitsFacet { public static Optional create( @@ -40,7 +41,14 @@ public static Optional create( new MaxIntegerDigitsFacetFromJakartaDigitsAnnotation(digits.integer(), holder)); } - @Override public Class facetType() { return MaxIntegerDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxIntegerDigits; + + private MaxIntegerDigitsFacetFromJakartaDigitsAnnotation( + final int maxIntegerDigits, + final FacetHolder facetHolder) { + super(MaxIntegerDigitsFacet.class, facetHolder); + this.maxIntegerDigits = maxIntegerDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromValueSemanticsAnnotation.java index a40cda86f2b..1d13c879cc3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromValueSemanticsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxIntegerDigitsFacetFromValueSemanticsAnnotation.java @@ -21,13 +21,15 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxIntegerDigitsFacet; -record MaxIntegerDigitsFacetFromValueSemanticsAnnotation( - int maxIntegerDigits, - FacetHolder facetHolder) +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxIntegerDigitsFacetFromValueSemanticsAnnotation +extends FacetAbstract implements MaxIntegerDigitsFacet { public static Optional create( @@ -39,7 +41,14 @@ public static Optional create( new MaxIntegerDigitsFacetFromValueSemanticsAnnotation(valueSemantics.maxIntegerDigits(), holder)); } - @Override public Class facetType() { return MaxIntegerDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxIntegerDigits; + + private MaxIntegerDigitsFacetFromValueSemanticsAnnotation( + final int maxIntegerDigits, + final FacetHolder facetHolder) { + super(MaxIntegerDigitsFacet.class, facetHolder); + this.maxIntegerDigits = maxIntegerDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java index 2d8614843d4..31a6b2de6d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MaxTotalDigitsFacetFromValueSemanticsAnnotation.java @@ -21,13 +21,15 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet; -record MaxTotalDigitsFacetFromValueSemanticsAnnotation( - int maxTotalDigits, - FacetHolder facetHolder) +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxTotalDigitsFacetFromValueSemanticsAnnotation +extends FacetAbstract implements MaxTotalDigitsFacet { static Optional create( @@ -39,7 +41,14 @@ static Optional create( new MaxTotalDigitsFacetFromValueSemanticsAnnotation(valueSemantics.maxTotalDigits(), holder)); } - @Override public Class facetType() { return MaxTotalDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxTotalDigits; + + private MaxTotalDigitsFacetFromValueSemanticsAnnotation( + final int maxTotalDigits, + final FacetHolder facetHolder) { + super(MaxTotalDigitsFacet.class, facetHolder); + this.maxTotalDigits = maxTotalDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJakartaDigitsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJakartaDigitsAnnotation.java index aa0d2ec6552..49e46a439e9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJakartaDigitsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromJakartaDigitsAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.validation.constraints.Digits; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet; -record MinFractionalDigitsFacetFromJakartaDigitsAnnotation( - int minFractionalDigits, - FacetHolder facetHolder) +import jakarta.validation.constraints.Digits; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MinFractionalDigitsFacetFromJakartaDigitsAnnotation +extends FacetAbstract implements MinFractionalDigitsFacet { static Optional create( @@ -38,7 +39,14 @@ static Optional create( .map(digits-> new MinFractionalDigitsFacetFromJakartaDigitsAnnotation(digits.fraction(), holder)); } - @Override public Class facetType() { return MinFractionalDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int minFractionalDigits; + + private MinFractionalDigitsFacetFromJakartaDigitsAnnotation( + final int minFractionalDigits, + final FacetHolder facetHolder) { + super(MinFractionalDigitsFacet.class, facetHolder); + this.minFractionalDigits = minFractionalDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java index db585ea03ec..99390f2b0af 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinFractionalDigitsFacetFromValueSemanticsAnnotation.java @@ -21,13 +21,15 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet; -record MinFractionalDigitsFacetFromValueSemanticsAnnotation( - int minFractionalDigits, - FacetHolder facetHolder) +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MinFractionalDigitsFacetFromValueSemanticsAnnotation +extends FacetAbstract implements MinFractionalDigitsFacet { static Optional create( @@ -39,7 +41,14 @@ static Optional create( valueSemantics.minFractionalDigits(), holder)); } - @Override public Class facetType() { return MinFractionalDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int minFractionalDigits; + + private MinFractionalDigitsFacetFromValueSemanticsAnnotation( + final int minFractionalDigits, + final FacetHolder facetHolder) { + super(MinFractionalDigitsFacet.class, facetHolder); + this.minFractionalDigits = minFractionalDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java index 5f44305e846..53575f667a0 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/MinIntegerDigitsFacetFromValueSemanticsAnnotation.java @@ -21,25 +21,34 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinIntegerDigitsFacet; -record MinIntegerDigitsFacetFromValueSemanticsAnnotation( - int minIntegerDigits, - FacetHolder facetHolder) +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MinIntegerDigitsFacetFromValueSemanticsAnnotation +extends FacetAbstract implements MinIntegerDigitsFacet { - public static Optional create( - final Optional valueSemanticsOpt, - final FacetHolder holder) { - return valueSemanticsOpt - .filter(valueSemantics->valueSemantics.minIntegerDigits()>1) - .map(valueSemantics-> - new MinIntegerDigitsFacetFromValueSemanticsAnnotation(valueSemantics.minIntegerDigits(), holder)); - } - - @Override public Class facetType() { return MinIntegerDigitsFacet.class; } - @Override public Precedence precedence() { return Precedence.DEFAULT; } + static Optional create( + final Optional valueSemanticsOpt, + final FacetHolder holder) { + return valueSemanticsOpt + .filter(valueSemantics->valueSemantics.minIntegerDigits()>1) + .map(valueSemantics-> + new MinIntegerDigitsFacetFromValueSemanticsAnnotation(valueSemantics.minIntegerDigits(), holder)); + } + + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int minIntegerDigits; + + private MinIntegerDigitsFacetFromValueSemanticsAnnotation( + final int minIntegerDigits, + final FacetHolder facetHolder) { + super(MinIntegerDigitsFacet.class, facetHolder); + this.minIntegerDigits = minIntegerDigits; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java index 9f8294bbf05..cd578d79518 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java @@ -24,8 +24,8 @@ import org.apache.causeway.core.metamodel.commons.ClassUtil; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facetapi.TypedFacetHolder; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.TypedFacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxIntegerDigitsFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet; @@ -85,9 +85,8 @@ private void processProvider( final Optional valueSemanticsOpt) { // check for @ValueSemantics(provider=...) - addFacetIfPresent( - ValueSemanticsSelectingFacetForAnnotation - .create(valueSemanticsOpt, facetHolder)); + ValueSemanticsSelectingFacetForAnnotation + .create(valueSemanticsOpt, facetHolder); } private void processDigits( @@ -96,71 +95,65 @@ private void processDigits( final Optional digitsOpt){ // max total digits - addFacetIfPresent( - MaxTotalDigitsFacetFromValueSemanticsAnnotation - .create(valueSemanticsOpt, facetHolder)); + MaxTotalDigitsFacetFromValueSemanticsAnnotation + .create(valueSemanticsOpt, facetHolder); // max integer digits - addFacetIfPresent( - MaxIntegerDigitsFacet.strongestConstraint( - MaxIntegerDigitsFacetFromValueSemanticsAnnotation - .create(valueSemanticsOpt, facetHolder), - // support for @jakarta.validation.constraints.Digits - MaxIntegerDigitsFacetFromJakartaDigitsAnnotation - .create(digitsOpt, facetHolder))); + MaxIntegerDigitsFacet.strongestConstraint( + facetHolder, + fh->MaxIntegerDigitsFacetFromValueSemanticsAnnotation + .create(valueSemanticsOpt, fh), + // support for @jakarta.validation.constraints.Digits + fh->MaxIntegerDigitsFacetFromJakartaDigitsAnnotation + .create(digitsOpt, fh)); // min integer digits - addFacetIfPresent( - MinIntegerDigitsFacetFromValueSemanticsAnnotation - .create(valueSemanticsOpt, facetHolder)); + MinIntegerDigitsFacetFromValueSemanticsAnnotation + .create(valueSemanticsOpt, facetHolder); if(ClassUtil.isJavaBuiltInInteger(facetHolder.getFeatureIdentifier().logicalType().correspondingClass())) return; // skip fractional facets // max fractional digits - addFacetIfPresent( - MaxFractionalDigitsFacet.strongestConstraint( - MaxFractionalDigitsFacetFromValueSemanticsAnnotation - .create(valueSemanticsOpt, facetHolder), - // support for @jakarta.validation.constraints.Digits - MaxFractionalDigitsFacetFromJakartaDigitsAnnotation - .create(digitsOpt, facetHolder))); + MaxFractionalDigitsFacet.strongestConstraint( + facetHolder, + fh->MaxFractionalDigitsFacetFromValueSemanticsAnnotation + .create(valueSemanticsOpt, fh), + // support for @jakarta.validation.constraints.Digits + fh->MaxFractionalDigitsFacetFromJakartaDigitsAnnotation + .create(digitsOpt, fh)); // min fractional digits - addFacetIfPresent( - MinFractionalDigitsFacet.strongestConstraint( - MinFractionalDigitsFacetFromValueSemanticsAnnotation - .create(valueSemanticsOpt, facetHolder), - // support for @jakarta.validation.constraints.Digits (if enabled) - getConfiguration().valueTypes().bigDecimal().useScaleForMinFractionalFacet() - ? MinFractionalDigitsFacetFromJakartaDigitsAnnotation - .create(digitsOpt, facetHolder) - : Optional.empty())); + MinFractionalDigitsFacet.strongestConstraint( + facetHolder, + fh->MinFractionalDigitsFacetFromValueSemanticsAnnotation + .create(valueSemanticsOpt, fh), + // support for @jakarta.validation.constraints.Digits (if enabled) + fh->getConfiguration().valueTypes().bigDecimal().useScaleForMinFractionalFacet() + ? MinFractionalDigitsFacetFromJakartaDigitsAnnotation + .create(digitsOpt, fh) + : Optional.empty()); } private void processTemporalFormat( final TypedFacetHolder facetHolder, final Optional valueSemanticsIfAny){ - addFacetIfPresent( - DateFormatStyleFacetFromValueSemanticsAnnotation - .create(valueSemanticsIfAny, facetHolder)); - addFacetIfPresent( - TimeFormatStyleFacetFromValueSemanticsAnnotation - .create(valueSemanticsIfAny, facetHolder)); + DateFormatStyleFacetFromValueSemanticsAnnotation + .create(valueSemanticsIfAny, facetHolder); - addFacetIfPresent( - TimeFormatPrecisionFacetFromValueSemanticsAnnotation - .create(valueSemanticsIfAny, facetHolder)); + TimeFormatStyleFacetFromValueSemanticsAnnotation + .create(valueSemanticsIfAny, facetHolder); - addFacetIfPresent( - DateRenderAdjustFacetFromValueSemanticsAnnotation - .create(valueSemanticsIfAny, facetHolder)); + TimeFormatPrecisionFacetFromValueSemanticsAnnotation + .create(valueSemanticsIfAny, facetHolder); - addFacetIfPresent( - TimeZoneTranslationFacetFromValueSemanticsAnnotation - .create(valueSemanticsIfAny, facetHolder)); + DateRenderAdjustFacetFromValueSemanticsAnnotation + .create(valueSemanticsIfAny, facetHolder); + + TimeZoneTranslationFacetFromValueSemanticsAnnotation + .create(valueSemanticsIfAny, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/DeweyOrderSet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/DeweyOrderSet.java index 8a6f842fb89..ec434e3bde1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/DeweyOrderSet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/DeweyOrderSet.java @@ -32,7 +32,7 @@ import org.apache.causeway.commons.internal.collections._Sets; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet; import org.apache.causeway.core.metamodel.object.MmSortUtils; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSortUtils.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSortUtils.java index 84750454f7a..7f6e911a6f5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSortUtils.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSortUtils.java @@ -30,7 +30,7 @@ import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet; import org.apache.causeway.core.metamodel.layout.DeweyOrderSet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/MetaModelPostProcessorAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/MetaModelPostProcessorAbstract.java index 7cc576c35bb..984a5f25f13 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/MetaModelPostProcessorAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/MetaModelPostProcessorAbstract.java @@ -22,7 +22,7 @@ import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.HasFacetedMethod; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectMember; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java index 56218032882..fbecc4473f7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java @@ -18,10 +18,7 @@ */ package org.apache.causeway.core.metamodel.postprocessors.all; -import jakarta.inject.Inject; - import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegex; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet; @@ -30,6 +27,8 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import jakarta.inject.Inject; + public class CssOnActionFromConfiguredRegexPostProcessor extends MetaModelPostProcessorAbstract { @@ -41,20 +40,17 @@ public CssOnActionFromConfiguredRegexPostProcessor(final MetaModelContext mmc) { @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction objectAction) { - if(objectAction.isDeclaredOnMixin()) { - return; // don't process mixin main method, instead process its peer - } + if(objectAction.isDeclaredOnMixin()) + return; // don't process mixin main method, instead process its peer if(!objectAction.containsNonFallbackFacet(FaFacet.class)) { - FacetUtil.addFacetIfPresent( - FaFacetOnMemberFromConfiguredRegex - .create(objectSpecification, objectAction)); + FaFacetOnMemberFromConfiguredRegex + .create(objectSpecification, objectAction); } if(!objectAction.containsNonFallbackFacet(CssClassFacet.class)) { - FacetUtil.addFacetIfPresent( - CssClassFacetOnActionFromConfiguredRegex - .create(objectAction.getId(), objectAction)); + CssClassFacetOnActionFromConfiguredRegex + .create(objectAction.getId(), objectAction); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java index 17569c0c553..efefccc8299 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/DescribedAsFromTypePostProcessor.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.postprocessors.all; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.ParamDescribedFacet; @@ -71,9 +70,8 @@ private void handleMember(final ObjectMember member) { member.getElementType() .lookupNonFallbackFacet(ObjectDescribedFacet.class) .ifPresent(objectDescribedFacet -> - FacetUtil.addFacetIfPresent( - MemberDescribedFacetFromType - .create(objectDescribedFacet, facetedMethodFor(member)))); + MemberDescribedFacetFromType + .create(objectDescribedFacet, facetedMethodFor(member))); } private void handleParam(final ObjectActionParameter parameter) { @@ -82,9 +80,8 @@ private void handleParam(final ObjectActionParameter parameter) { parameter.getElementType() .lookupNonFallbackFacet(ObjectDescribedFacet.class) .ifPresent(objectDescribedFacet-> - FacetUtil.addFacetIfPresent( - ParamDescribedFacetFromType - .create(objectDescribedFacet, parameter.facetHolder()))); + ParamDescribedFacetFromType + .create(objectDescribedFacet, parameter.facetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/MixinSanityChecksValidator.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/MixinSanityChecksValidator.java index a9316fabeab..bdd6be592b4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/MixinSanityChecksValidator.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/MixinSanityChecksValidator.java @@ -25,7 +25,7 @@ import org.apache.causeway.applib.services.metamodel.BeanSort; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet.Contributing; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java index d916cd8bc6b..e170e563eb5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java @@ -18,18 +18,16 @@ */ package org.apache.causeway.core.metamodel.postprocessors.all.i18n; -import jakarta.inject.Inject; - -import org.springframework.util.StringUtils; - import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.all.i8n.noun.Noun; import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacetSynthesized; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.springframework.util.StringUtils; + +import jakarta.inject.Inject; public class SynthesizeObjectNamingPostProcessor extends MetaModelPostProcessorAbstract { @@ -44,25 +42,25 @@ public void postProcessObject(final ObjectSpecification objectSpecification) { final boolean canProcess = objectSpecification.isEntityOrViewModelOrAbstract() || objectSpecification.isInjectable(); - if(!canProcess) return; + if(!canProcess) + return; var topRank = objectSpecification - .getFacetRanking(ObjectNamedFacet.class) // don't use lookupFacet, as that would search up the - // inheritance hierarchy (which we don't want here) - .map(facetRanking->facetRanking.getTopRank(ObjectNamedFacet.class)) - .orElse(Can.empty()) - .reverse(); // historically last have higher precedence, so when reverted we can use findFirst logic + .lookupFacetRanking(ObjectNamedFacet.class) // don't use lookupFacet, as that would search up the + // inheritance hierarchy (which we don't want here) + .map(facetRanking->facetRanking.getTopRank(ObjectNamedFacet.class)) + .orElse(Can.empty()) + .reverse(); // historically last have higher precedence, so when reverted we can use findFirst logic var singular = topRank - .stream() - .filter(objectNamedFacet->objectNamedFacet.isNounPresent()) - .findFirst() - .map(ObjectNamedFacet::singular) - .filter(StringUtils::hasText) - .orElseGet(()->getSingularFallbackNoun(objectSpecification)); + .stream() + .filter(ObjectNamedFacet::isNounPresent) + .findFirst() + .map(ObjectNamedFacet::singular) + .filter(StringUtils::hasText) + .orElseGet(()->getSingularFallbackNoun(objectSpecification)); - FacetUtil.addFacet( - new ObjectNamedFacetSynthesized(new Noun(singular), objectSpecification)); + new ObjectNamedFacetSynthesized(new Noun(singular), objectSpecification); } // -- HELEPR diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java index 389dcb4495b..f52e04ec7f3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationPostProcessor.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization; -import jakarta.inject.Inject; - import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; @@ -28,6 +26,8 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import jakarta.inject.Inject; + public class AuthorizationPostProcessor extends MetaModelPostProcessorAbstract { @@ -38,26 +38,26 @@ public AuthorizationPostProcessor(final MetaModelContext metaModelContext) { @Override public void postProcessObject(final ObjectSpecification objectSpecification) { - addFacet(objectSpecification); + createFacet(objectSpecification); } @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction act) { - addFacet(act); + createFacet(act); } @Override public void postProcessProperty(final ObjectSpecification objectSpecification, final OneToOneAssociation prop) { - addFacet(prop); + createFacet(prop); } @Override public void postProcessCollection(final ObjectSpecification objectSpecification, final OneToManyAssociation coll) { - addFacet(coll); + createFacet(coll); } - private static void addFacet(final FacetHolder facetHolder) { - facetHolder.addFacet(new AuthorizationFacetImpl(facetHolder)); + private static void createFacet(final FacetHolder facetHolder) { + new AuthorizationFacetImpl(facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/SynthesizeDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/SynthesizeDomainEventsForMixinPostProcessor.java index 54dcd7e20e5..674ad01fa6e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/SynthesizeDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/SynthesizeDomainEventsForMixinPostProcessor.java @@ -96,7 +96,6 @@ private void initActionWithMixee( ActionDomainEventFacet .createObjectTypeSpecificForMixin(objectSpecification, objectAction.facetHolder()) .ifPresent(mixeeSpecificActionDomainEventFacet -> { - objectAction.addFacet(mixeeSpecificActionDomainEventFacet); installMixeeSpecificActionInvocationFacet(objectAction, mixeeSpecificActionDomainEventFacet); }); } @@ -107,12 +106,12 @@ private void installMixeeSpecificActionInvocationFacet( var actionInvocationFacet = objectAction.lookupFacet(ActionInvocationFacet.class).orElse(null); if (!(actionInvocationFacet instanceof ActionInvocationFacetForAction actionInvocationFacetForAction)) return; - objectAction.addFacet(ActionInvocationFacetForAction.createObjectTypeSpecific( + ActionInvocationFacetForAction.createObjectTypeSpecific( mixeeSpecificActionDomainEventFacet, actionInvocationFacetForAction.getMethods().getFirstElseFail(), actionInvocationFacetForAction.getDeclaringType(), actionInvocationFacetForAction.getReturnType(), - objectAction.facetHolder())); + objectAction.facetHolder()); } private void initPropertyWithMixee( @@ -122,8 +121,7 @@ private void initPropertyWithMixee( if (!propertyDomainEventFacet.getEventTypeOrigin().isDefault()) return; // skip if already set explicitly on the property or mixin type PropertyDomainEventFacet - .createObjectTypeSpecificForMixin(objectSpecification, property.facetHolder()) - .ifPresent(property::addFacet); + .createObjectTypeSpecificForMixin(objectSpecification, property.facetHolder()); } private void initCollectionWithMixee( @@ -133,8 +131,7 @@ private void initCollectionWithMixee( if (!collectionDomainEventFacet.getEventTypeOrigin().isDefault()) return; // skip if already set explicitly on the collection or mixin type CollectionDomainEventFacet - .createObjectTypeSpecificForMixin(objectSpecification, collection.facetHolder()) - .ifPresent(collection::addFacet); + .createObjectTypeSpecificForMixin(objectSpecification, collection.facetHolder()); } private void reportMissing(final ObjectAction act) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java index 66bcc7ed094..b43d0616c2d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/navigation/NavigationFacetFromHiddenTypePostProcessor.java @@ -18,11 +18,8 @@ */ package org.apache.causeway.core.metamodel.postprocessors.members.navigation; -import jakarta.inject.Inject; - import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -31,6 +28,8 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import jakarta.inject.Inject; + /** * Installs the {@link NavigationFacetFromHiddenType} on all of the * {@link ObjectMember}s of the {@link ObjectSpecification}. @@ -61,7 +60,8 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, private static void addFacetIfRequired(final FacetHolder facetHolder, final ObjectSpecification navigatedType) { if(navigatedType.containsNonFallbackFacet(HiddenTypeFacet.class)) { - FacetUtil.addFacetIfPresent(NavigationFacetFromHiddenType.create(navigatedType, facetHolder)); + NavigationFacetFromHiddenType + .create(navigatedType, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/object/ProjectionFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/object/ProjectionFacetsPostProcessor.java index 560dd9543f8..368fc37a3b6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/object/ProjectionFacetsPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/object/ProjectionFacetsPostProcessor.java @@ -18,13 +18,8 @@ */ package org.apache.causeway.core.metamodel.postprocessors.object; -import jakarta.inject.Inject; - -import org.jspecify.annotations.Nullable; - import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.facets.object.projection.ProjectionFacetFromProjectingProperty; @@ -34,6 +29,9 @@ import org.apache.causeway.core.metamodel.facets.object.title.TitleFacet; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.jspecify.annotations.Nullable; + +import jakarta.inject.Inject; public class ProjectionFacetsPostProcessor extends MetaModelPostProcessorAbstract { @@ -45,26 +43,22 @@ public ProjectionFacetsPostProcessor(final MetaModelContext metaModelContext) { @Override public void postProcessObject(final ObjectSpecification objectSpecification) { + ProjectionFacetFromProjectingProperty.create(objectSpecification) + .ifPresent(projectionFacet->{ - FacetUtil.addFacetIfPresent( - ProjectionFacetFromProjectingProperty.create(objectSpecification)) - .ifPresent(projectionFacet->{ - - var titleFacet = objectSpecification.lookupFacet(TitleFacet.class).orElse(null); - if(canOverwrite(titleFacet)) { - FacetUtil.addFacet(new TitleFacetFromProjectionFacet(projectionFacet, objectSpecification)); - } - var iconFacet = objectSpecification.lookupFacet(IconFacet.class).orElse(null); - if(canOverwrite(iconFacet)) { - FacetUtil.addFacet(new IconFacetFromProjectionFacet(projectionFacet, objectSpecification)); - } - var cssClassFacet = objectSpecification.lookupFacet(CssClassFacet.class).orElse(null); - if(canOverwrite(cssClassFacet)) { - FacetUtil.addFacet(new CssClassFacetFromProjectionFacet(projectionFacet, objectSpecification)); - } - - }); - + var titleFacet = objectSpecification.lookupFacet(TitleFacet.class).orElse(null); + if(canOverwrite(titleFacet)) { + new TitleFacetFromProjectionFacet(projectionFacet, objectSpecification); + } + var iconFacet = objectSpecification.lookupFacet(IconFacet.class).orElse(null); + if(canOverwrite(iconFacet)) { + new IconFacetFromProjectionFacet(projectionFacet, objectSpecification); + } + var cssClassFacet = objectSpecification.lookupFacet(CssClassFacet.class).orElse(null); + if(canOverwrite(cssClassFacet)) { + new CssClassFacetFromProjectionFacet(projectionFacet, objectSpecification); + } + }); } // -- HELPER diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java index c2579462208..53e877c51ab 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java @@ -23,7 +23,6 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.commons.MetaModelVisitor; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.object.defaults.DefaultedFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet; @@ -79,35 +78,27 @@ public void postProcessParameter( return; if(!hasChoicesOrAutoComplete(param)) { - - if(FacetUtil - .addFacetIfPresent( - ActionParameterChoicesFacetFromAction - .create(objectAction, objectSpecification, param)) - .isPresent()) + if(ActionParameterChoicesFacetFromAction + .create(objectAction, objectSpecification, param) + .isPresent()) /* ActionParameterChoicesFacetFromAction has precedence over * ActionParameterChoicesFacetFromElementType, so stop processing here. * (also skips validation below) */ return; - if(FacetUtil - .addFacetIfPresent( - ActionParameterChoicesFacetFromElementType - .create(param)) + if(ActionParameterChoicesFacetFromElementType + .create(param) .isPresent()) /* ActionParameterChoicesFacetFromElementType has precedence over * ActionParameterAutoCompleteFacetFromElementType, so stop processing here. * (also skips validation below) */ return; - if(FacetUtil - .addFacetIfPresent( - ActionParameterAutoCompleteFacetFromElementType - .create(param)) + if(ActionParameterAutoCompleteFacetFromElementType + .create(param) .isPresent()) /* skips validation below */ return; - } if(MetaModelVisitor.SKIP_ABSTRACT.test(objectSpecification)) { @@ -125,17 +116,16 @@ public void postProcessProperty( if(!hasMemberLevelDefaults(prop)) { prop.getElementType() .lookupNonFallbackFacet(DefaultedFacet.class) - .ifPresent(specFacet -> FacetUtil.addFacet(new PropertyDefaultFacetFromDefaultedFacet( - specFacet, facetedMethodFor(prop)))); + .ifPresent(specFacet -> new PropertyDefaultFacetFromDefaultedFacet( + specFacet, facetedMethodFor(prop))); } if(!hasChoicesOrAutoComplete(prop)) { var choicesFacetIfAny = prop.getElementType() .lookupNonFallbackFacet(ChoicesFacet.class); - FacetUtil.addFacetIfPresent( - PropertyChoicesFacetFromChoicesFacet - .create(choicesFacetIfAny, facetedMethodFor(prop))); + PropertyChoicesFacetFromChoicesFacet + .create(choicesFacetIfAny, facetedMethodFor(prop)); } } @@ -209,9 +199,8 @@ private static boolean hasChoicesOrAutoComplete(final OneToOneAssociation prop) private static void addCollectionParamDefaultsFacetIfNoneAlready( final ObjectActionParameter collectionParam) { if(!hasMemberLevelDefaults(collectionParam)) { - FacetUtil.addFacet( - ActionParameterDefaultsFacetFromAssociatedCollection - .create(collectionParam)); + ActionParameterDefaultsFacetFromAssociatedCollection + .create(collectionParam); } } @@ -219,8 +208,7 @@ private static void addCollectionParamChoicesFacetIfNoneAlready( final OneToManyAssociation coll, final ObjectActionParameter param) { if(!hasChoicesOrAutoComplete(param)) { - FacetUtil.addFacet( - new ActionParameterChoicesFacetFromParentedCollection(param, coll)); + new ActionParameterChoicesFacetFromParentedCollection(param, coll); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java index b2ff422159b..ca4f2b9893d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/param/TypicalLengthFromTypePostProcessor.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.postprocessors.param; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet; import org.apache.causeway.core.metamodel.facets.param.typicallen.fromtype.TypicalLengthFacetOnParameterFromType; import org.apache.causeway.core.metamodel.facets.properties.typicallen.fromtype.TypicalLengthFacetOnPropertyFromType; @@ -50,9 +49,8 @@ public void postProcessParameter( .getElementType() .lookupNonFallbackFacet(TypicalLengthFacet.class) .ifPresent(typicalLengthFacet -> - FacetUtil.addFacet( - TypicalLengthFacetOnParameterFromType - .createWhilePostprocessing(typicalLengthFacet, parameter.facetHolder()))); + TypicalLengthFacetOnParameterFromType + .createWhilePostprocessing(typicalLengthFacet, parameter.facetHolder())); } @Override @@ -65,10 +63,8 @@ public void postProcessProperty( .getElementType() .lookupNonFallbackFacet(TypicalLengthFacet.class) .ifPresent(typicalLengthFacet -> - FacetUtil.addFacet( - TypicalLengthFacetOnPropertyFromType - .createWhilePostprocessing(typicalLengthFacet, facetedMethodFor(property)))); - + TypicalLengthFacetOnPropertyFromType + .createWhilePostprocessing(typicalLengthFacet, facetedMethodFor(property))); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/properties/DisabledFromImmutablePostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/properties/DisabledFromImmutablePostProcessor.java index 3e81c24e094..f61098b6f5c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/properties/DisabledFromImmutablePostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/properties/DisabledFromImmutablePostProcessor.java @@ -18,10 +18,7 @@ */ package org.apache.causeway.core.metamodel.postprocessors.properties; -import jakarta.inject.Inject; - import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.object.domainobject.editing.ImmutableFacetFromConfiguration; import org.apache.causeway.core.metamodel.facets.object.immutable.EditingEnabledFacet; @@ -33,6 +30,8 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import jakarta.inject.Inject; + /** * Replaces {@link DisabledFacetOnPropertyFromImmutableFactory} */ @@ -53,9 +52,8 @@ public void postProcessAction(final ObjectSpecification objectSpecification, fin @Override public void postProcessProperty(final ObjectSpecification objectSpecification, final OneToOneAssociation property) { - if(property.containsNonFallbackFacet(DisabledFacet.class)) { - return; - } + if(property.containsNonFallbackFacet(DisabledFacet.class)) + return; var typeSpec = property.getDeclaringType(); @@ -64,19 +62,15 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f .ifPresent(immutableFacet->{ if(immutableFacet instanceof ImmutableFacetFromConfiguration) { - var isEditingEnabledOnType = typeSpec.lookupNonFallbackFacet(EditingEnabledFacet.class) .isPresent(); - - if(isEditingEnabledOnType) { - // @DomainObject(editing=ENABLED) + if(isEditingEnabledOnType) + // @DomainObject(editing=ENABLED) return; - } - } - FacetUtil.addFacet(DisabledFacetOnPropertyFromImmutable - .forImmutable(facetedMethodFor(property), immutableFacet)); + DisabledFacetOnPropertyFromImmutable + .forImmutable(facetedMethodFor(property), immutableFacet); }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java index a40b4207f26..fe9f8615320 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java @@ -18,6 +18,9 @@ */ package org.apache.causeway.core.metamodel.services.grid; +import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacet; +import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacetIfPresent; + import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.applib.layout.component.DomainObjectLayoutData; @@ -65,9 +68,6 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectMember; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; -import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacet; -import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacetIfPresent; - record XmlLayoutRespectingFacetInstaller( SpecificationLoader specLoader) { @@ -88,7 +88,7 @@ void installFacets( var objectActionById = ObjectMember.mapById(objectSpec.streamRuntimeActions(MixedIn.INCLUDED)); // governs, whether annotations win over XML grid, based on whether XML grid is fallback or 'explicit' - var precedence = bsGrid.fallback() + final var precedence = bsGrid.fallback() ? Facet.Precedence.LOW // fallback case: XML layout is overruled by layout from annotations : Facet.Precedence.HIGH; // non-fallback case: XML layout overrules layout from annotations diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefault.java index e313fa19420..2ae2534a759 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefault.java @@ -45,7 +45,6 @@ import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.collections.layout.columnorder.ColumnOrderPatchingFacet; import org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; @@ -362,7 +361,7 @@ public void patchColumnOrder(final Identifier identifier, final Can colu }; var columnOrderPatchingFacet = elementType.lookupFacet(ColumnOrderPatchingFacet.class) - .orElseGet(()->FacetUtil.addFacet(new ColumnOrderPatchingFacet(elementType))); + .orElseGet(()->new ColumnOrderPatchingFacet(elementType)); columnOrderPatchingFacet.putColumnOrder(identifier, columnsInOrder); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java index c2cc716c530..fbaa712fcde 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetProcessor.java @@ -39,6 +39,8 @@ import org.apache.causeway.core.metamodel.context.HasMetaModelContext; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MethodRemover; import org.apache.causeway.core.metamodel.facets.AccessorFacetFactory; @@ -46,8 +48,6 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facets.ObjectTypeFacetFactory; import org.apache.causeway.core.metamodel.facets.ObjectTypeFacetFactory.ProcessObjectTypeContext; import org.apache.causeway.core.metamodel.methods.MethodFilteringFacetFactory; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsFactory.java index 23ea49c000b..616849ed159 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsFactory.java @@ -36,9 +36,9 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.commons.internal.reflection._Reflect; import org.apache.causeway.core.metamodel.context.HasMetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MethodRemover; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.HasFacetedMethod; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java index a1b586564f3..bc70e0a258a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java @@ -43,8 +43,8 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.consent.InteractionResultSet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java index cde02d80868..5c10d9634b2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java @@ -102,8 +102,7 @@ public ObjectActionMixedIn( if(!isExplicitlyNamed) { var memberName = _MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction); - this.addFacet( - new MemberNamedFacetForStaticMemberName(memberName, facetHolder)); + new MemberNamedFacetForStaticMemberName(memberName, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstract.java index 6ca9d3d194f..9814a1f10ca 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstract.java @@ -22,8 +22,8 @@ import org.apache.causeway.commons.functional.Either; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.choices.PropertyChoicesFacet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java index 3685f4f2581..4f479b4e351 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMemberAbstract.java @@ -36,9 +36,9 @@ import org.apache.causeway.core.metamodel.context.HasMetaModelContext; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.HasFacetedMethod; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.help.HelpFacet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMetaDataFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMetaDataFactory.java index 7f6a2adadb4..2af6c8354a4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMetaDataFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectMetaDataFactory.java @@ -95,9 +95,9 @@ ObjectMetaDataTypeOnly typeOnly( // name if (facetHolder.lookupFacet(MemberNamedFacet.class).isEmpty()) { - facetHolder.addFacet(new MemberNamedFacetForStaticMemberName( + new MemberNamedFacetForStaticMemberName( _Strings.asNaturalName.apply(typeMeta.logicalType().logicalSimpleName()), - facetHolder)); + facetHolder); } var hierarchical = typeMeta.beanSort().isValue() diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java index 3ed6f50bad4..b72190aa817 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java @@ -296,10 +296,10 @@ private void introspectMembers(final MixinSpecStreamer mixinSpecStreamer) { //TODO this is a facet factory responsibility, should be done when the facet processor runs on the type ... see constructor @Deprecated private void addNamedFacetIfRequired() { - if (getFacet(MemberNamedFacet.class) == null) { - addFacet(new MemberNamedFacetForStaticMemberName( + if (lookupFacet(MemberNamedFacet.class).isEmpty()) { + new MemberNamedFacetForStaticMemberName( _Strings.asNaturalName.apply(shortIdentifier()), - this)); + this); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java index 538c9ea8da4..92c87b03d3a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java @@ -27,8 +27,8 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType; import org.apache.causeway.core.metamodel.commons.ToString; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.InteractionUtils; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java index 500c80fc10a..f0800628ea2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java @@ -26,7 +26,6 @@ import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName; @@ -108,8 +107,8 @@ public OneToManyAssociationMixedIn( // // ensure the mixedIn collection cannot be modified, and infer its TypeOfFaccet // - FacetUtil.addFacet(new SnapshotExcludeFacetFromImmutableMember(this)); - FacetUtil.addFacet(disabledFacet()); + new SnapshotExcludeFacetFromImmutableMember(this); + disabledFacet(); // adjust name if necessary var isExplicitlyNamed = lookupNonFallbackFacet(MemberNamedFacet.class) @@ -117,8 +116,7 @@ public OneToManyAssociationMixedIn( if(!isExplicitlyNamed) { String memberName = _MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction); - FacetUtil.addFacet( - new MemberNamedFacetForStaticMemberName(memberName, facetHolder)); + new MemberNamedFacetForStaticMemberName(memberName, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java index 92807e63969..8f86bcbb0bf 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java @@ -31,8 +31,8 @@ import org.apache.causeway.core.metamodel.commons.ToString; import org.apache.causeway.core.metamodel.consent.Consent; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.param.autocomplete.MinLengthUtil; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java index bda47d5f28d..b5ea69870be 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java @@ -25,7 +25,6 @@ import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; @@ -89,7 +88,7 @@ public OneToOneAssociationMixedIn( // // ensure the contributed property cannot be modified // - FacetUtil.addFacet(disabledFacet()); + disabledFacet(); // adjust name if necessary var isExplicitlyNamed = lookupNonFallbackFacet(MemberNamedFacet.class) @@ -97,8 +96,7 @@ public OneToOneAssociationMixedIn( if(!isExplicitlyNamed) { String memberName = _MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction); - FacetUtil.addFacet( - new MemberNamedFacetForStaticMemberName(memberName, facetHolder)); + new MemberNamedFacetForStaticMemberName(memberName, facetHolder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/RegularMemberFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/RegularMemberFactory.java index 6e8638935cb..3c474df6523 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/RegularMemberFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/RegularMemberFactory.java @@ -23,7 +23,7 @@ import java.util.stream.Stream; import org.apache.causeway.commons.internal.base._Casts; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet; import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacetImpl; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SyntheticNavigationActionFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SyntheticNavigationActionFactory.java index bdc353742a4..4a3f1bff748 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SyntheticNavigationActionFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SyntheticNavigationActionFactory.java @@ -32,8 +32,7 @@ import org.apache.causeway.applib.value.Clob; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.functional.Either; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import org.apache.causeway.core.metamodel.facets.actions.synthetic.ActionInvocationFacetForParentedCollectionNavigation; import org.apache.causeway.core.metamodel.facets.actions.synthetic.ActionInvocationFacetForScalarReferenceNavigation; @@ -178,15 +177,15 @@ private static ObjectAction createCollectionAction( parameterNames); installCommonFacets(facetedMethod); - FacetUtil.addFacet(new LayoutGroupFacetForParentedCollectionNavigation( - collection.getId(), collection.getCanonicalFriendlyName(), facetedMethod)); - FacetUtil.addFacet(new LayoutOrderFacetForParentedCollectionNavigation(collection, facetedMethod)); - FacetUtil.addFacet(new ParentedCollectionNavigationFacetDefault(collection, facetedMethod)); - FacetUtil.addFacet(new DisabledFacetForEmptyParentedCollectionNavigation(collection, facetedMethod)); - FacetUtil.addFacet(new ActionValidationFacetForParentedCollectionNavigation( - collection, filterProperties, facetedMethod)); - FacetUtil.addFacet(new ActionInvocationFacetForParentedCollectionNavigation( - ownerSpec, collection.getElementType(), collection, filterProperties, facetedMethod)); + new LayoutGroupFacetForParentedCollectionNavigation( + collection.getId(), collection.getCanonicalFriendlyName(), facetedMethod); + new LayoutOrderFacetForParentedCollectionNavigation(collection, facetedMethod); + new ParentedCollectionNavigationFacetDefault(collection, facetedMethod); + new DisabledFacetForEmptyParentedCollectionNavigation(collection, facetedMethod); + new ActionValidationFacetForParentedCollectionNavigation( + collection, filterProperties, facetedMethod); + new ActionInvocationFacetForParentedCollectionNavigation( + ownerSpec, collection.getElementType(), collection, filterProperties, facetedMethod); installParameterFacets(filterProperties, facetedMethod); return ObjectActionDefault.forMethod(facetedMethod); @@ -205,28 +204,28 @@ private static ObjectAction createReferenceAction( new String[0]); installCommonFacets(facetedMethod); - FacetUtil.addFacet(new LayoutGroupFacetForScalarReferenceNavigation( - reference.getId(), reference.getCanonicalFriendlyName(), facetedMethod)); - FacetUtil.addFacet(new ScalarReferenceNavigationFacetDefault(reference, facetedMethod)); - FacetUtil.addFacet(new DisabledFacetForNullScalarReferenceNavigation(reference, facetedMethod)); - FacetUtil.addFacet(new ActionInvocationFacetForScalarReferenceNavigation( - ownerSpec, reference.getElementType(), reference, facetedMethod)); + new LayoutGroupFacetForScalarReferenceNavigation( + reference.getId(), reference.getCanonicalFriendlyName(), facetedMethod); + new ScalarReferenceNavigationFacetDefault(reference, facetedMethod); + new DisabledFacetForNullScalarReferenceNavigation(reference, facetedMethod); + new ActionInvocationFacetForScalarReferenceNavigation( + ownerSpec, reference.getElementType(), reference, facetedMethod); return ObjectActionDefault.forMethod(facetedMethod); } private static void installCommonFacets( final FacetedMethod facetedMethod) { - FacetUtil.addFacet(new MemberNamedFacetForStaticMemberName("Navigate To", facetedMethod)); - FacetUtil.addFacet(new CssClassFacetForParentedCollectionNavigation(facetedMethod)); - FacetUtil.addFacet(new FaFacetForParentedCollectionNavigation(facetedMethod)); - FacetUtil.addFacet(new ActionSemanticsFacet( - "synthetic navigation", SemanticsOf.SAFE, facetedMethod)); - FacetUtil.addFacetIfPresent(CommandPublishingFacetForActionAnnotation.create( + new MemberNamedFacetForStaticMemberName("Navigate To", facetedMethod); + new CssClassFacetForParentedCollectionNavigation(facetedMethod); + new FaFacetForParentedCollectionNavigation(facetedMethod); + new ActionSemanticsFacet( + "synthetic navigation", SemanticsOf.SAFE, facetedMethod); + CommandPublishingFacetForActionAnnotation.create( Optional.empty(), facetedMethod.getConfiguration(), facetedMethod.getServiceInjector(), - facetedMethod)); + facetedMethod); } private static Can filterPropertiesOf( @@ -269,9 +268,9 @@ private static void installParameterFacets( for (int i = 0; i < filterProperties.size(); i++) { var property = filterProperties.getElseFail(i); var parameter = facetedMethod.parameters().getElseFail(i); - FacetUtil.addFacet(new ParamNamedFacetForParentedCollectionNavigation( - property.getCanonicalFriendlyName(), parameter)); - FacetUtil.addFacet(new MandatoryFacetForParameterAnnotation.Optional(parameter)); + new ParamNamedFacetForParentedCollectionNavigation( + property.getCanonicalFriendlyName(), parameter); + new MandatoryFacetForParameterAnnotation.Optional(parameter); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java index 7e7e9a3102b..61f587ff54e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java @@ -45,7 +45,7 @@ import org.apache.causeway.core.metamodel.commons.MethodUtil; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.HasFacetedMethod; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_JUnitSupport.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_JUnitSupport.java index a66f6f0542b..fe874e56f8e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_JUnitSupport.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_JUnitSupport.java @@ -25,7 +25,7 @@ import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier; import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistry; import org.apache.causeway.core.config.environment.CausewaySystemEnvironment; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; import org.apache.causeway.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/validator/ValidationFailureUtils.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/validator/ValidationFailureUtils.java index f7523575fdb..87f844d241a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/validator/ValidationFailureUtils.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/validator/ValidationFailureUtils.java @@ -24,7 +24,7 @@ import org.apache.causeway.core.config.beans.CausewayBeanMetaData; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectMember; diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstractTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstractTest.java index edeac1487dd..0ab2243e3b9 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstractTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstractTest.java @@ -18,13 +18,12 @@ */ package org.apache.causeway.core.metamodel.facetapi; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - import static org.junit.jupiter.api.Assertions.assertEquals; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class FacetAbstractTest { @@ -47,7 +46,6 @@ public ConcreteFacet(final Class facetType, final FacetHolder h protected void setUp() throws Exception { facetHolder = FacetHolder.forTesting(MetaModelContext_forTesting.buildDefault()); fooFacet = new ConcreteFacet(FooFacet.class, facetHolder); - facetHolder.addFacet(fooFacet); } @AfterEach diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index b0224d122cf..5dc3b2494a7 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -37,6 +37,8 @@ import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.execution.MemberExecutorService; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_domainEvent.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_domainEvent.java index b96283971cf..706c384d17a 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_domainEvent.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_domainEvent.java @@ -29,9 +29,9 @@ import org.apache.causeway.applib.annotation.MemberSupport; import org.apache.causeway.applib.annotation.Nature; import org.apache.causeway.applib.events.domain.ActionDomainEvent; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction; diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java index b9c29c8a742..7c686e6808d 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java @@ -18,16 +18,11 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import org.jspecify.annotations.Nullable; -import org.junit.jupiter.api.Test; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.springframework.boot.test.util.TestPropertyValues; - import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.annotation.SemanticsOf; import org.apache.causeway.commons.internal.base._Blackhole; @@ -38,6 +33,9 @@ import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet; import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.util.TestPropertyValues; class ActionAnnotationFacetFactoryTest_executionPublishing extends ActionAnnotationFacetFactoryTest { @@ -77,7 +75,7 @@ void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_t // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); // then @@ -91,7 +89,7 @@ void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantic // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); // then @@ -154,7 +152,7 @@ public void someAction() {} allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); // then @@ -174,7 +172,7 @@ public void someAction() {} allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); // then @@ -219,7 +217,7 @@ public void someAction() { } actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ // given - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.SAFE, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); @@ -244,7 +242,7 @@ public void someAction() { } actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ // given - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); @@ -269,7 +267,7 @@ public void someAction() { } actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod)->{ // given - facetedMethod.addFacet(new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod)); + new ActionSemanticsFacet("Test", SemanticsOf.IDEMPOTENT, facetedMethod); // when processExecutionPublishing(facetFactory, processMethodContext); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java index 6ad5905f6f7..c06d8bacc22 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java @@ -18,34 +18,33 @@ */ package org.apache.causeway.core.metamodel.facets.actions.prototype; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - import static org.junit.jupiter.api.Assertions.assertEquals; import org.apache.causeway.core.config.environment.DeploymentType; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext; +import org.apache.causeway.core.metamodel.interactions.vis.ActionVisibilityContext; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.mockito.Mockito; class PrototypeFacetAbstractTest { - @Mock VisibilityContext mockVisibilityContext; - @Mock FacetHolder mockFacetHolder; - - @Test - public void allCombinations() throws Exception { - givenWhenThen(DeploymentType.PROTOTYPING, null); - givenWhenThen(DeploymentType.PRODUCTION, "Prototyping action not visible in production mode"); - } - - protected void givenWhenThen(final DeploymentType deploymentType, final String expected) { + @ParameterizedTest + @EnumSource(DeploymentType.class) + void allCombinations(final DeploymentType deploymentType) { // given - final PrototypeFacetAbstract facet = new PrototypeFacetAbstract(mockFacetHolder, deploymentType){}; + var facetHolder = FacetHolder.forTesting(null); + final PrototypeFacetAbstract facet = new PrototypeFacetAbstract(facetHolder, deploymentType){}; // when + var mockVisibilityContext = Mockito.mock(ActionVisibilityContext.class); final String reason = facet.hides(mockVisibilityContext); // then - assertEquals(expected, reason); + switch (deploymentType) { + case PROTOTYPING -> assertEquals(null, reason); + case PRODUCTION -> assertEquals("Prototyping action not visible in production mode", reason); + } } + } \ No newline at end of file diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/JavaCollectionFacetTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/JavaCollectionFacetTest.java index 068024de5ee..4718a608790 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/JavaCollectionFacetTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/JavaCollectionFacetTest.java @@ -18,15 +18,10 @@ */ package org.apache.causeway.core.metamodel.facets.collections; -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; + +import java.util.Optional; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.metamodel.context.MetaModelContext; @@ -34,11 +29,13 @@ import org.apache.causeway.core.metamodel.facets.Mocking; import org.apache.causeway.core.metamodel.facets.collections.javautilcollection.JavaCollectionFacet; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class JavaCollectionFacetTest { private MetaModelContext metaModelContext; - private Mocking mocking = new Mocking(); + private final Mocking mocking = new Mocking(); @BeforeEach void setUp() throws Exception { @@ -47,9 +44,7 @@ void setUp() throws Exception { @Test void firstElementForEmptyCollectionIsEmptyOptional() { - var mockFacetHolder = mock(FacetHolder.class); - when(mockFacetHolder.getMetaModelContext()).thenReturn(metaModelContext); - + var mockFacetHolder = FacetHolder.simple(metaModelContext, null); var mockCollection = mocking.asPacked(Can.empty()); var facet = new JavaCollectionFacet(mockFacetHolder); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java index 6f13ad5c7d0..d1e7c5034c1 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java @@ -16,23 +16,15 @@ * under the License. */ package org.apache.causeway.core.metamodel.facets.collections.collection; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import org.hamcrest.Matchers; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; -import org.mockito.Mockito; - import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.annotation.MemberSupport; @@ -42,11 +34,10 @@ import org.apache.causeway.core.metamodel.commons.matchers.CausewayMatchers; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacetFromFeature; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; @@ -55,6 +46,13 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.postprocessors.members.SynthesizeDomainEventsForMixinPostProcessor; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import org.mockito.Mockito; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -92,14 +90,14 @@ static class DomainEventTests extends CollectionAnnotationFacetFactoryTest { private void addGetterFacet(final FacetHolder holder) { var mockOnType = Mockito.mock(ObjectSpecification.class); - FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) { + new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) { @Override public Object getAssociationValueAsPojo( final ManagedObject inObject, final InteractionInitiatedBy interactionInitiatedBy) { return null; } - }); + }; } private void assertHasCollectionDomainEventFacet( diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/members/publish/command/RecordingAwareCommandPublishingFacetTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/members/publish/command/RecordingAwareCommandPublishingFacetTest.java index c30440dd96b..7ff0c3b6a74 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/members/publish/command/RecordingAwareCommandPublishingFacetTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/members/publish/command/RecordingAwareCommandPublishingFacetTest.java @@ -18,9 +18,13 @@ */ package org.apache.causeway.core.metamodel.facets.members.publish.command; -import java.util.Optional; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Answers.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; -import org.junit.jupiter.api.Test; +import java.util.Optional; import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.annotation.Property; @@ -32,15 +36,9 @@ import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions; import org.apache.causeway.core.config.metamodel.facets.PropertyConfigOptions; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet; +import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; -import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Answers.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.junit.jupiter.api.Test; class RecordingAwareCommandPublishingFacetTest { @@ -228,10 +226,8 @@ void disabledRecordingPreservesAsConfiguredGlobalPropertyPolicy() { @Test void enabledRecordingPublishesContributedMixinProperty() { - var holder = mock(FacetHolder.class); - var contributingFacet = mock(ContributingFacet.class); - when(contributingFacet.contributed()).thenReturn(MixinFacet.Contributing.AS_PROPERTY); - when(holder.lookupFacet(ContributingFacet.class)).thenReturn(Optional.of(contributingFacet)); + var holder = FacetHolder.simple(null, null); + ContributingFacetAbstract.createAsProperty(holder); var facet = CommandPublishingFacetForPropertyAnnotation.create( Optional.empty(), @@ -255,7 +251,7 @@ void enabledRecordingDoesNotMakeNonPropertyFallbackPublishable() { RecordingSupport.ENABLED, ActionConfigOptions.PublishingPolicy.NONE, PropertyConfigOptions.PublishingPolicy.NONE), - mock(FacetHolder.class), + FacetHolder.simple(null, null), null); assertThat(facet).isInstanceOf(CommandPublishingFacetForActionFromConfiguration.None.class); @@ -297,14 +293,13 @@ private CommandPublishingFacet propertyFacet( } private FacetHolder safeHolder(final SemanticsOf semantics) { - var holder = mock(FacetHolder.class); - when(holder.lookupFacet(ActionSemanticsFacet.class)).thenReturn(Optional.of( - new ActionSemanticsFacet("test", semantics, holder))); + var holder = FacetHolder.simple(null, null); + new ActionSemanticsFacet("test", semantics, holder); return holder; } private FacetHolder propertyHolder() { - return mock(FacetHolder.class); + return FacetHolder.simple(null, null); } private CausewayConfiguration configuration( diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodWithProblemTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodWithProblemTest.java index 8afe8c583b5..cae0aa3df96 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodWithProblemTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodWithProblemTest.java @@ -18,11 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.cssclass; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -34,10 +29,14 @@ import org.apache.causeway.core.metamodel.facets.object.cssclass.method.CssClassFacetViaCssClassMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; class CssClassFacetMethodWithProblemTest { - private Mocking mocking = new Mocking(); + private final Mocking mocking = new Mocking(); private CssClassFacetViaCssClassMethod facet; private ManagedObject mockOwningAdapter; @@ -57,14 +56,13 @@ public void setUp() throws Exception { final ResolvedMethod iconNameMethod = _GenericResolver.testing .resolveMethod(DomainObjectWithProblemInCssClassMethod.class, "cssClass"); facet = (CssClassFacetViaCssClassMethod) CssClassFacetViaCssClassMethod - .create(iconNameMethod, Mockito.mock(FacetHolder.class)) + .create(iconNameMethod, FacetHolder.simple(null, null)) .orElse(null); var mockSpec = Mockito.mock(ObjectSpecification.class); Mockito.when(mockSpec.isViewModel()).thenReturn(true); mockOwningAdapter = mocking.asViewmodel(pojo); - } @AfterEach diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java index a94a99b154a..740657a0ad3 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java @@ -18,11 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.icon; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -34,10 +29,13 @@ import org.apache.causeway.core.metamodel.facets.Mocking; import org.apache.causeway.core.metamodel.facets.object.icon.method.IconFacetViaIconMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class IconFacetMethodTest { - private Mocking mocking = new Mocking(); + private final Mocking mocking = new Mocking(); private IconFacetViaIconMethod facet; private ManagedObject mockOwningAdapter; @@ -57,7 +55,7 @@ public void setUp() throws Exception { .resolveMethod(DomainObjectWithProblemInIconNameMethod.class, "icon", ObjectSupport.IconSize.class); facet = (IconFacetViaIconMethod) IconFacetViaIconMethod - .create(iconMethod, Mockito.mock(FacetHolder.class)) + .create(iconMethod, FacetHolder.simple(null, null)) .orElse(null); mockOwningAdapter = mocking.asViewmodel(pojo); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetMethodTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetMethodTest.java index f09177f17b9..7b7d4230225 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetMethodTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetMethodTest.java @@ -18,11 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.layout; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -33,10 +28,13 @@ import org.apache.causeway.core.metamodel.facets.object.layout.LayoutPrefixFacet; import org.apache.causeway.core.metamodel.facets.object.layout.LayoutPrefixFacetViaMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class LayoutFacetMethodTest { - private Mocking mocking = new Mocking(); + private final Mocking mocking = new Mocking(); private LayoutPrefixFacet facet; private ManagedObject mockOwningAdapter; @@ -56,7 +54,7 @@ void setUp() throws Exception { var iconNameMethod = _GenericResolver.testing .resolveMethod(DomainObjectWithProblemInLayoutMethod.class, "layout"); facet = LayoutPrefixFacetViaMethod.create( - iconNameMethod, Mockito.mock(FacetHolder.class)) + iconNameMethod, FacetHolder.simple(null, null)) .orElse(null); mockOwningAdapter = mocking.asViewmodel(pojo); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java index cd83c1353bd..f6646de7025 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java @@ -18,10 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.title; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -31,6 +27,8 @@ import org.apache.causeway.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class TitleFacetViaMethodTest extends FacetFactoryTestAbstract { @@ -53,8 +51,7 @@ void setUp() throws Exception { metaModelContext = MetaModelContext_forTesting.builder() .build(); - var mockFacetHolder = Mockito.mock(FacetHolder.class); - Mockito.when(mockFacetHolder.getMetaModelContext()).thenReturn(metaModelContext); + var mockFacetHolder = FacetHolder.simple(metaModelContext, null); pojo = new DomainObjectWithProblemInItsTitleMethod(); //mockFacetHolder = mockery.mock(FacetHolder.class); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java index 6443dcae7e0..ec7ee0684bd 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java @@ -18,9 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.title; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @@ -28,10 +25,12 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.title.TitleFacet; import org.apache.causeway.core.metamodel.facets.object.title.methods.TitleFacetFromToStringMethod; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; class TitleFacetViaMethodsFactoryTest extends ObjectSupportFacetFactoryTestAbstract { diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java index 079ab0b0465..80f12af5533 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaTitleAnnotationTest.java @@ -18,10 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.title; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -31,10 +27,12 @@ import org.apache.causeway.core.metamodel.facets.Mocking; import org.apache.causeway.core.metamodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class TitleFacetViaTitleAnnotationTest { - private Mocking mocking = new Mocking(); + private final Mocking mocking = new Mocking(); MetaModelContext metaModelContext; FacetHolder mockFacetHolder; @@ -57,7 +55,7 @@ void setUp() { metaModelContext = MetaModelContext_forTesting.builder() .build(); - mockFacetHolder = Mockito.mock(FacetHolder.class); + mockFacetHolder = FacetHolder.simple(metaModelContext, null); } @Test @@ -70,8 +68,6 @@ void title_happyCase() throws Exception { final NormalDomainObject normalPojo = new NormalDomainObject(); - Mockito.when(mockFacetHolder.getMetaModelContext()).thenReturn(metaModelContext); - var managedObject = metaModelContext.getObjectManager().adapt(normalPojo); @@ -90,8 +86,6 @@ void title_throwsException() { final DomainObjectWithProblemInItsAnnotatedTitleMethod screwedPojo = new DomainObjectWithProblemInItsAnnotatedTitleMethod(); - Mockito.when(mockFacetHolder.getMetaModelContext()).thenReturn(metaModelContext); - var mockManagedObject = mocking.asViewmodel(screwedPojo); final String title = facet.title(mockManagedObject); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinIntendedAs.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinIntendedAs.java index 92ac081c3a7..e4b484976ca 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinIntendedAs.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinIntendedAs.java @@ -24,11 +24,11 @@ import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod; import org.apache.causeway.commons.internal.reflection._MethodFacades; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethodParameter; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MethodRemover; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethodParameter; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetFactoryTest.java index a8bce54d767..b30e86d723c 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacetFactoryTest.java @@ -18,12 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.object.navchild; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import org.apache.causeway.commons.collections.Can; @@ -32,6 +29,9 @@ import org.apache.causeway.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class NavigableSubtreeFacetFactoryTest extends FacetFactoryTestAbstract { @@ -55,49 +55,41 @@ protected void tearDown() { @Test void treeNodeFacetShouldBeInstalledWhenNodeHasAnnotations() { - + collectionScenario(_TreeSample.A.class, "childrenB", (processMethodContext, facetHolder, facetedMethod)->{ facetFactory.process(processMethodContext); - assertNotNull(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); - // copy over facets to spec for testing later + assertTrue(facetedMethod.containsFacet(NavigableSubtreeSequenceFacet.class)); var spec = specLoader.specForType(_TreeSample.A.class).orElseThrow(); - spec.getAssociationElseFail("childrenB") - .addFacet(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); + spec.getAssociationElseFail("childrenB"); }); - + collectionScenario(_TreeSample.A.class, "childrenC", (processMethodContext, facetHolder, facetedMethod)->{ facetFactory.process(processMethodContext); - assertNotNull(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); - // copy over facets to spec for testing later + assertTrue(facetedMethod.containsFacet(NavigableSubtreeSequenceFacet.class)); var spec = specLoader.specForType(_TreeSample.A.class).orElseThrow(); - spec.getAssociationElseFail("childrenC") - .addFacet(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); + spec.getAssociationElseFail("childrenC"); }); - + collectionScenario(_TreeSample.B.class, "childrenD", (processMethodContext, facetHolder, facetedMethod)->{ facetFactory.process(processMethodContext); - assertNotNull(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); - // copy over facets to spec for testing later + assertTrue(facetedMethod.containsFacet(NavigableSubtreeSequenceFacet.class)); var spec = specLoader.specForType(_TreeSample.B.class).orElseThrow(); - spec.getAssociationElseFail("childrenD") - .addFacet(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); + spec.getAssociationElseFail("childrenD"); }); - + collectionScenario(_TreeSample.C.class, "childrenD", (processMethodContext, facetHolder, facetedMethod)->{ facetFactory.process(processMethodContext); - assertNotNull(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); - // copy over facets to spec for testing later + assertTrue(facetedMethod.containsFacet(NavigableSubtreeSequenceFacet.class)); var spec = specLoader.specForType(_TreeSample.C.class).orElseThrow(); - spec.getAssociationElseFail("childrenD") - .addFacet(facetedMethod.lookupFacet(NavigableSubtreeSequenceFacet.class).orElse(null)); + spec.getAssociationElseFail("childrenD"); }); - + var specs = Can.of(_TreeSample.A.class, _TreeSample.B.class, _TreeSample.C.class, _TreeSample.D.class) .map(specLoader::specForType) .map(opt->opt.orElse(null)); // now run the post-processor specs.forEach(postProcessor::postProcessObject); - + specs.forEach(spec->{ switch(spec.correspondingClass().getSimpleName()) { case "A" -> assertNotNull(spec.lookupFacet(NavigableSubtreeFacet.class).orElse(null)); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java index 6d907d9bce6..177fc2b5405 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java @@ -18,25 +18,24 @@ */ package org.apache.causeway.core.metamodel.facets.ordering.memberorder; -import java.util.Comparator; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; +import java.util.Comparator; + import org.apache.causeway.applib.services.i18n.TranslationContext; import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.internal.context._Context; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.layout.group.GroupIdAndName; import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetAbstract; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetAbstract; import org.apache.causeway.core.metamodel.object.MmSortUtils; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; class DeweyOrderComparatorTest { @@ -171,8 +170,8 @@ void nonAnnotatedAfterAnnotated() { // -- HELPER void setupLayoutFacets(final String groupId, final String sequence, final FacetedMethod facetedMethod) { - facetedMethod.addFacet(new LayoutGroupFacetAbstract(new GroupIdAndName(groupId, ""), facetedMethod) {}); - facetedMethod.addFacet(new LayoutOrderFacetAbstract(sequence, facetedMethod) {}); + new LayoutGroupFacetAbstract(new GroupIdAndName(groupId, ""), facetedMethod) {}; + new LayoutOrderFacetAbstract(sequence, facetedMethod) {}; } } diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java index 99f06a995bd..50c219d105f 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java @@ -18,26 +18,25 @@ */ package org.apache.causeway.core.metamodel.facets.ordering.memberorder; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.List; + import org.apache.causeway.applib.services.i18n.TranslationContext; import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.internal.context._Context; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.layout.group.GroupIdAndName; import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetAbstract; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetAbstract; import org.apache.causeway.core.metamodel.layout.DeweyOrderSet; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; class DeweyOrderSetTest { @@ -238,8 +237,8 @@ void defaultGroupMixOfAnnotatedAndNotOrderedWithAnnotatedFirst() { // -- HELPER void setupLayoutFacets(final String groupId, final String sequence, final FacetHolder facetedHolder) { - facetedHolder.addFacet(new LayoutGroupFacetAbstract(new GroupIdAndName(groupId, ""), facetedHolder) {}); - facetedHolder.addFacet(new LayoutOrderFacetAbstract(sequence, facetedHolder) {}); + new LayoutGroupFacetAbstract(new GroupIdAndName(groupId, ""), facetedHolder) {}; + new LayoutOrderFacetAbstract(sequence, facetedHolder) {}; } } diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index affd877fe5a..5c5cc204136 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -18,15 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.util.regex.Pattern; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.api.TestInstance.Lifecycle; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -35,6 +26,8 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.regex.Pattern; + import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.annotation.MemberSupport; import org.apache.causeway.applib.annotation.Nature; @@ -49,11 +42,10 @@ import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet; @@ -76,6 +68,12 @@ import org.apache.causeway.core.metamodel.postprocessors.members.SynthesizeDomainEventsForMixinPostProcessor; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import org.mockito.Mockito; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -148,18 +146,18 @@ static class Modify extends PropertyAnnotationFacetFactoryTest { private void addGetterFacet(final FacetHolder holder) { var mockOnType = Mockito.mock(ObjectSpecification.class); - FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) { + new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) { @Override public Object getAssociationValueAsPojo( final ManagedObject inObject, final InteractionInitiatedBy interactionInitiatedBy) { return null; } - }); + }; } private void addSetterFacet(final FacetHolder holder) { - FacetUtil.addFacet(new PropertySetterFacetAbstract(holder) { + new PropertySetterFacetAbstract(holder) { @Override public ManagedObject setProperty( final OneToOneAssociation owningAssociation, @@ -168,7 +166,7 @@ public ManagedObject setProperty( final InteractionInitiatedBy interactionInitiatedBy) { return inObject; } - }); + }; } private void assertHasPropertyDomainEventFacet( @@ -179,9 +177,8 @@ private void assertHasPropertyDomainEventFacet( assertEquals(eventTypeOrigin, domainEventFacet.getEventTypeOrigin()); assertThat(domainEventFacet.getEventType(), CausewayMatchers.classEqualTo(eventType)); - if(facetedMethod.methodFacade().getName().equals("prop")) { + if(facetedMethod.methodFacade().getName().equals("prop")) return; // skip further checks, when in a mixed-in scenario - } // then var setterFacet = facetedMethod.lookupFacet(PropertySetterFacet.class).orElse(null); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetFromPropertyAnnotationTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetFromPropertyAnnotationTest.java index 9ef368010a3..f813118fea9 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetFromPropertyAnnotationTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetFromPropertyAnnotationTest.java @@ -18,20 +18,11 @@ */ package org.apache.causeway.core.metamodel.facets.properties.propertylayout; -import java.util.Optional; - -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; -import org.springframework.boot.test.util.TestPropertyValues; +import java.util.Optional; import org.apache.causeway.applib.annotation.PromptStyle; import org.apache.causeway.applib.annotation.PropertyLayout; @@ -39,15 +30,22 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet; import org.apache.causeway.core.mmtestsupport.ConfigurationTester; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.boot.test.util.TestPropertyValues; class PromptStyleFacetFromPropertyAnnotationTest { - FacetHolder mockFacetHolder; + FacetHolder facetHolder; PropertyLayout mockPropertyLayout; @BeforeEach void setUp() throws Exception { - mockFacetHolder = Mockito.mock(FacetHolder.class); + facetHolder = FacetHolder.simple(null, null); mockPropertyLayout = Mockito.mock(PropertyLayout.class); } @@ -58,7 +56,7 @@ void when_annotated_with_dialog() throws Exception { Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.DIALOG); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet.origin(), is("PropertyLayoutAnnotation")); @@ -73,7 +71,7 @@ void when_annotated_with_inline() throws Exception { Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.INLINE); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet.origin(), is("PropertyLayoutAnnotation")); @@ -86,11 +84,11 @@ void when_annotated_with_as_configured() throws Exception { new ConfigurationTester(TestPropertyValues.of("causeway.viewer.wicket.promptStyle=INLINE")) .test(conf->{ Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.AS_CONFIGURED); - Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) - .thenReturn(false); +// Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) +// .thenReturn(false); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet, is(anInstanceOf(PromptStyleFacet.class))); @@ -104,11 +102,10 @@ void when_annotated_with_as_configured_but_already_has_doop_facet() throws Excep new ConfigurationTester(TestPropertyValues.empty()) .test(conf->{ Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.AS_CONFIGURED); - Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) - .thenReturn(true); + new PromptStyleFacet("test", null, facetHolder); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet, is(nullValue())); @@ -120,11 +117,11 @@ void when_not_annotated() throws Exception { new ConfigurationTester(TestPropertyValues.empty()) .test(conf->{ Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.NOT_SPECIFIED); - Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) - .thenReturn(false); +// Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) +// .thenReturn(false); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet, is(anInstanceOf(PromptStyleFacet.class))); @@ -138,11 +135,10 @@ void when_not_annotated_but_already_has_doop_facet() throws Exception { new ConfigurationTester(TestPropertyValues.empty()) .test(conf->{ Mockito.when(mockPropertyLayout.promptStyle()).thenReturn(PromptStyle.NOT_SPECIFIED); - Mockito.when(mockFacetHolder.containsNonFallbackFacet(PromptStyleFacet.class)) - .thenReturn(true); + new PromptStyleFacet("test", null, facetHolder); PromptStyleFacet facet = createPromptStyleFacetForPropertyLayoutAnnotation( - Optional.of(mockPropertyLayout), conf, mockFacetHolder) + Optional.of(mockPropertyLayout), conf, facetHolder) .orElse(null); assertThat(facet, is(nullValue())); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java index 84f80ce33b0..17d88bdb010 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java @@ -18,26 +18,25 @@ */ package org.apache.causeway.core.metamodel.facets.value.semantics; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.format.FormatStyle; - -import org.junit.jupiter.api.Test; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.FormatStyle; + import org.apache.causeway.applib.annotation.TimeZoneTranslation; import org.apache.causeway.applib.annotation.ValueSemantics; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.temporalformat.TimeFormatStyleFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.temporalformat.TimeZoneTranslationFacet; import org.apache.causeway.core.metamodel.util.Facets; +import org.junit.jupiter.api.Test; class ValueSemanticsAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/objects/ObjectActionLayoutXmlDefaultTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/objects/ObjectActionLayoutXmlDefaultTest.java index 7934a2e3b1a..05d090e5402 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/objects/ObjectActionLayoutXmlDefaultTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/objects/ObjectActionLayoutXmlDefaultTest.java @@ -18,10 +18,6 @@ */ package org.apache.causeway.core.metamodel.objects; -import java.util.Optional; - -import org.junit.jupiter.api.Test; - import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -30,15 +26,19 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.Optional; + import org.apache.causeway.applib.Identifier; import org.apache.causeway.core.metamodel.MetaModelTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract; import org.apache.causeway.core.metamodel.id.TypeIdentifierTestFactory; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.impl._JUnitSupport; import org.apache.causeway.core.mmtestsupport.TranslationService_forTesting; +import org.junit.jupiter.api.Test; class ObjectActionLayoutXmlDefaultTest extends MetaModelTestAbstract { @@ -52,6 +52,10 @@ protected void afterSetUp() { mockFacetedMethod = mock(FacetedMethod.class); + var facetHolder = FacetHolder.simple(null, null); + when(mockFacetedMethod.facetHolder()) + .thenReturn(facetHolder); + when(mockFacetedMethod.getFeatureIdentifier()) .thenReturn(Identifier.actionIdentifier(TypeIdentifierTestFactory.newCustomer(), "reduceheadcount")); diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/GridLoadingTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/GridLoadingTest.java index d54bfea717b..37c418fd75c 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/GridLoadingTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/GridLoadingTest.java @@ -85,7 +85,7 @@ void customNamed() { assertEquals(customNamed, objectAction.getStaticFriendlyName().orElse(null)); - var facetRanking = objectAction.getFacetRanking(MemberNamedFacet.class).orElse(null); + var facetRanking = objectAction.lookupFacetRanking(MemberNamedFacet.class).orElse(null); assertNotNull(facetRanking); // XML layout facets are installed at precedence HIGH diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/LayoutSwitchingTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/LayoutSwitchingTest.java index dc324c6ab52..e9399ec149c 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/LayoutSwitchingTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/grid/LayoutSwitchingTest.java @@ -18,15 +18,13 @@ */ package org.apache.causeway.core.metamodel.services.grid; -import java.util.List; -import java.util.function.Predicate; - -import org.junit.jupiter.api.Test; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.util.List; +import java.util.function.Predicate; + import org.apache.causeway.applib.layout.grid.bootstrap.BSGrid; import org.apache.causeway.applib.layout.grid.bootstrap.BSUtil; import org.apache.causeway.applib.services.grid.GridService; @@ -42,6 +40,7 @@ import org.apache.causeway.core.metamodel.spec.ActionScope; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.MixedIn; +import org.junit.jupiter.api.Test; /** * Switching between Layout Variants may result in Members staying hidden. @@ -110,12 +109,12 @@ void switchLayout_viaService() { private void assertTotalFacetCountIsInvariant(final List facetHolders, final Runnable runnable) { final var totalFacetCountsBefore = facetHolders.stream() - .map(facetHolder->facetHolder.getFacetRanking(HiddenFacet.class).orElseThrow()) + .map(facetHolder->facetHolder.lookupFacetRanking(HiddenFacet.class).orElseThrow()) .map(FacetRanking::totalFacetCount) .toList(); runnable.run(); final var totalFacetCountsAfter = facetHolders.stream() - .map(facetHolder->facetHolder.getFacetRanking(HiddenFacet.class).orElseThrow()) + .map(facetHolder->facetHolder.lookupFacetRanking(HiddenFacet.class).orElseThrow()) .map(FacetRanking::totalFacetCount) .toList(); assertEquals(totalFacetCountsBefore, totalFacetCountsAfter); @@ -140,6 +139,7 @@ private void assertCanSwitchQualifierOnAndOff(final ObjectSpecification spec, fi private void assertHiddenActionCount(final ObjectSpecification spec, final long n) { assertEquals(n, spec.streamActions(ActionScope.ANY, MixedIn.EXCLUDED) + .peek(it->System.err.println("hidden " +it)) .flatMap(act->act.lookupFacet(HiddenFacet.class).stream()) .map(HiddenFacet::getSemantics) .filter(Semantics::isHidden) diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java index 7ecfac5d3ca..ea3db9159a6 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java @@ -29,7 +29,7 @@ import org.apache.causeway.applib.services.metamodel.DomainMember; import org.apache.causeway.applib.services.metamodel.DomainModel; import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.id.TypeIdentifierTestFactory; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest.java index b12bb89f02d..7750a2838d4 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest.java @@ -18,34 +18,31 @@ */ package org.apache.causeway.core.metamodel.spec.impl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.services.inject.ServiceInjector; import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; -import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; -import org.apache.causeway.core.metamodel.facets.properties.choices.PropertyChoicesFacet; +import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet.Semantics; +import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetAbstract; +import org.apache.causeway.core.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract; import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class ObjectAssociationAbstractTest { @@ -66,7 +63,7 @@ public String getFirstName() { } @BeforeEach - public void setup() { + void setup() { MetaModelContext mmc = MetaModelContext_forTesting.buildDefault(); facetedMethod = FacetedMethod.testing.createGetterForProperty(mmc , Customer.class, "firstName"); @@ -149,38 +146,33 @@ public boolean isExplicitlyAnnotated() { } @Test - public void notHidden() throws Exception { + void notHidden() throws Exception { assertFalse(objectAssociation.isAlwaysHidden()); } @Test - public void optional() throws Exception { + void optional() throws Exception { assertFalse(objectAssociation.isMandatory()); } @Test - public void mandatory() throws Exception { - final MandatoryFacet mockFacet = mockFacetIgnoring(MandatoryFacet.class, Precedence.DEFAULT); - facetedMethod.addFacet(mockFacet); + void mandatory() throws Exception { + new MandatoryFacetAbstract(Semantics.REQUIRED, facetedMethod) {}; assertTrue(objectAssociation.isMandatory()); } @Test - public void hasNoChoices() throws Exception { + void hasNoChoices() throws Exception { assertFalse(objectAssociation.hasChoices()); } @Test - public void hasChoices() throws Exception { - final PropertyChoicesFacet mockFacet = mockFacetIgnoring(PropertyChoicesFacet.class, Precedence.DEFAULT); - facetedMethod.addFacet(mockFacet); + void hasChoices() throws Exception { + new PropertyChoicesFacetAbstract(facetedMethod) { + @Override + public Can getChoices(final ManagedObject adapter, final InteractionInitiatedBy interactionInitiatedBy) { + return Can.empty(); + }}; assertTrue(objectAssociation.hasChoices()); } - - private T mockFacetIgnoring(final Class typeToMock, final Precedence precedence) { - final T facet = Mockito.mock(typeToMock); - Mockito.when(facet.facetType()).thenReturn(_Casts.uncheckedCast(typeToMock)); - Mockito.when(facet.precedence()).thenReturn(precedence); - return facet; - } } diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest_alwaysHidden.java index e46fb81aec4..6d0a2d5fb8d 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest_alwaysHidden.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/ObjectAssociationAbstractTest_alwaysHidden.java @@ -29,9 +29,8 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.members.hidden.HiddenFacetAbstract; import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext; @@ -206,19 +205,17 @@ private static void addHiddenFacet( final Where where, final FacetedMethod holder, final boolean noop) { - - FacetUtil.addFacet( - new HiddenFacetAbstract(where, holder) { - @Override - protected String hiddenReason(final ManagedObject target, final Where whereContext) { - return null; - } - @Override - public Precedence precedence() { - return noop - ? Facet.Precedence.FALLBACK - : Facet.Precedence.DEFAULT; - } - }); + new HiddenFacetAbstract(where, holder) { + @Override + protected String hiddenReason(final ManagedObject target, final Where whereContext) { + return null; + } + @Override + public Precedence precedence() { + return noop + ? Facet.Precedence.FALLBACK + : Facet.Precedence.DEFAULT; + } + }; } } diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java index 648d17e2a79..777abb55d1f 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java @@ -18,11 +18,6 @@ */ package org.apache.causeway.core.metamodel.spec.impl; -import java.util.List; -import java.util.Optional; - -import org.junit.jupiter.api.Test; - import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -30,16 +25,20 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.List; +import java.util.Optional; + import org.apache.causeway.applib.Identifier; import org.apache.causeway.commons.functional.Either; import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType; import org.apache.causeway.commons.semantics.CollectionSemantics; import org.apache.causeway.core.metamodel.MetaModelTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.id.TypeIdentifierTestFactory; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; +import org.junit.jupiter.api.Test; class OneToManyAssociationDefaultTest extends MetaModelTestAbstract { diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationAbstractTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationAbstractTest.java index b774a2e6283..7bb75d3b381 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationAbstractTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationAbstractTest.java @@ -18,26 +18,17 @@ */ package org.apache.causeway.core.metamodel.spec.impl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.services.inject.ServiceInjector; import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; -import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; +import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacetAbstract; import org.apache.causeway.core.metamodel.interactions.use.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext; import org.apache.causeway.core.metamodel.object.ManagedObject; @@ -45,6 +36,11 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class OneToOneAssociationAbstractTest { @@ -65,7 +61,7 @@ public String getFirstName() { } @BeforeEach - public void setup() { + void setup() { MetaModelContext mmc = MetaModelContext_forTesting.buildDefault(); facetedMethod = FacetedMethod.testing.createGetterForProperty(mmc, Customer.class, "firstName"); @@ -73,7 +69,7 @@ public void setup() { facetedMethod.getFeatureIdentifier(), facetedMethod, objectSpecification) { private static final long serialVersionUID = 1L; - + @Override public ManagedObject get( final ManagedObject fromObject, @@ -142,29 +138,14 @@ public int getAutoCompleteMinLength() { } @Test - public void notPersistedWhenDerived() throws Exception { - final SnapshotExcludeFacet mockFacet = mockFacetIgnoring(SnapshotExcludeFacet.class, Precedence.DEFAULT); - facetedMethod.addFacet(mockFacet); + void notPersistedWhenFlaggedAsNotPersisted() throws Exception { + new SnapshotExcludeFacetAbstract(facetedMethod) {}; assertTrue(objectAssociation.isExcludedFromSnapshots()); } @Test - public void notPersistedWhenFlaggedAsNotPersisted() throws Exception { - final SnapshotExcludeFacet mockFacet = mockFacetIgnoring(SnapshotExcludeFacet.class, Precedence.DEFAULT); - facetedMethod.addFacet(mockFacet); - assertTrue(objectAssociation.isExcludedFromSnapshots()); - } - - @Test - public void persisted() throws Exception { + void persisted() throws Exception { assertFalse(objectAssociation.isExcludedFromSnapshots()); } - private T mockFacetIgnoring(final Class typeToMock, final Precedence precedence) { - final T facet = Mockito.mock(typeToMock); - Mockito.when(facet.facetType()).thenReturn(_Casts.uncheckedCast(typeToMock)); - Mockito.when(facet.precedence()).thenReturn(precedence); - return facet; - } - } diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java index a6050992e5a..43d5d544e54 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java @@ -327,7 +327,7 @@ private static List buildMenuItemsFromAnnotationsOnly( var actionLayoutData = new ServiceActionLayoutData(logicalTypeName, objectAction.getId()); var named = objectAction - .getFacetRanking(MemberNamedFacet.class) + .lookupFacetRanking(MemberNamedFacet.class) // assuming layout from annotations never installs higher than Precedence.DEFAULT .flatMap(facetRanking->facetRanking.getWinnerNonEventLowerOrEqualTo(MemberNamedFacet.class, Precedence.DEFAULT)) .map(MemberNamedFacet::getSpecialization) diff --git a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java index a8f7363c063..b4fabf97c30 100644 --- a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java +++ b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java @@ -18,20 +18,12 @@ */ package org.apache.causeway.core.runtimeservices.menubars.bootstrap; -import java.nio.charset.StandardCharsets; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.core.io.ByteArrayResource; +import java.nio.charset.StandardCharsets; import org.apache.causeway.applib.services.layout.LayoutService; import org.apache.causeway.applib.services.menu.MenuBarsMarshallerService; @@ -41,6 +33,12 @@ import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.mmtestsupport.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder; import org.apache.causeway.core.runtimeservices.RuntimeServicesTestAbstract; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.EnumSource.Mode; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.core.io.ByteArrayResource; class MenuBarsServiceBSTest extends RuntimeServicesTestAbstract { @@ -149,7 +147,7 @@ void customNamed() { assertEquals(customNamed, objectAction.getStaticFriendlyName().orElse(null)); - var facetRanking = objectAction.getFacetRanking(MemberNamedFacet.class).orElse(null); + var facetRanking = objectAction.lookupFacetRanking(MemberNamedFacet.class).orElse(null); assertNotNull(facetRanking); // XML layout facets are installed at precedence HIGH diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/facets/TenantedAuthorizationPostProcessor.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/facets/TenantedAuthorizationPostProcessor.java index a951ecbe2b6..b1a5cdb71cc 100644 --- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/facets/TenantedAuthorizationPostProcessor.java +++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/facets/TenantedAuthorizationPostProcessor.java @@ -21,17 +21,10 @@ import java.util.Optional; import java.util.stream.Collectors; -import jakarta.inject.Inject; -import jakarta.inject.Provider; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.stereotype.Component; - import org.apache.causeway.applib.services.queryresultscache.QueryResultsCache; import org.apache.causeway.applib.services.user.UserService; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.postprocessors.MetaModelPostProcessorAbstract; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; @@ -42,6 +35,11 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.extensions.secman.applib.tenancy.spi.ApplicationTenancyEvaluator; import org.apache.causeway.extensions.secman.applib.user.dom.ApplicationUserRepository; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Component; + +import jakarta.inject.Inject; +import jakarta.inject.Provider; public class TenantedAuthorizationPostProcessor extends MetaModelPostProcessorAbstract { @@ -68,7 +66,7 @@ public TenantedAuthorizationPostProcessor(final MetaModelContext metaModelContex @Override public void postProcessObject(final ObjectSpecification objectSpecification) { - FacetUtil.addFacetIfPresent(createFacet(objectSpecification.correspondingClass(), objectSpecification)); + createFacet(objectSpecification.correspondingClass(), objectSpecification); } @Override @@ -89,7 +87,7 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, // -- HELPER private void addFacetTo(final ObjectSpecification specification, final ObjectFeature objectFeature) { - FacetUtil.addFacetIfPresent(createFacet(specification.correspondingClass(), objectFeature)); + createFacet(specification.correspondingClass(), objectFeature); } private Optional createFacet( diff --git a/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/causeway/extensions/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotationFactory.java b/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/causeway/extensions/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotationFactory.java index 6e8050b916d..197cb70720f 100644 --- a/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/causeway/extensions/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotationFactory.java +++ b/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/causeway/extensions/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotationFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.extensions.pdfjs.metamodel.facet; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -51,9 +50,6 @@ public PdfJsViewerFacetFromAnnotationFactory(final MetaModelContext mmc) { @Override public void process(final ProcessMethodContext processMethodContext) { - - var facetHolder = processMethodContext.facetHolder(); - var pdfjsViewerIfAny = processMethodContext .synthesizeOnMethodOrMixinType( PdfJsViewer.class, @@ -62,15 +58,9 @@ public void process(final ProcessMethodContext processMethodContext) { pdfjsViewerIfAny.ifPresent( pdfjsViewer -> { - getServiceInjector().injectServicesInto( - - FacetUtil.addFacet( - PdfJsViewerFacetFromAnnotation - .create(pdfjsViewer, facetHolder)) - - ); - + PdfJsViewerFacetFromAnnotation + .create(pdfjsViewer, processMethodContext.facetHolder())); } ); } diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml index ddc71f5437c..64a54ce85ce 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml @@ -16,7 +16,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -161,13 +161,13 @@ - + - + @@ -249,7 +249,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -667,7 +667,7 @@ - + @@ -831,7 +831,7 @@ - + @@ -942,7 +942,7 @@ - + @@ -1053,7 +1053,7 @@ - + @@ -1270,7 +1270,7 @@ - + @@ -1428,7 +1428,7 @@ - + @@ -1641,7 +1641,7 @@ - + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml index 184668d99b7..4f76e7eb372 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml @@ -16,7 +16,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -161,13 +161,13 @@ - + - + @@ -242,7 +242,7 @@ - + @@ -399,7 +399,7 @@ - + @@ -660,7 +660,7 @@ - + @@ -824,7 +824,7 @@ - + @@ -935,7 +935,7 @@ - + @@ -1046,7 +1046,7 @@ - + @@ -1263,7 +1263,7 @@ - + @@ -1421,7 +1421,7 @@ - + @@ -1634,7 +1634,7 @@ - + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml index 1c6623638e5..720680c19f9 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml @@ -16,7 +16,7 @@ - + @@ -121,13 +121,13 @@ - + - + @@ -146,7 +146,7 @@ - + @@ -238,7 +238,7 @@ - + @@ -395,7 +395,7 @@ - + @@ -656,7 +656,7 @@ - + @@ -820,7 +820,7 @@ - + @@ -931,7 +931,7 @@ - + @@ -1042,7 +1042,7 @@ - + @@ -1259,7 +1259,7 @@ - + @@ -1417,7 +1417,7 @@ - + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml index 10d97794b0c..f043b5abbf0 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml @@ -16,7 +16,7 @@ - + @@ -121,13 +121,13 @@ - + - + @@ -146,7 +146,7 @@ - + @@ -231,7 +231,7 @@ - + @@ -388,7 +388,7 @@ - + @@ -649,7 +649,7 @@ - + @@ -813,7 +813,7 @@ - + @@ -924,7 +924,7 @@ - + @@ -1035,7 +1035,7 @@ - + @@ -1252,7 +1252,7 @@ - + @@ -1410,7 +1410,7 @@ - + diff --git a/extensions/vw/sse/metamodel/src/main/java/org/apache/causeway/extensions/sse/metamodel/facets/SseAnnotationFacetFactory.java b/extensions/vw/sse/metamodel/src/main/java/org/apache/causeway/extensions/sse/metamodel/facets/SseAnnotationFacetFactory.java index d7b27db470e..91e25be83b1 100644 --- a/extensions/vw/sse/metamodel/src/main/java/org/apache/causeway/extensions/sse/metamodel/facets/SseAnnotationFacetFactory.java +++ b/extensions/vw/sse/metamodel/src/main/java/org/apache/causeway/extensions/sse/metamodel/facets/SseAnnotationFacetFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.extensions.sse.metamodel.facets; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -54,12 +53,10 @@ public void process(final ProcessMethodContext processMethodContext) { void processObserve(final ProcessMethodContext processMethodContext) { var facetHolder = processMethodContext.facetHolder(); - var serverSentEventsIfAny = processMethodContext.synthesizeOnMethod(ServerSentEvents.class); - FacetUtil.addFacetIfPresent( - SseObserveFacetForServerSentEventsAnnotation - .create(serverSentEventsIfAny, facetHolder)); + SseObserveFacetForServerSentEventsAnnotation + .create(serverSentEventsIfAny, facetHolder); } } diff --git a/persistence/jdbc/src/main/java/org/apache/causeway/persistence/jdbc/metamodel/JdbcEntityFacetFactory.java b/persistence/jdbc/src/main/java/org/apache/causeway/persistence/jdbc/metamodel/JdbcEntityFacetFactory.java index b64df92445b..31bca050d7d 100644 --- a/persistence/jdbc/src/main/java/org/apache/causeway/persistence/jdbc/metamodel/JdbcEntityFacetFactory.java +++ b/persistence/jdbc/src/main/java/org/apache/causeway/persistence/jdbc/metamodel/JdbcEntityFacetFactory.java @@ -37,9 +37,9 @@ public void process(final ProcessClassContext processClassContext) { var facetHolder = processClassContext.facetHolder(); var entityAnnotation = processClassContext.synthesizeOnType(Persistent.class); - if(!entityAnnotation.isPresent()) return; + if(!entityAnnotation.isPresent()) + return; - addFacet( - new JdbcEntityFacet(facetHolder, cls)); + new JdbcEntityFacet(facetHolder, cls); } } diff --git a/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacetFactory.java b/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacetFactory.java index 92dcf865b1c..b3447a33a3b 100644 --- a/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacetFactory.java +++ b/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacetFactory.java @@ -43,13 +43,14 @@ public void process(final ProcessClassContext processClassContext) { var facetHolder = processClassContext.facetHolder(); var entityIfAny = processClassContext.synthesizeOnType(Entity.class); - if(!entityIfAny.isPresent()) return; + if(!entityIfAny.isPresent()) + return; var embeddableIfAny = processClassContext.synthesizeOnType(Embeddable.class); - if(embeddableIfAny.isPresent()) return; // ignore when also has @Embeddable + if(embeddableIfAny.isPresent()) + return; // ignore when also has @Embeddable - addFacet( - new JpaEntityFacet(facetHolder, cls)); + new JpaEntityFacet(facetHolder, cls); } } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java index 3cebefb5329..c05e8e64072 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java @@ -22,10 +22,10 @@ import org.apache.causeway.core.metamodel.commons.ClassUtil; import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetedMethod; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; import org.apache.causeway.core.metamodel.spec.feature.MixedIn; import org.apache.causeway.persistence.commons.metamodel.facets.prop.column.BigDecimalFromXxxColumnAnnotationMetaModelRefinerUtil; @@ -52,20 +52,17 @@ public void process(final ProcessMethodContext processMethodContext) { var jpaColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class); - addFacetIfPresent( - MaxTotalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder)); + + MaxTotalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder); if(ClassUtil.isJavaBuiltInInteger(facetHolder.getFeatureIdentifier().logicalType().correspondingClass())) return; // skip fractional facets - addFacetIfPresent( - MaxFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder)); + MaxFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder); if (getConfiguration().valueTypes().bigDecimal().useScaleForMinFractionalFacet()) { - addFacetIfPresent( - MinFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder)); + MinFractionalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder); } - } @Override diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java index 5bf8c16c37f..6301a8266f5 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MandatoryFromJpaColumnAnnotationFacetFactory.java @@ -21,7 +21,6 @@ import java.util.Optional; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -45,7 +44,6 @@ public MandatoryFromJpaColumnAnnotationFacetFactory(final MetaModelContext mmc) @Override public void process(final ProcessMethodContext processMethodContext) { - final Optional nullable1 = processMethodContext.synthesizeOnMethod(JoinColumn.class) .map(JoinColumn::nullable); @@ -60,18 +58,15 @@ public void process(final ProcessMethodContext processMethodContext) { var semantics = Semantics.required(!nullable); var facetHolder = processMethodContext.facetHolder(); - FacetUtil.addFacet( - new MandatoryFacetFromJpaColumnAnnotation(semantics, facetHolder)); + new MandatoryFacetFromJpaColumnAnnotation(semantics, facetHolder); } @Override public void refineProgrammingModel(final ProgrammingModel programmingModel) { programmingModel.addValidatorSkipManagedBeans(objectSpec->{ - objectSpec .streamProperties(MixedIn.EXCLUDED) .forEach(MandatoryFromXxxColumnAnnotationMetaModelRefinerUtil::validateMandatoryFacet); - }); } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java index da4ded73726..bd84b2e843b 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxFractionalDigitsFacetFromJpaColumnAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.persistence.Column; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; -record MaxFractionalDigitsFacetFromJpaColumnAnnotation( - int maxFractionalDigits, - FacetHolder facetHolder) +import jakarta.persistence.Column; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxFractionalDigitsFacetFromJpaColumnAnnotation +extends FacetAbstract implements MaxFractionalDigitsFacet { static Optional create( @@ -39,7 +40,16 @@ static Optional create( .map(column-> new MaxFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), facetHolder)); } - @Override public Class facetType() { return MaxFractionalDigitsFacet.class; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxFractionalDigits; + + private MaxFractionalDigitsFacetFromJpaColumnAnnotation( + final int maxFractionalDigits, + final FacetHolder facetHolder) { + super(MaxFractionalDigitsFacet.class, facetHolder); + this.maxFractionalDigits = maxFractionalDigits; + } + @Override public Precedence precedence() { return Precedence.LOW; } // LOW so can be overridden via @ValueSemantics } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java index 0d441eadd3c..abebf248c60 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxLengthFromJpaColumnAnnotationFacetFactory.java @@ -19,7 +19,6 @@ package org.apache.causeway.persistence.jpa.metamodel.facets.prop.column; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; @@ -44,18 +43,15 @@ public void process(final ProcessMethodContext processMethodContext) { return; var facetHolder = processMethodContext.facetHolder(); - var jdoColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class); - FacetUtil.addFacetIfPresent( - MaxLengthFacetFromJpaColumnAnnotation - .create(jdoColumnIfAny, facetHolder)); + MaxLengthFacetFromJpaColumnAnnotation + .create(jdoColumnIfAny, facetHolder); } @Override public void refineProgrammingModel(final ProgrammingModel programmingModel) { programmingModel.addValidatorSkipManagedBeans(objectSpec->{ - objectSpec .streamProperties(MixedIn.EXCLUDED) .forEach(MaxLengthFromXxxColumnAnnotationMetaModelRefinerUtil::validateMaxLengthFacet); diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java index 436bbfdf83c..a3c1ceead85 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MaxTotalDigitsFacetFromJpaColumnAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.persistence.Column; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet; -record MaxTotalDigitsFacetFromJpaColumnAnnotation( - int maxTotalDigits, - FacetHolder facetHolder) +import jakarta.persistence.Column; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MaxTotalDigitsFacetFromJpaColumnAnnotation +extends FacetAbstract implements MaxTotalDigitsFacet { public static Optional create( @@ -41,7 +42,16 @@ public static Optional create( column.precision(), holder)); } - @Override public Class facetType() { return MaxTotalDigitsFacet.class; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int maxTotalDigits; + + private MaxTotalDigitsFacetFromJpaColumnAnnotation( + final int maxTotalDigits, + final FacetHolder facetHolder) { + super(MaxTotalDigitsFacet.class, facetHolder); + this.maxTotalDigits = maxTotalDigits; + } + @Override public Precedence precedence() { return Precedence.LOW; } // LOW so can be overridden via @ValueSemantics } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java index e2934801d47..0b33fb98b98 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/MinFractionalDigitsFacetFromJpaColumnAnnotation.java @@ -20,15 +20,16 @@ import java.util.Optional; -import jakarta.persistence.Column; - -import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet; -record MinFractionalDigitsFacetFromJpaColumnAnnotation( - int minFractionalDigits, - FacetHolder facetHolder) +import jakarta.persistence.Column; +import lombok.Getter; +import lombok.experimental.Accessors; + +final class MinFractionalDigitsFacetFromJpaColumnAnnotation +extends FacetAbstract implements MinFractionalDigitsFacet { static Optional create( @@ -39,7 +40,16 @@ static Optional create( .map(column-> new MinFractionalDigitsFacetFromJpaColumnAnnotation(column.scale(), holder)); } - @Override public Class facetType() { return MinFractionalDigitsFacet.class; } + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + private final int minFractionalDigits; + + private MinFractionalDigitsFacetFromJpaColumnAnnotation( + final int minFractionalDigits, + final FacetHolder facetHolder) { + super(MinFractionalDigitsFacet.class, facetHolder); + this.minFractionalDigits = minFractionalDigits; + } + @Override public Precedence precedence() { return Precedence.LOW; } // LOW so can be overridden via @ValueSemantics } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/transients/JpaTransientAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/transients/JpaTransientAnnotationFacetFactory.java index 73d951ee5ab..b7ab329d664 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/transients/JpaTransientAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/transients/JpaTransientAnnotationFacetFactory.java @@ -19,10 +19,8 @@ package org.apache.causeway.persistence.jpa.metamodel.facets.prop.transients; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import jakarta.inject.Inject; import jakarta.persistence.Transient; @@ -37,17 +35,12 @@ public JpaTransientAnnotationFacetFactory(final MetaModelContext mmc) { @Override public void process(final ProcessMethodContext processMethodContext) { - - //var cls = processMethodContext.getCls(); - final Transient annotation = processMethodContext.synthesizeOnMethod(Transient.class) .orElse(null); - if (annotation == null) return; - final FacetedMethod holder = processMethodContext.facetHolder(); - FacetUtil.addFacet(new JpaTransientAnnotationFacet(holder)); + new JpaTransientAnnotationFacet(processMethodContext.facetHolder()); } } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java index 71932bbbc22..2e418d988a1 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/object/table/JpaTableAnnotationFacetFactory.java @@ -20,7 +20,6 @@ import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.ObjectTypeFacetFactory; @@ -58,12 +57,10 @@ public void process(final ObjectTypeFacetFactory.ProcessObjectTypeContext proces } var facetHolder = processClassContext.facetHolder(); - - FacetUtil.addFacet( - new JpaTableFacetAnnotationImpl( - annotationSchemaAttribute, - annotationTableAttribute, - facetHolder)); + new JpaTableFacetAnnotationImpl( + annotationSchemaAttribute, + annotationTableAttribute, + facetHolder); } } diff --git a/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java b/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java index 601727bf408..de891c412b9 100644 --- a/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java +++ b/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java @@ -77,13 +77,12 @@ public void process(final ProcessClassContext processClassContext) { var queryDslSupport = queryDslSupport(); - addFacet(new AutoCompleteUsingQueryDslFacet( + new AutoCompleteUsingQueryDslFacet( processClassContext.cls(), processClassContext.facetHolder(), repositoryAdditionalPredicateObject, repositoryAdditionalPredicateMethod, limitResults, minLength, - queryDslSupport - )); + queryDslSupport); } @Override @@ -115,11 +114,7 @@ private void updateAutoCompleteQueryDslFacet( var autoCompleteUsingQueryDslFacet = Optional.ofNullable(declaringSpec.lookupFacet(AutoCompleteFacet.class).orElse(null)) .filter(AutoCompleteUsingQueryDslFacet.class::isInstance) .map(AutoCompleteUsingQueryDslFacet.class::cast) - .orElseGet(() -> { - var newFacet = new AutoCompleteUsingQueryDslFacet(declaringSpec.correspondingClass(), declaringSpec, null, null, null, null, queryDslSupport()); - declaringSpec.addFacet(newFacet); - return newFacet; - }); + .orElseGet(() -> new AutoCompleteUsingQueryDslFacet(declaringSpec.correspondingClass(), declaringSpec, null, null, null, null, queryDslSupport())); autoCompleteUsingQueryDslFacet.addSearchableProperty(propertyId, queryDslAutoCompletePolicy); } diff --git a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml index 8e6b0cad971..c4279acf4dc 100644 --- a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml +++ b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml @@ -116,7 +116,7 @@ - + @@ -208,7 +208,7 @@ - + @@ -315,7 +315,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -655,7 +655,7 @@ - + @@ -797,7 +797,7 @@ - + @@ -903,7 +903,7 @@ - + @@ -1009,7 +1009,7 @@ - + @@ -1192,7 +1192,7 @@ - + @@ -1333,7 +1333,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1553,7 +1553,7 @@ - + @@ -1660,7 +1660,7 @@ - + @@ -1795,7 +1795,7 @@ - + @@ -2000,7 +2000,7 @@ - + @@ -2157,7 +2157,7 @@ - + @@ -2265,7 +2265,7 @@ - + @@ -2371,7 +2371,7 @@ - + @@ -2477,7 +2477,7 @@ - + @@ -2660,7 +2660,7 @@ - + @@ -2801,7 +2801,7 @@ - + @@ -2922,7 +2922,7 @@ - + @@ -3078,7 +3078,7 @@ - + @@ -3213,7 +3213,7 @@ - + @@ -3418,7 +3418,7 @@ - + @@ -3560,7 +3560,7 @@ - + @@ -3666,7 +3666,7 @@ - + @@ -3772,7 +3772,7 @@ - + @@ -3955,7 +3955,7 @@ - + @@ -4096,7 +4096,7 @@ - + @@ -4194,7 +4194,7 @@ - + @@ -4282,7 +4282,7 @@ - + @@ -4295,7 +4295,7 @@ - + @@ -4307,7 +4307,7 @@ - + @@ -4361,7 +4361,7 @@ - + @@ -4496,7 +4496,7 @@ - + @@ -4701,7 +4701,7 @@ - + @@ -4843,7 +4843,7 @@ - + @@ -4949,7 +4949,7 @@ - + @@ -5055,7 +5055,7 @@ - + @@ -5238,7 +5238,7 @@ - + @@ -5379,7 +5379,7 @@ - + @@ -5485,7 +5485,7 @@ - + @@ -5512,7 +5512,7 @@ - + @@ -5693,7 +5693,7 @@ - + @@ -5797,7 +5797,7 @@ - + @@ -5885,7 +5885,7 @@ - + @@ -5898,12 +5898,12 @@ - + - + @@ -5957,7 +5957,7 @@ - + @@ -6092,7 +6092,7 @@ - + @@ -6297,7 +6297,7 @@ - + @@ -6439,7 +6439,7 @@ - + @@ -6545,7 +6545,7 @@ - + @@ -6651,7 +6651,7 @@ - + @@ -6834,7 +6834,7 @@ - + @@ -6975,7 +6975,7 @@ - + @@ -7081,7 +7081,7 @@ - + @@ -7108,7 +7108,7 @@ - + @@ -7295,7 +7295,7 @@ - + @@ -7405,7 +7405,7 @@ - + @@ -7493,7 +7493,7 @@ - + @@ -7506,12 +7506,12 @@ - + - + @@ -7691,7 +7691,7 @@ - + @@ -7826,7 +7826,7 @@ - + @@ -8031,7 +8031,7 @@ - + @@ -8173,7 +8173,7 @@ - + @@ -8279,7 +8279,7 @@ - + @@ -8385,7 +8385,7 @@ - + @@ -8568,7 +8568,7 @@ - + @@ -8709,7 +8709,7 @@ - + @@ -8807,7 +8807,7 @@ - + @@ -8895,7 +8895,7 @@ - + @@ -8908,7 +8908,7 @@ - + @@ -8920,7 +8920,7 @@ - + @@ -8954,7 +8954,7 @@ - + @@ -8967,7 +8967,7 @@ - + @@ -8979,7 +8979,7 @@ - + @@ -9013,7 +9013,7 @@ - + @@ -9026,7 +9026,7 @@ - + @@ -9038,7 +9038,7 @@ - + @@ -9072,7 +9072,7 @@ - + @@ -9085,7 +9085,7 @@ - + @@ -9097,7 +9097,7 @@ - + @@ -9131,7 +9131,7 @@ - + @@ -9144,7 +9144,7 @@ - + @@ -9156,7 +9156,7 @@ - + @@ -9190,7 +9190,7 @@ - + @@ -9203,7 +9203,7 @@ - + @@ -9215,7 +9215,7 @@ - + @@ -9249,7 +9249,7 @@ - + @@ -9262,7 +9262,7 @@ - + @@ -9274,7 +9274,7 @@ - + @@ -9308,7 +9308,7 @@ - + @@ -9321,7 +9321,7 @@ - + @@ -9333,7 +9333,7 @@ - + @@ -9367,7 +9367,7 @@ - + @@ -9380,7 +9380,7 @@ - + @@ -9392,7 +9392,7 @@ - + @@ -9426,7 +9426,7 @@ - + @@ -9439,7 +9439,7 @@ - + @@ -9451,7 +9451,7 @@ - + @@ -9520,7 +9520,7 @@ - + @@ -9617,7 +9617,7 @@ - + @@ -9752,7 +9752,7 @@ - + @@ -9957,7 +9957,7 @@ - + @@ -10099,7 +10099,7 @@ - + @@ -10205,7 +10205,7 @@ - + @@ -10311,7 +10311,7 @@ - + @@ -10494,7 +10494,7 @@ - + @@ -10635,7 +10635,7 @@ - + @@ -10739,7 +10739,7 @@ - + @@ -10852,7 +10852,7 @@ - + @@ -10876,12 +10876,12 @@ - + - + @@ -10955,7 +10955,7 @@ - + @@ -10972,7 +10972,7 @@ - + @@ -11026,7 +11026,7 @@ - + @@ -11161,7 +11161,7 @@ - + @@ -11366,7 +11366,7 @@ - + @@ -11508,7 +11508,7 @@ - + @@ -11614,7 +11614,7 @@ - + @@ -11720,7 +11720,7 @@ - + @@ -11903,7 +11903,7 @@ - + @@ -12044,7 +12044,7 @@ - + @@ -12230,7 +12230,7 @@ - + @@ -12310,13 +12310,13 @@ - + - + @@ -12335,12 +12335,12 @@ - + - + @@ -12419,7 +12419,7 @@ - + @@ -12554,7 +12554,7 @@ - + @@ -12759,7 +12759,7 @@ - + @@ -12901,7 +12901,7 @@ - + @@ -13007,7 +13007,7 @@ - + @@ -13113,7 +13113,7 @@ - + @@ -13296,7 +13296,7 @@ - + @@ -13437,7 +13437,7 @@ - + @@ -13558,7 +13558,7 @@ - + @@ -13645,7 +13645,7 @@ - + @@ -13725,13 +13725,13 @@ - + - + @@ -13750,12 +13750,12 @@ - + - + @@ -13834,7 +13834,7 @@ - + @@ -13969,7 +13969,7 @@ - + @@ -14174,7 +14174,7 @@ - + @@ -14316,7 +14316,7 @@ - + @@ -14422,7 +14422,7 @@ - + @@ -14528,7 +14528,7 @@ - + @@ -14711,7 +14711,7 @@ - + @@ -14852,7 +14852,7 @@ - + @@ -14973,7 +14973,7 @@ - + @@ -15060,7 +15060,7 @@ - + @@ -15160,7 +15160,7 @@ - + @@ -15184,7 +15184,7 @@ - + @@ -15195,7 +15195,7 @@ - + @@ -15274,7 +15274,7 @@ - + @@ -15409,7 +15409,7 @@ - + @@ -15614,7 +15614,7 @@ - + @@ -15756,7 +15756,7 @@ - + @@ -15862,7 +15862,7 @@ - + @@ -15968,7 +15968,7 @@ - + @@ -16151,7 +16151,7 @@ - + @@ -16292,7 +16292,7 @@ - + @@ -16396,7 +16396,7 @@ - + @@ -16509,7 +16509,7 @@ - + @@ -16533,12 +16533,12 @@ - + - + @@ -16603,7 +16603,7 @@ - + @@ -16627,12 +16627,12 @@ - + - + @@ -16706,7 +16706,7 @@ - + @@ -16723,7 +16723,7 @@ - + @@ -16777,7 +16777,7 @@ - + @@ -16912,7 +16912,7 @@ - + @@ -17117,7 +17117,7 @@ - + @@ -17259,7 +17259,7 @@ - + @@ -17365,7 +17365,7 @@ - + @@ -17471,7 +17471,7 @@ - + @@ -17654,7 +17654,7 @@ - + @@ -17795,7 +17795,7 @@ - + @@ -18069,7 +18069,7 @@ - + @@ -18183,7 +18183,7 @@ - + @@ -18207,12 +18207,12 @@ - + - + @@ -18266,7 +18266,7 @@ - + @@ -18290,12 +18290,12 @@ - + - + @@ -18369,7 +18369,7 @@ - + @@ -18386,7 +18386,7 @@ - + @@ -18440,7 +18440,7 @@ - + @@ -18575,7 +18575,7 @@ - + @@ -18780,7 +18780,7 @@ - + @@ -18922,7 +18922,7 @@ - + @@ -19028,7 +19028,7 @@ - + @@ -19134,7 +19134,7 @@ - + @@ -19317,7 +19317,7 @@ - + @@ -19458,7 +19458,7 @@ - + @@ -19849,7 +19849,7 @@ - + @@ -19972,7 +19972,7 @@ - + @@ -20032,7 +20032,7 @@ - + @@ -20167,7 +20167,7 @@ - + @@ -20372,7 +20372,7 @@ - + @@ -20514,7 +20514,7 @@ - + @@ -20620,7 +20620,7 @@ - + @@ -20726,7 +20726,7 @@ - + @@ -20909,7 +20909,7 @@ - + @@ -21050,7 +21050,7 @@ - + @@ -21148,7 +21148,7 @@ - + @@ -21275,7 +21275,7 @@ - + @@ -21335,7 +21335,7 @@ - + @@ -21470,7 +21470,7 @@ - + @@ -21675,7 +21675,7 @@ - + @@ -21817,7 +21817,7 @@ - + @@ -21923,7 +21923,7 @@ - + @@ -22029,7 +22029,7 @@ - + @@ -22212,7 +22212,7 @@ - + @@ -22353,7 +22353,7 @@ - + @@ -22451,7 +22451,7 @@ - + @@ -22578,7 +22578,7 @@ - + @@ -22638,7 +22638,7 @@ - + @@ -22773,7 +22773,7 @@ - + @@ -22978,7 +22978,7 @@ - + @@ -23120,7 +23120,7 @@ - + @@ -23226,7 +23226,7 @@ - + @@ -23332,7 +23332,7 @@ - + @@ -23515,7 +23515,7 @@ - + @@ -23656,7 +23656,7 @@ - + @@ -23754,7 +23754,7 @@ - + @@ -23862,7 +23862,7 @@ - + @@ -23886,12 +23886,12 @@ - + - + @@ -23972,7 +23972,7 @@ - + @@ -23996,7 +23996,7 @@ - + @@ -24013,7 +24013,7 @@ - + @@ -24085,7 +24085,7 @@ - + @@ -24135,7 +24135,7 @@ - + @@ -24164,7 +24164,7 @@ - + @@ -24229,7 +24229,7 @@ - + @@ -24279,7 +24279,7 @@ - + @@ -24308,7 +24308,7 @@ - + @@ -24373,7 +24373,7 @@ - + @@ -24409,7 +24409,7 @@ - + @@ -24438,7 +24438,7 @@ - + @@ -24491,7 +24491,7 @@ - + @@ -24521,7 +24521,7 @@ - + @@ -24568,7 +24568,7 @@ - + @@ -24626,7 +24626,7 @@ - + @@ -24656,7 +24656,7 @@ - + @@ -24703,7 +24703,7 @@ - + @@ -24761,7 +24761,7 @@ - + @@ -24784,7 +24784,7 @@ - + @@ -24817,7 +24817,7 @@ - + @@ -24868,7 +24868,7 @@ - + @@ -24899,7 +24899,7 @@ - + @@ -24953,7 +24953,7 @@ - + @@ -25187,7 +25187,7 @@ - + @@ -25235,7 +25235,7 @@ - + @@ -25415,7 +25415,7 @@ - + @@ -25463,7 +25463,7 @@ - + @@ -25657,7 +25657,7 @@ - + @@ -25705,7 +25705,7 @@ - + @@ -25899,7 +25899,7 @@ - + @@ -25933,7 +25933,7 @@ - + @@ -26005,7 +26005,7 @@ - + @@ -26229,7 +26229,7 @@ - + @@ -26364,7 +26364,7 @@ - + @@ -26569,7 +26569,7 @@ - + @@ -26726,7 +26726,7 @@ - + @@ -26786,7 +26786,7 @@ - + @@ -26892,7 +26892,7 @@ - + @@ -27042,7 +27042,7 @@ - + @@ -27244,7 +27244,7 @@ - + @@ -27345,7 +27345,7 @@ - + @@ -27451,7 +27451,7 @@ - + @@ -27634,7 +27634,7 @@ - + @@ -27775,7 +27775,7 @@ - + @@ -27873,7 +27873,7 @@ - + @@ -27986,13 +27986,13 @@ - + - + @@ -28011,12 +28011,12 @@ - + - + @@ -28105,7 +28105,7 @@ - + @@ -28132,12 +28132,12 @@ - + - + @@ -28191,7 +28191,7 @@ - + @@ -28326,7 +28326,7 @@ - + @@ -28531,7 +28531,7 @@ - + @@ -28673,7 +28673,7 @@ - + @@ -28779,7 +28779,7 @@ - + @@ -28885,7 +28885,7 @@ - + @@ -29068,7 +29068,7 @@ - + @@ -29255,7 +29255,7 @@ - + @@ -29441,7 +29441,7 @@ - + @@ -29539,7 +29539,7 @@ - + @@ -29652,13 +29652,13 @@ - + - + @@ -29677,12 +29677,12 @@ - + - + @@ -29771,7 +29771,7 @@ - + @@ -29798,12 +29798,12 @@ - + - + @@ -29857,7 +29857,7 @@ - + @@ -29992,7 +29992,7 @@ - + @@ -30197,7 +30197,7 @@ - + @@ -30339,7 +30339,7 @@ - + @@ -30445,7 +30445,7 @@ - + @@ -30551,7 +30551,7 @@ - + @@ -30734,7 +30734,7 @@ - + @@ -30925,7 +30925,7 @@ - + @@ -31111,7 +31111,7 @@ - + @@ -31209,7 +31209,7 @@ - + @@ -31322,13 +31322,13 @@ - + - + @@ -31347,12 +31347,12 @@ - + - + @@ -31441,7 +31441,7 @@ - + @@ -31468,12 +31468,12 @@ - + - + @@ -31527,7 +31527,7 @@ - + @@ -31662,7 +31662,7 @@ - + @@ -31867,7 +31867,7 @@ - + @@ -32009,7 +32009,7 @@ - + @@ -32115,7 +32115,7 @@ - + @@ -32221,7 +32221,7 @@ - + @@ -32404,7 +32404,7 @@ - + @@ -32595,7 +32595,7 @@ - + @@ -32781,7 +32781,7 @@ - + @@ -32978,7 +32978,7 @@ - + @@ -33303,7 +33303,7 @@ - + @@ -33617,7 +33617,7 @@ - + @@ -33945,7 +33945,7 @@ - + @@ -34273,7 +34273,7 @@ - + @@ -34465,7 +34465,7 @@ - + @@ -34783,7 +34783,7 @@ - + @@ -35005,7 +35005,7 @@ - + @@ -35227,7 +35227,7 @@ - + @@ -35421,7 +35421,7 @@ - + @@ -35652,7 +35652,7 @@ - + @@ -35883,7 +35883,7 @@ - + @@ -35984,7 +35984,7 @@ - + @@ -36091,7 +36091,7 @@ - + @@ -36118,7 +36118,7 @@ - + @@ -36178,7 +36178,7 @@ - + @@ -36205,7 +36205,7 @@ - + @@ -36265,7 +36265,7 @@ - + @@ -36292,7 +36292,7 @@ - + @@ -36352,7 +36352,7 @@ - + @@ -36379,7 +36379,7 @@ - + @@ -36439,7 +36439,7 @@ - + @@ -36466,7 +36466,7 @@ - + @@ -36526,7 +36526,7 @@ - + @@ -36553,7 +36553,7 @@ - + @@ -36613,7 +36613,7 @@ - + @@ -36640,7 +36640,7 @@ - + @@ -36700,7 +36700,7 @@ - + @@ -36727,7 +36727,7 @@ - + @@ -36787,7 +36787,7 @@ - + @@ -36814,7 +36814,7 @@ - + @@ -36874,7 +36874,7 @@ - + @@ -36901,7 +36901,7 @@ - + @@ -36961,7 +36961,7 @@ - + @@ -37096,7 +37096,7 @@ - + @@ -37301,7 +37301,7 @@ - + @@ -37443,7 +37443,7 @@ - + @@ -37564,7 +37564,7 @@ - + @@ -37681,7 +37681,7 @@ - + @@ -37787,7 +37787,7 @@ - + @@ -37970,7 +37970,7 @@ - + @@ -38111,7 +38111,7 @@ - + @@ -38313,7 +38313,7 @@ - + @@ -38491,7 +38491,7 @@ - + @@ -38669,7 +38669,7 @@ - + @@ -38847,7 +38847,7 @@ - + @@ -39025,7 +39025,7 @@ - + @@ -39203,7 +39203,7 @@ - + @@ -39381,7 +39381,7 @@ - + @@ -39559,7 +39559,7 @@ - + @@ -39812,7 +39812,7 @@ - + @@ -40203,7 +40203,7 @@ - + @@ -40277,7 +40277,7 @@ - + @@ -40399,7 +40399,7 @@ - + @@ -40661,7 +40661,7 @@ - + @@ -40796,7 +40796,7 @@ - + @@ -41001,7 +41001,7 @@ - + @@ -41143,7 +41143,7 @@ - + @@ -41249,7 +41249,7 @@ - + @@ -41355,7 +41355,7 @@ - + @@ -41538,7 +41538,7 @@ - + @@ -41679,7 +41679,7 @@ - + @@ -41777,7 +41777,7 @@ - + @@ -41884,7 +41884,7 @@ - + @@ -42019,7 +42019,7 @@ - + @@ -42224,7 +42224,7 @@ - + @@ -42381,7 +42381,7 @@ - + @@ -42441,7 +42441,7 @@ - + @@ -42547,7 +42547,7 @@ - + @@ -42653,7 +42653,7 @@ - + @@ -42836,7 +42836,7 @@ - + @@ -42977,7 +42977,7 @@ - + @@ -43075,7 +43075,7 @@ - + @@ -43155,13 +43155,13 @@ - + - + @@ -43180,12 +43180,12 @@ - + - + @@ -43286,7 +43286,7 @@ - + @@ -43346,7 +43346,7 @@ - + @@ -43481,7 +43481,7 @@ - + @@ -43686,7 +43686,7 @@ - + @@ -43828,7 +43828,7 @@ - + @@ -43934,7 +43934,7 @@ - + @@ -44040,7 +44040,7 @@ - + @@ -44223,7 +44223,7 @@ - + @@ -44364,7 +44364,7 @@ - + @@ -44462,7 +44462,7 @@ - + @@ -44561,13 +44561,13 @@ - + - + @@ -44586,12 +44586,12 @@ - + - + @@ -44639,13 +44639,13 @@ - + - + @@ -44664,7 +44664,7 @@ - + @@ -44675,7 +44675,7 @@ - + @@ -44728,13 +44728,13 @@ - + - + @@ -44753,7 +44753,7 @@ - + @@ -44764,7 +44764,7 @@ - + @@ -44817,13 +44817,13 @@ - + - + @@ -44842,12 +44842,12 @@ - + - + @@ -44895,13 +44895,13 @@ - + - + @@ -44920,12 +44920,12 @@ - + - + @@ -44973,13 +44973,13 @@ - + - + @@ -44998,12 +44998,12 @@ - + - + @@ -45071,7 +45071,7 @@ - + @@ -45206,7 +45206,7 @@ - + @@ -45411,7 +45411,7 @@ - + @@ -45553,7 +45553,7 @@ - + @@ -45659,7 +45659,7 @@ - + @@ -45765,7 +45765,7 @@ - + @@ -45948,7 +45948,7 @@ - + @@ -46089,7 +46089,7 @@ - + @@ -46187,7 +46187,7 @@ - + @@ -46286,13 +46286,13 @@ - + - + @@ -46311,12 +46311,12 @@ - + - + @@ -46364,13 +46364,13 @@ - + - + @@ -46389,7 +46389,7 @@ - + @@ -46400,7 +46400,7 @@ - + @@ -46453,13 +46453,13 @@ - + - + @@ -46478,7 +46478,7 @@ - + @@ -46489,7 +46489,7 @@ - + @@ -46542,13 +46542,13 @@ - + - + @@ -46567,12 +46567,12 @@ - + - + @@ -46620,13 +46620,13 @@ - + - + @@ -46645,12 +46645,12 @@ - + - + @@ -46718,7 +46718,7 @@ - + @@ -46853,7 +46853,7 @@ - + @@ -47058,7 +47058,7 @@ - + @@ -47200,7 +47200,7 @@ - + @@ -47306,7 +47306,7 @@ - + @@ -47412,7 +47412,7 @@ - + @@ -47595,7 +47595,7 @@ - + @@ -47736,7 +47736,7 @@ - + @@ -47834,7 +47834,7 @@ - + @@ -47933,13 +47933,13 @@ - + - + @@ -47958,12 +47958,12 @@ - + - + @@ -48011,13 +48011,13 @@ - + - + @@ -48036,7 +48036,7 @@ - + @@ -48047,7 +48047,7 @@ - + @@ -48100,13 +48100,13 @@ - + - + @@ -48125,7 +48125,7 @@ - + @@ -48136,7 +48136,7 @@ - + @@ -48189,13 +48189,13 @@ - + - + @@ -48214,12 +48214,12 @@ - + - + @@ -48267,13 +48267,13 @@ - + - + @@ -48292,12 +48292,12 @@ - + - + @@ -48365,7 +48365,7 @@ - + @@ -48500,7 +48500,7 @@ - + @@ -48705,7 +48705,7 @@ - + @@ -48847,7 +48847,7 @@ - + @@ -48953,7 +48953,7 @@ - + @@ -49059,7 +49059,7 @@ - + @@ -49242,7 +49242,7 @@ - + @@ -49383,7 +49383,7 @@ - + @@ -49580,7 +49580,7 @@ - + @@ -49654,7 +49654,7 @@ - + @@ -49765,13 +49765,13 @@ - + - + @@ -49804,12 +49804,12 @@ - + - + @@ -49869,7 +49869,7 @@ - + @@ -49889,7 +49889,7 @@ - + @@ -49908,7 +49908,7 @@ - + @@ -49962,7 +49962,7 @@ - + @@ -50097,7 +50097,7 @@ - + @@ -50302,7 +50302,7 @@ - + @@ -50444,7 +50444,7 @@ - + @@ -50572,7 +50572,7 @@ - + @@ -50646,7 +50646,7 @@ - + @@ -50752,7 +50752,7 @@ - + @@ -50935,7 +50935,7 @@ - + @@ -51076,7 +51076,7 @@ - + @@ -51174,7 +51174,7 @@ - + @@ -51266,13 +51266,13 @@ - + - + @@ -51291,12 +51291,12 @@ - + - + @@ -51356,7 +51356,7 @@ - + @@ -51376,12 +51376,12 @@ - + - + @@ -51435,7 +51435,7 @@ - + @@ -51570,7 +51570,7 @@ - + @@ -51775,7 +51775,7 @@ - + @@ -51917,7 +51917,7 @@ - + @@ -52045,7 +52045,7 @@ - + @@ -52105,7 +52105,7 @@ - + @@ -52211,7 +52211,7 @@ - + @@ -52394,7 +52394,7 @@ - + @@ -52535,7 +52535,7 @@ - + From 45901cc1400fdc9725cf87f198297de5c7c750b8 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Fri, 21 Aug 2026 08:16:49 +0200 Subject: [PATCH 2/3] CAUSEWAY-4044: java-doc and working on deprecations --- .../applib/layout/component/FieldSet.java | 1 - .../services/repository/EntityState.java | 8 +++----- .../semantics/TemporalValueSemantics.java | 1 - .../commons/internal/base/_Bytes.java | 1 - .../commons/internal/collections/_Sets.java | 1 - .../beans/CausewayComponentCollector.java | 1 - .../CausewayObservationIntegration.java | 1 - .../metamodel/execution/ExecutionContext.java | 3 +-- .../core/metamodel/facetapi/FacetHolder.java | 1 - .../facetapi/FacetHolderInternal.java | 5 +++++ .../facetapi/FacetHolderLayered.java | 3 ++- .../metamodel/facetapi/FacetHolderSimple.java | 7 +++---- .../core/metamodel/facetapi/FacetRank.java | 7 ++++++- .../core/metamodel/facetapi/FacetRanking.java | 7 ++++++- .../facetapi/FacetedMethodParameter.java | 3 +-- .../metamodel/facetapi/TypedFacetRanking.java | 7 ++++++- .../core/metamodel/facetapi/_BindUtil.java | 5 +++++ .../layout/CollectionLayoutFacetFactory.java | 2 -- .../object/mixin/MixinConstructorFinder.java | 1 - .../facets/object/mixin/MixinFacetImpl.java | 1 - .../navchild/NavigableSubtreeFacet.java | 3 +-- .../digits/MaxTotalDigitsFacet.java | 1 - .../ValueSemanticsAnnotationFacetFactory.java | 1 - .../metamodel/object/ManagedObjectEntity.java | 9 ++++++--- .../feature/ObjectAssociationContainer.java | 1 - .../spec/impl/SpecificationLoaderDefault.java | 2 -- .../spec/impl/_MembersAsColumns.java | 1 - .../IdentifierValueSemantics.java | 1 - ...omainObjectAnnotationFacetFactoryTest.java | 1 - .../core/runtimeservices/ia/_Observation.java | 1 - .../applib/dom/replay/ReplayableCommand.java | 5 ----- .../sessionlog/jpa/dom/SessionLogEntry.java | 1 - ...alFromJpaColumnAnnotationFacetFactory.java | 1 - .../jpa/services/support/DslQueryJpa.java | 6 ++++-- .../applib/LinkRepresentation.java | 1 - .../attributes/temporal/DateTimeConfig.java | 1 + .../temporal/TextFieldWithDateTimePicker.java | 20 +++++++++---------- .../components/layout/bs/tabs/TabPanel.java | 2 -- 38 files changed, 59 insertions(+), 65 deletions(-) diff --git a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java index c73280f8161..5a4b7963e85 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java @@ -65,7 +65,6 @@ public FieldSet(final String name) { @Getter @Setter private String id; - /** * Whether this fieldset should be used to hold any unreferenced actions (contributed or "native"). * diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java index a6537202965..a6ca88f63e9 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/services/repository/EntityState.java @@ -66,11 +66,10 @@ public enum EntityState { */ TRANSIENT_OR_REMOVED(false), /** - * @deprecated - This entity state is no longer in use; was specific to JDO/DataNucleus object store, now retired. + * Set by the framework after entity removal. + *

However, detecting an entity's state in the JPA context will never yield {@link #REMOVED}. */ - @Deprecated // JDO specific - REMOVED(false) - ; + REMOVED(false); // -- PREDICATES @@ -89,7 +88,6 @@ public enum EntityState { public boolean isTransientOrRemoved() { return this == TRANSIENT_OR_REMOVED || this == REMOVED; } /** @see #REMOVED */ - @Deprecated // JDO specific public boolean isRemoved() { return this == REMOVED; } // -- SPECIAL STATES diff --git a/api/applib/src/main/java/org/apache/causeway/applib/value/semantics/TemporalValueSemantics.java b/api/applib/src/main/java/org/apache/causeway/applib/value/semantics/TemporalValueSemantics.java index ccb1115c092..cd834e4f1f7 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/value/semantics/TemporalValueSemantics.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/value/semantics/TemporalValueSemantics.java @@ -345,5 +345,4 @@ default DateTimeFormatter getTemporalIsoFormat( }; } - } diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Bytes.java b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Bytes.java index ee7b6bcd05c..5a489361266 100644 --- a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Bytes.java +++ b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Bytes.java @@ -409,7 +409,6 @@ public static BytesOperator operator() { .andThen(bytes->decodeBase64(Base64.getDecoder(), bytes)) .andThen(_Bytes::decompress); - // -- EXTERNAL FORMAT public static byte[] fromInts(final int[] ints) { diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/collections/_Sets.java b/commons/src/main/java/org/apache/causeway/commons/internal/collections/_Sets.java index 406909ccc33..53a7a0fe93f 100644 --- a/commons/src/main/java/org/apache/causeway/commons/internal/collections/_Sets.java +++ b/commons/src/main/java/org/apache/causeway/commons/internal/collections/_Sets.java @@ -149,7 +149,6 @@ public static HashSet newHashSet(final @Nullable Iterable iterable) { // -- LINKED HASH SET - public static LinkedHashSet newLinkedHashSet(final @Nullable Collection collection) { if(collection==null) return new LinkedHashSet<>(); diff --git a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayComponentCollector.java b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayComponentCollector.java index a1539ceaef8..a38f25f8e70 100644 --- a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayComponentCollector.java +++ b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayComponentCollector.java @@ -93,7 +93,6 @@ private void collect(final String beanDefinitionName) { } } - /** * Allows for the given type-meta to be modified before bean-definition registration * is finalized by Spring, immediately after the type-scan phase. diff --git a/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationIntegration.java b/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationIntegration.java index c2228ca28f0..17eb4d1720c 100644 --- a/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationIntegration.java +++ b/core/config/src/main/java/org/apache/causeway/core/config/observation/CausewayObservationIntegration.java @@ -146,7 +146,6 @@ public static void discard(@Nullable final Observation obs) { ObservationClosure.discard(obs); } - //TODO perhaps threshold should not be hardcoded at call site; what we really want is to report Observations // that are way off a base-line; this would require some profiling to establish base-lines public record ObservationWithTimeThreshold(Observation delegate, Duration threshold, Timer timer) implements Observation { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ExecutionContext.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ExecutionContext.java index 9988f18a36d..212b8448471 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ExecutionContext.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/ExecutionContext.java @@ -48,7 +48,6 @@ public record ExecutionContext( MetamodelEventService metamodelEventService, QueryResultsCache queryResultsCache) { - public CommandPublisher commandPublisher() { return commandPublisherProvider.get(); } @@ -72,4 +71,4 @@ public ObservationProvider observationProvider(final Class participant, final : __->Observation.NOOP; } -} \ No newline at end of file +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java index bcbe4c0ab30..b01f2d23774 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java @@ -69,7 +69,6 @@ public static FacetHolder forTesting(final MetaModelContext mmc) { int getFacetCount(); - // -- FACET LOOKUP Optional lookupFacet(final @NonNull Class facetType); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java index 3e8dfbc24c6..2ca09c5bd8b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java @@ -33,6 +33,11 @@ interface FacetHolderInternal extends FacetHolder { */ void addFacet(@Nullable Facet facet); + /** + * @deprecated Use for debugging only! Breaks the contract, that every facet is contained by its holder. + * @throws {@link IllegalArgumentException} when facet is not found, or facet is of EVENT precedence. + */ + @Deprecated void removeFacet(@Nullable Facet facet); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java index 481422592d8..057759a3f71 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderLayered.java @@ -76,7 +76,8 @@ public void addFacet(final @Nullable Facet facet) { .addFacet(facet); } - @Override + @SuppressWarnings("deprecation") + @Override public void removeFacet(@Nullable final Facet facet) { if(facet==null) return; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java index ca49533399e..16164ef8edc 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderSimple.java @@ -68,14 +68,13 @@ public void addFacet(final @Nullable Facet facet) { .add(facet); } - @Override + @SuppressWarnings("deprecation") + @Override public void removeFacet(@Nullable final Facet facet) { if(facet==null) return; lookupFacetRanking(facet.facetType()) - .ifPresent(ranking->{ - ranking.remove(facet); - }); + .ifPresent(ranking->ranking.remove(facet)); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java index 774221b1617..ac8c04029ae 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRank.java @@ -70,7 +70,12 @@ FacetRank add(final @Nullable F facet) { return this; } - public void remove(final F facet) { + /** + * @deprecated Use for debugging only! Breaks the contract, that every facet is contained by its holder. + * @throws {@link IllegalArgumentException} when facet is not found, or facet is of EVENT precedence. + */ + @Deprecated + public void remove(final F facet) { if(facet==null) return; // no-op diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java index fb6f180bfa6..868fce0f0fb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetRanking.java @@ -48,7 +48,12 @@ public void add(final F facet) { delegate(facet).add(facet); } - public void remove(final F facet) { + /** + * @deprecated Use for debugging only! Breaks the contract, that every facet is contained by its holder. + * @throws {@link IllegalArgumentException} when facet is not found, or facet is of EVENT precedence. + */ + @Deprecated + public void remove(final F facet) { delegate(facet).remove(facet); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java index 0b7e51bfd57..525497715d8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetedMethodParameter.java @@ -57,5 +57,4 @@ public String toString() { return resolvedType.toString(); } - -} \ No newline at end of file +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java index 8af0d71a6a1..eb53db1aa47 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/TypedFacetRanking.java @@ -111,6 +111,11 @@ public void addAll(final @NonNull TypedFacetRanking facetRanking) { .forEach(this::add)); } + /** + * @deprecated Use for debugging only! Breaks the contract, that every facet is contained by its holder. + * @throws {@link IllegalArgumentException} when facet is not found, or facet is of EVENT precedence. + */ + @Deprecated public void remove(final F facet) { if(facet == null) return; @@ -118,7 +123,7 @@ public void remove(final F facet) { var facetPrecedence = Objects.requireNonNull(facet.precedence(), ()->String.format("facet %s declares no precedence", facet.getClass())); if(facetPrecedence.ordinal()>=Facet.Precedence.EVENT.ordinal()) - throw new UnsupportedOperationException(); + throw new IllegalArgumentException("removal of facet with EVENT precedence is not supported"); ranksByPrecedence.get(facetPrecedence) .remove(facet); nonEventWinnerCache.clear(); // for simplicity invalidate the entire cache diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java index 418ef6ffd0c..4063ac5ff03 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java @@ -55,6 +55,11 @@ Optional resolveInternal(final @Nullable FacetHolder facetH return Optional.empty(); } + /** + * @deprecated Use for debugging only! Breaks the contract, that every facet is contained by its holder. + * @throws {@link IllegalArgumentException} when facet is not found, or facet is of EVENT precedence. + */ + @Deprecated void unbind(@Nullable final Facet facet) { resolveInternalElseFail(facet.facetHolder()) .removeFacet(facet); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java index e03416edfb4..676d8118c17 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java @@ -48,7 +48,6 @@ public void process(final ProcessMethodContext processMethodContext) { () -> ValidationFailureUtils .raiseAmbiguousMixinAnnotations(processMethodContext.facetHolder(), CollectionLayout.class)); - CssClassFacetForCollectionLayoutAnnotation .create(collectionLayoutIfAny, facetHolder); @@ -59,7 +58,6 @@ public void process(final ProcessMethodContext processMethodContext) { MemberDescribedFacetForCollectionLayoutAnnotation .create(collectionLayoutIfAny, facetHolder); - HiddenFacetForCollectionLayoutAnnotation .create(collectionLayoutIfAny, facetHolder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinConstructorFinder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinConstructorFinder.java index 93bece653bc..8058fcd50f1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinConstructorFinder.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinConstructorFinder.java @@ -113,5 +113,4 @@ private Optional findConstructorsMultiArgSupported(final Cl : publicConstructors.getSingleton(); } - } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java index 91dd7418d46..36ebfd72428 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/mixin/MixinFacetImpl.java @@ -144,7 +144,6 @@ public Object instantiate(final Object mixee) { } } - @Override public boolean isCandidateForMain(final ResolvedMethod method) { /* include methods from super classes or interfaces diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java index 03cb6d52381..418e48e5cdf 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/navchild/NavigableSubtreeFacet.java @@ -59,7 +59,6 @@ static Optional create( return Optional.of(new NavigableSubtreeFacet(subNodesMethodHandles, facetHolder)); } - private final Can subNodesMethodHandles; NavigableSubtreeFacet( @@ -102,4 +101,4 @@ public void visitAttributes(final BiConsumer visitor) { visitor.accept("subNodesMethodHandles", subNodesMethodHandles.map(MethodHandle::toString)); } -} \ No newline at end of file +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java index 6e1a6dffcaa..0cc6c637536 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/objectvalue/digits/MaxTotalDigitsFacet.java @@ -58,7 +58,6 @@ public interface MaxTotalDigitsFacet */ int maxTotalDigits(); - @Override default boolean semanticEquals(final @NonNull Facet facet) { return facet instanceof MaxTotalDigitsFacet other diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java index cd578d79518..760cbabfb99 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java @@ -139,7 +139,6 @@ private void processTemporalFormat( final TypedFacetHolder facetHolder, final Optional valueSemanticsIfAny){ - DateFormatStyleFacetFromValueSemanticsAnnotation .create(valueSemanticsIfAny, facetHolder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntity.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntity.java index 47327b83041..420fec694d6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntity.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntity.java @@ -79,9 +79,12 @@ private static Optional transitionAdvice(final PhaseState previous, case TRANSIENT->{ var stayTransient = !entityState.isRemoved() && !entityState.isAttached(); - if(stayTransient){yield Optional.empty();} - if(entityState.hasOid()){yield Optional.of(PhaseState.BOOKMARKED);} - if(entityState.isTransientOrRemoved()){yield Optional.of(PhaseState.REMOVED);} + if(stayTransient) + yield Optional.empty(); + if(entityState.hasOid()) + yield Optional.of(PhaseState.BOOKMARKED); + if(entityState.isTransientOrRemoved()) + yield Optional.of(PhaseState.REMOVED); yield Optional.empty(); } case BOOKMARKED->entityState.isTransientOrRemoved() diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociationContainer.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociationContainer.java index 8c06e778b68..81a10533805 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociationContainer.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAssociationContainer.java @@ -133,7 +133,6 @@ default Stream streamCollections(final MixedIn mixedIn){ .map(OneToManyAssociation.class::cast); } - /** * Bundles parameters to query for Properties and Collections visible as columns. * diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java index 0ed3fc2959a..af47a60c199 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/SpecificationLoaderDefault.java @@ -328,7 +328,6 @@ public void createMetaModel() { // that is currently we evict the spec from the cache but the Spec reference must stay constant throw _Exceptions.illegalState("brokenSpecCount=%d", brokenSpecCount); - introspectAndLog("domain services", specs.domainServiceSpecs, IntrospectionRequest.FULL); //TODO no mixins required either introspectAndLog("entities (%s)".formatted(causewayBeanTypeRegistry.persistenceStack().name()), specs.entitySpecs(), IntrospectionRequest.FULL); @@ -375,7 +374,6 @@ public void createMetaModel() { log.info("\n{}", Profiler.getInstance()); } - @Override public Optional getValidationResult() { return validationResult.getMemoized(); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_MembersAsColumns.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_MembersAsColumns.java index be46a5ba69c..93c72bd928a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_MembersAsColumns.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/_MembersAsColumns.java @@ -160,7 +160,6 @@ private Optional> propertyIdComparator( .thenComparing(Comparator.naturalOrder())); } - /** * @return whether a column-order patch was found and applied */ diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdentifierValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdentifierValueSemantics.java index 4845900471a..ada1a265f6f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdentifierValueSemantics.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdentifierValueSemantics.java @@ -120,7 +120,6 @@ private String iconify(final Identifier identifier) { return faIconAndTitle(faLayers, toMonospace(identifier.getFullIdentityString())); } - @Override public Can getExamples() { return Can.of( diff --git a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java index 9ac658e67d5..601e45b1e74 100644 --- a/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java +++ b/core/mmtest/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java @@ -419,7 +419,6 @@ public void whenNoDomainObjectAnnotation() { } } - @DomainObject(editing = org.apache.causeway.applib.annotation.Editing.AS_CONFIGURED) static class CustomerWithDomainObjectAndEditingSetToAsConfigured { } diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/ia/_Observation.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/ia/_Observation.java index 2d464c58992..6b8341fff1c 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/ia/_Observation.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/ia/_Observation.java @@ -57,7 +57,6 @@ void addTags(final Observation obs, final InteractionContext ic, final int depth _Strings.nonEmpty(ic.getUser().name()) .ifPresent(value->obs.highCardinalityKeyValue(userName(value))); - } } diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java index 527a76813ed..f7f320df69b 100644 --- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java +++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java @@ -98,7 +98,6 @@ public static abstract class ActionDomainEvent private final ReplayableCommandParticipantTracker participantTracker; - private final ObjectReference recordRef; @Programmatic public ObjectReference recordRef() { return recordRef; } @@ -460,7 +459,6 @@ private Optional adjacent(final boolean forward) { .map(entry -> new ReplayableCommand(entry.getInteractionId(), replayContext)); } - ReplayableCommand makeExportable() { if(disableMakeExportable()!=null) return this; // safeguard when called programmatically @@ -480,7 +478,6 @@ String disableMakeExportable() { : "Cannot make exportable, if not EXPORTED"; } - ReplayableCommand excludeFromReplay() { if(disableExcludeFromReplay()!=null) return ReplayableCommand.this; // safeguard when called programmatically @@ -500,7 +497,6 @@ String disableExcludeFromReplay() { : "Cannot mark for exclusion, if neither PENDING nor FAILED"; } - @Programmatic void deleteObj() { commandLogEntry() @@ -510,7 +506,6 @@ void deleteObj() { }); } - // -- EXECUTION ORDER GOVERNED BY TIMESTAMP private static final Comparator TIMESTAMP_COMPARATOR = diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/sessionlog/jpa/dom/SessionLogEntry.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/sessionlog/jpa/dom/SessionLogEntry.java index 5c09242f93a..11a0635d926 100644 --- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/sessionlog/jpa/dom/SessionLogEntry.java +++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/sessionlog/jpa/dom/SessionLogEntry.java @@ -201,5 +201,4 @@ public String toString() { return CONTRACT.toString(SessionLogEntry.this); } - } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java index c05e8e64072..fd3ffa1d88b 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/causeway/persistence/jpa/metamodel/facets/prop/column/BigDecimalFromJpaColumnAnnotationFacetFactory.java @@ -52,7 +52,6 @@ public void process(final ProcessMethodContext processMethodContext) { var jpaColumnIfAny = processMethodContext.synthesizeOnMethod(Column.class); - MaxTotalDigitsFacetFromJpaColumnAnnotation.create(jpaColumnIfAny, facetHolder); if(ClassUtil.isJavaBuiltInInteger(facetHolder.getFeatureIdentifier().logicalType().correspondingClass())) diff --git a/persistence/querydsl/jpa/src/main/java/org/apache/causeway/persistence/querydsl/jpa/services/support/DslQueryJpa.java b/persistence/querydsl/jpa/src/main/java/org/apache/causeway/persistence/querydsl/jpa/services/support/DslQueryJpa.java index 334929f12b6..db22f391267 100644 --- a/persistence/querydsl/jpa/src/main/java/org/apache/causeway/persistence/querydsl/jpa/services/support/DslQueryJpa.java +++ b/persistence/querydsl/jpa/src/main/java/org/apache/causeway/persistence/querydsl/jpa/services/support/DslQueryJpa.java @@ -102,12 +102,14 @@ public CloseableIterator iterate() { return jpaQuery.iterate(); } - @Override + @SuppressWarnings("deprecation") // it seems, nothing we can do about this deprecation, hence suppress + @Override public QueryResults fetchResults() { return jpaQuery.fetchResults(); } - @Override + @SuppressWarnings("deprecation") // it seems, nothing we can do about this deprecation, hence suppress + @Override public long fetchCount() { return jpaQuery.fetchCount(); } diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java index 61d7f2e1dc4..32017581b85 100644 --- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java +++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java @@ -150,5 +150,4 @@ private static String stringValue(JsonNode node) { return node.stringValue(); } - } diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java index d58659af8bc..8be4ccf01fb 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java @@ -37,6 +37,7 @@ * JavaScript widget * @see DatetimePickerConfig */ +@SuppressWarnings("deprecation") // it seems, nothing we can do about deprecations, hence suppress public class DateTimeConfig extends AbstractConfig { private static final long serialVersionUID = 1L; diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/TextFieldWithDateTimePicker.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/TextFieldWithDateTimePicker.java index 0908c09658d..989ad50f54c 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/TextFieldWithDateTimePicker.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/TextFieldWithDateTimePicker.java @@ -24,17 +24,16 @@ import java.util.Map; import java.util.Optional; +import org.apache.causeway.applib.locale.UserLocale; +import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.viewer.wicket.ui.components.text.TextFieldWithConverter; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.model.IModel; import org.apache.wicket.util.convert.IConverter; - -import org.apache.causeway.applib.locale.UserLocale; -import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.viewer.wicket.ui.components.text.TextFieldWithConverter; - import org.jspecify.annotations.NonNull; + import de.agilecoders.wicket.core.util.Attributes; import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerConfig; import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerIconConfig; @@ -102,9 +101,8 @@ public String convertToString(final T value, final Locale locale) { protected void onComponentTag(final ComponentTag tag) { super.onComponentTag(tag); - if(!isEnabled()) { - return; - } + if(!isEnabled()) + return; checkComponentTag(tag, "input"); Attributes.addClass(tag, "datetimepicker-input"); @@ -118,9 +116,8 @@ protected void onComponentTag(final ComponentTag tag) { public void renderHead(final IHeaderResponse response) { super.renderHead(response); - if(!isEnabled()) { - return; - } + if(!isEnabled()) + return; response.render(DatetimePickerCssReference.asHeaderItem()); response.render(DatetimePickerJsReference.asHeaderItem()); @@ -129,6 +126,7 @@ public void renderHead(final IHeaderResponse response) { // -- HELPER + @SuppressWarnings("deprecation") // it seems, nothing we can do about deprecations, hence suppress private DateTimeConfig createDatePickerConfig( final String temporalPattern, final boolean isInputNullable) { diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/tabs/TabPanel.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/tabs/TabPanel.java index 182201c47ab..820be6e65e6 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/tabs/TabPanel.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/tabs/TabPanel.java @@ -104,6 +104,4 @@ public static RepeatingViewWithDynamicallyVisibleContent newRows(final UiObjectW return rv; } - - } From baecbabe5d8ab1253e02ac37de95609bcdbb36e4 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Fri, 21 Aug 2026 10:29:18 +0200 Subject: [PATCH 3/3] CAUSEWAY-4044: drive facet reloading support by type don't leak this functionality via API --- .../metamodel/facetapi/FacetAbstract.java | 33 ++- .../core/metamodel/facetapi/FacetUtil.java | 49 +---- .../metamodel/facetapi/QualifiedFacet.java | 8 +- .../metamodel/facetapi/ReloadableFacet.java | 48 +++++ .../core/metamodel/facetapi/_BindUtil.java | 37 ++++ .../layout/CssClassFacetForMenuBarXml.java | 8 +- .../actions/layout/FaFacetForMenuBarXml.java | 8 +- .../MemberDescribedFacetForMenuBarXml.java | 8 +- .../layout/MemberNamedFacetForMenuBarXml.java | 12 +- ...emberNamedFacetForCollectionLayoutXml.java | 15 +- .../SortedByFacetForCollectionLayoutXml.java | 2 +- .../order/LayoutOrderFacetForLayoutXml.java | 5 +- .../MemberNamedFacetForPropertyLayoutXml.java | 13 +- .../UnchangingFacetForPropertyLayoutXml.java | 2 +- .../XmlLayoutRespectingFacetInstaller.java | 194 +++++++----------- .../bootstrap/MenuBarsServiceBootstrap.java | 49 ++--- 16 files changed, 250 insertions(+), 241 deletions(-) create mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/ReloadableFacet.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java index 61b84be4ba5..eb8104a23db 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetAbstract.java @@ -18,6 +18,8 @@ */ package org.apache.causeway.core.metamodel.facetapi; +import java.util.Objects; + import org.apache.causeway.core.metamodel.context.HasMetaModelContext; import org.jspecify.annotations.NonNull; @@ -30,20 +32,23 @@ public abstract class FacetAbstract @Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true) private final @NonNull Class facetType; - @Override - public Precedence precedence() { - return Precedence.DEFAULT; - } - @Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true) private final @NonNull FacetHolder facetHolder; protected FacetAbstract( final Class facetType, final FacetHolder facetHolder) { - this.facetType = facetType; - this.facetHolder = facetHolder; - _BindUtil.bind(this); + this.facetType = Objects.requireNonNull(facetType); + this.facetHolder = Objects.requireNonNull(facetHolder); + prebind(facetHolder); + // binding by contract + _BindUtil.resolveInternalElseFail(facetHolder) + .addFacet(this); + } + + @Override + public Precedence precedence() { + return Precedence.DEFAULT; } @Override @@ -51,4 +56,16 @@ public String toString() { return FacetUtil.toString(this); } + // -- HELPER + + /** + * Some {@link Facet}(s) may need certain adjustments to the {@link FacetHolder} which they are about to be added to. + * This method is called before binding this {@link Facet} to its holder. It is called inside the {@link Facet}'s constructor. + */ + private final void prebind(final FacetHolder facetHolder) { + if(this instanceof ReloadableFacet reloadableFacet) { + reloadableFacet.onPrebind(facetHolder); // dynamic update support + } + } + } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java index 7d05896250b..fd2065033a0 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java @@ -35,7 +35,6 @@ import org.apache.causeway.core.metamodel.facetapi.FacetWithAttributes.Validating; import org.apache.causeway.core.metamodel.util.snapshot.XmlSchema; import org.jspecify.annotations.NonNull; -import org.jspecify.annotations.Nullable; import org.springframework.util.ClassUtils; import lombok.experimental.UtilityClass; @@ -56,45 +55,6 @@ public static XmlSchema.ExtensionData getFacetsByType(final }; } - // -- DYNAMIC UPDATE SUPPORT - - /** - * Removes any facet from its FacetHolder, that matches the facet's java class - * and has no higher precedence than the given one, - * then adds given facet to its facetHolder, honoring precedence. - */ - public static void updateFacet(final @Nullable Facet facet) { - if(facet==null) - return; - - var facetHolder = facet.facetHolder(); - var qualifierKey = QualifiedFacet.Key.forFacet(facet); - - _BindUtil.unbind(facet); - - facetHolder.lookupFacetRanking(facet.facetType()) - .ifPresent(ranking->ranking.purgeIf(facet.facetType(), - qualifierKey, // discriminate by qualifier - facet.getClass()::isInstance, // facet filter - prec->qualifierKey.isQualified() - ? true // if qualified, purge all ranks - : prec.ordinal()<=facet.precedence().ordinal() // don't change ranks of higher precedence - )); - - _BindUtil.bind(facet); - } - - /** - * If facetIfAny is present, - * calls {@link #updateFacet(Facet)}, that is, - * adds it to its facetHolder, replacing any pre-existing, honoring precedence. - * Otherwise acts as a no-op. - */ - public static void updateFacetIfPresent( - final @NonNull Optional facetIfAny) { - updateFacet(facetIfAny.orElse(null)); - } - // -- FACET ATTRIBUTES public static String attributesAsString(final Facet facet) { @@ -168,13 +128,14 @@ public static Optional computeIfAbsentExact( final Precedence overrideUpToIncluding, final Function facetFactory) { - T winnerFacet = facetHolder.lookupFacet(facetType).orElse(null); + final T winnerFacet = facetHolder.lookupFacet(facetType).orElse(null); if(winnerFacet==null) - return Optional.of(_BindUtil.bind(facetFactory.apply(facetHolder))); - if(winnerFacet.getClass().equals(facetExactClass)) return Optional.of(winnerFacet).map(facetExactClass::cast); + return Optional.of(facetFactory.apply(facetHolder)); + if(winnerFacet.getClass().equals(facetExactClass)) + return Optional.of(winnerFacet).map(facetExactClass::cast); // check if we are allowed to override based on precedence if(winnerFacet.precedence().ordinal()<=overrideUpToIncluding.ordinal()) - return Optional.of(_BindUtil.bind(facetFactory.apply(facetHolder))); + return Optional.of(facetFactory.apply(facetHolder)); // not allowed to override return Optional.empty(); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java index 99e09366023..08aed19e86b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/QualifiedFacet.java @@ -14,11 +14,15 @@ * to find the winning {@link Facet}. * * @implNote We have only one use-case yet, which is honoring layout variants. - * Should other use-cases emerge, this interface will need a redesign. + * Should other use-cases emerge, this interface will need a redesign. + * + * @apiNote at the time of writing, every {@link QualifiedFacet} is also reloadable, + * but that may well change in the future; then we need to remove `extends ReloadableFacet`. * * @since 4.0 */ -public interface QualifiedFacet { +public interface QualifiedFacet +extends ReloadableFacet { record Key( Class facetType, diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/ReloadableFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/ReloadableFacet.java new file mode 100644 index 00000000000..6023b35a78f --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/ReloadableFacet.java @@ -0,0 +1,48 @@ +/* + * 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.causeway.core.metamodel.facetapi; + +/** + * Enables reloading for the implementing {@link Facet}. Cooperates with {@link FacetAbstract}'s constructor. + * + * @see FacetAbstract + * @see _BindUtil#purgeExactFacetClassHonoringPrecedence + * @since 4.0 + */ +public interface ReloadableFacet { + + /** + * WARNING: Meant to be called by {@link FacetAbstract} only! + * + * @apiNote this is supposed to be called during {@link FacetAbstract} construction, + * meaning this {@link Facet} might not be fully initialized yet! + * + * @see FacetAbstract + * @see _BindUtil#purgeExactFacetClassHonoringPrecedence + */ + default void onPrebind(final FacetHolder facetHolder) { + if(this instanceof FacetAbstract facetAbstract) { + var key = QualifiedFacet.Key.forFacet(facetAbstract); // requires qualifier to be initialized already! + // dynamic update support + _BindUtil.purgeExactFacetClassHonoringPrecedence(facetAbstract.getClass(), + key, facetHolder, facetAbstract.precedence(), key.qualifier()); + } + } + +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java index 4063ac5ff03..c1714662203 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java @@ -65,4 +65,41 @@ void unbind(@Nullable final Facet facet) { .removeFacet(facet); } + // -- DYNAMIC UPDATE SUPPORT + + /** + * Removes any {@link Facet} from its {@link FacetHolder}, that matches the exactFacetClass + * and has no higher precedence than the given one. + * + * @apiNote {@link Facet}(s) by contract, have a contained-by relation with their {@link FacetHolder}. + * However, this method breaks this contract, as removed {@link Facet}(s) + * still reference their former holder, but the holder no longer contains the facet. + * + * @see ReloadableFacet + */ + void purgeExactFacetClassHonoringPrecedence( + final Class exactFacetClass, + final QualifiedFacet.Key qualifierKey, + final FacetHolder facetHolder, + final Facet.@Nullable Precedence precedence, + final @Nullable String qualifier) { + + Objects.requireNonNull(exactFacetClass); + Objects.requireNonNull(qualifierKey); + Objects.requireNonNull(facetHolder); + Objects.requireNonNull(precedence); + Assert.isTrue(precedence.ordinal() < Facet.Precedence.EVENT.ordinal(), "Purge not supported for facets with EVENT precedence"); + Assert.isTrue(qualifierKey.facetType().isAssignableFrom(exactFacetClass), "Exact facet-class %s is not an instace of facet-type %s" + .formatted(exactFacetClass.getName(), qualifierKey.facetType().getName())); + + facetHolder.lookupFacetRanking(qualifierKey.facetType()) + .ifPresent(ranking->ranking.purgeIf(qualifierKey.facetType(), + qualifierKey, // discriminate by qualifier + exactFacetClass::isInstance, // facet filter + prec->qualifierKey.isQualified() + ? true // if qualified, purge all ranks + : prec.ordinal()<=precedence.ordinal() // don't change ranks of higher precedence + )); + } + } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForMenuBarXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForMenuBarXml.java index 9bf99d28f9e..e5fa043b065 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForMenuBarXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/CssClassFacetForMenuBarXml.java @@ -23,12 +23,14 @@ import org.apache.causeway.applib.layout.component.ServiceActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.ReloadableFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple; import org.jspecify.annotations.Nullable; -public class CssClassFacetForMenuBarXml -extends CssClassFacetSimple { +public final class CssClassFacetForMenuBarXml +extends CssClassFacetSimple +implements ReloadableFacet { public static Optional create( final @Nullable ServiceActionLayoutData actionLayout, @@ -45,7 +47,7 @@ private CssClassFacetForMenuBarXml(final String value, final FacetHolder holder) } @Override - public Precedence precedence() { + public final Precedence precedence() { // XML menu-bar entries overrule layout from annotations return Precedence.HIGH; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForMenuBarXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForMenuBarXml.java index 0a532565528..dc7c46e1519 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForMenuBarXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/FaFacetForMenuBarXml.java @@ -24,12 +24,14 @@ import org.apache.causeway.applib.layout.component.ServiceActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.ReloadableFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet; import org.apache.causeway.core.metamodel.facets.members.iconfa.FaStaticFacetAbstract; import org.jspecify.annotations.Nullable; -public class FaFacetForMenuBarXml -extends FaStaticFacetAbstract { +public final class FaFacetForMenuBarXml +extends FaStaticFacetAbstract +implements ReloadableFacet { public static Optional create( final @Nullable ServiceActionLayoutData actionLayout, @@ -52,7 +54,7 @@ private FaFacetForMenuBarXml( } @Override - public Precedence precedence() { + public final Precedence precedence() { // XML menu-bar entries overrule layout from annotations return Precedence.HIGH; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForMenuBarXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForMenuBarXml.java index cf8d5e92deb..019aa85280c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForMenuBarXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberDescribedFacetForMenuBarXml.java @@ -23,12 +23,14 @@ import org.apache.causeway.applib.layout.component.ServiceActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.ReloadableFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -public class MemberDescribedFacetForMenuBarXml -extends MemberDescribedFacetWithStaticTextAbstract { +public final class MemberDescribedFacetForMenuBarXml +extends MemberDescribedFacetWithStaticTextAbstract +implements ReloadableFacet { public static Optional create( final @Nullable ServiceActionLayoutData actionLayout, @@ -45,7 +47,7 @@ private MemberDescribedFacetForMenuBarXml(final String named, final FacetHolder } @Override - public Precedence precedence() { + public final Precedence precedence() { // XML menu-bar entries overrule layout from annotations return Precedence.HIGH; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForMenuBarXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForMenuBarXml.java index 5672903fea8..2af9ba7bbc6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForMenuBarXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/layout/MemberNamedFacetForMenuBarXml.java @@ -23,20 +23,22 @@ import org.apache.causeway.applib.layout.component.ServiceActionLayoutData; import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.ReloadableFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -public class MemberNamedFacetForMenuBarXml -extends MemberNamedFacetWithStaticTextAbstract { +public final class MemberNamedFacetForMenuBarXml +extends MemberNamedFacetWithStaticTextAbstract +implements ReloadableFacet { public static Optional create( final @Nullable ServiceActionLayoutData actionLayout, - final FacetHolder holder) { + final FacetHolder facetHolder) { return actionLayout != null ? _Strings.nonEmpty(actionLayout.getNamed()) - .map(named->new MemberNamedFacetForMenuBarXml(named, holder)) + .map(named->new MemberNamedFacetForMenuBarXml(named, facetHolder)) : Optional.empty(); } @@ -45,7 +47,7 @@ private MemberNamedFacetForMenuBarXml(final String named, final FacetHolder hold } @Override - public Precedence precedence() { + public final Precedence precedence() { // XML menu-bar entries overrule layout from annotations return Precedence.HIGH; } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java index 37a317dd98c..257037c982b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/MemberNamedFacetForCollectionLayoutXml.java @@ -28,9 +28,6 @@ import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberNamedFacetForCollectionLayoutXml extends MemberNamedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -44,21 +41,17 @@ public static Optional create( return Optional.empty(); final String named = _Strings.emptyToNull(collectionLayout.getNamed()); return named != null - ? Optional.of(new MemberNamedFacetForCollectionLayoutXml(named, holder, qualifier) { - @Override public Precedence precedence() { return precedence; } + ? Optional.of(new MemberNamedFacetForCollectionLayoutXml(named, holder) { + @Override final public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } }) : Optional.empty(); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberNamedFacetForCollectionLayoutXml( final String named, - final FacetHolder holder, - final @Nullable String qualifier) { + final FacetHolder holder) { super(named, holder); - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java index 088221baa09..be34d6d90a2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java @@ -52,7 +52,7 @@ public static Optional create( return sortedByClass != null ? Optional.of(new SortedByFacetForCollectionLayoutXml(uncheckedCast(sortedByClass), holder) { @Override final public Precedence precedence() { return precedence; } - @Override final public @Nullable String qualifier() { return qualifier; } + @Override final public @Nullable String qualifier() { return qualifier; } }) : Optional.empty(); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java index 72a2fd39270..54c3187c6db 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/layout/order/LayoutOrderFacetForLayoutXml.java @@ -28,10 +28,11 @@ public class LayoutOrderFacetForLayoutXml public static LayoutOrderFacetForLayoutXml create( final int sequenceAsInt, - final FacetHolder holder, + final FacetHolder facetHolder, final Precedence precedence, final @Nullable String qualifier) { - return new LayoutOrderFacetForLayoutXml("" + sequenceAsInt, holder) { + + return new LayoutOrderFacetForLayoutXml("" + sequenceAsInt, facetHolder) { @Override final public Precedence precedence() { return precedence; } @Override final public @Nullable String qualifier() { return qualifier; } }; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java index 2ef4dd2ace8..6de122d9c5e 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/MemberNamedFacetForPropertyLayoutXml.java @@ -28,9 +28,6 @@ import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetWithStaticTextAbstract; import org.jspecify.annotations.Nullable; -import lombok.Getter; -import lombok.experimental.Accessors; - public class MemberNamedFacetForPropertyLayoutXml extends MemberNamedFacetWithStaticTextAbstract implements QualifiedFacet { @@ -44,20 +41,16 @@ public static Optional create( .map(PropertyLayoutData::getNamed) .filter(_Strings::isNotEmpty) .map(named-> - new MemberNamedFacetForPropertyLayoutXml(named, holder, qualifier) { + new MemberNamedFacetForPropertyLayoutXml(named, holder) { @Override public Precedence precedence() { return precedence; } + @Override final public @Nullable String qualifier() { return qualifier; } }); } - @Getter(onMethod_ = @Override) @Accessors(fluent = true, makeFinal = true) - private final @Nullable String qualifier; - private MemberNamedFacetForPropertyLayoutXml( final String named, - final FacetHolder holder, - final @Nullable String qualifier) { + final FacetHolder holder) { super(named, holder); - this.qualifier = qualifier; } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java index 05994445a8b..7417321bfbb 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutXml.java @@ -46,7 +46,7 @@ public static Optional create( return Optional.of( new UnchangingFacetForPropertyLayoutXml(repainting == Repainting.NO_REPAINT, holder) { @Override final public Precedence precedence() { return precedence; } - @Override final public @Nullable String qualifier() { return qualifier; } + @Override final public @Nullable String qualifier() { return qualifier; } }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java index fe9f8615320..3e1ab8388c7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/XmlLayoutRespectingFacetInstaller.java @@ -18,9 +18,6 @@ */ package org.apache.causeway.core.metamodel.services.grid; -import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacet; -import static org.apache.causeway.core.metamodel.facetapi.FacetUtil.updateFacetIfPresent; - import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.applib.layout.component.DomainObjectLayoutData; @@ -106,32 +103,26 @@ public void visit(final DomainObjectLayoutData domainObjectLayoutData) { var qualifier = layoutKey.layoutIfAny(); - updateFacetIfPresent( - BookmarkPolicyFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); - updateFacetIfPresent( - CssClassFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); - updateFacetIfPresent( - FaFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); - updateFacetIfPresent( - ObjectDescribedFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); - updateFacetIfPresent( - ObjectNamedFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); - updateFacetIfPresent( - TableDecoratorFacetForDomainObjectLayoutXml - .create(domainObjectLayoutData, objectSpec, precedence, qualifier)); + BookmarkPolicyFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); + CssClassFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); + FaFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); + ObjectDescribedFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); + ObjectNamedFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); + TableDecoratorFacetForDomainObjectLayoutXml + .create(domainObjectLayoutData, objectSpec, precedence, qualifier); } @Override public void visit(final ActionLayoutData actionLayoutData) { - var actionLayoutDataOwner = actionLayoutData.owner(); var objectAction = objectActionById.get(actionLayoutData.getId()); - if(objectAction == null) return; + if(objectAction == null) + return; var qualifier = layoutKey.layoutIfAny(); @@ -164,16 +155,15 @@ public void visit(final ActionLayoutData actionLayoutData) { groupIdAndName = null; memberOrderSequence = actionDomainObjectSequence++; } - updateFacet( - LayoutOrderFacetForLayoutXml.create(memberOrderSequence, objectAction, precedence, qualifier)); + + LayoutOrderFacetForLayoutXml.create(memberOrderSequence, objectAction, precedence, qualifier); //XXX hotfix: always override LayoutGroupFacetFromActionLayoutAnnotation, otherwise actions are not shown - don't know why var precedenceHotfix = bsGrid.fallback() ? Facet.Precedence.DEFAULT : Facet.Precedence.HIGH; - updateFacetIfPresent( - LayoutGroupFacetForLayoutXml.create(groupIdAndName, objectAction, precedenceHotfix, qualifier)); + LayoutGroupFacetForLayoutXml.create(groupIdAndName, objectAction, precedenceHotfix, qualifier); } // fix up the action position if required @@ -194,118 +184,88 @@ public void visit(final ActionLayoutData actionLayoutData) { actionLayoutData.setPosition(null); } - updateFacetIfPresent( - ActionPositionFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - CssClassFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - FaFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - MemberDescribedFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - HiddenFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - MemberNamedFacetForActionLayoutXml.create(actionLayoutData, objectAction, precedence, qualifier)); - - updateFacetIfPresent( - PromptStyleFacet.createForActionLayoutXml(actionLayoutData, objectAction, precedence, qualifier)); + ActionPositionFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + CssClassFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + FaFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + MemberDescribedFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + HiddenFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + MemberNamedFacetForActionLayoutXml + .create(actionLayoutData, objectAction, precedence, qualifier); + PromptStyleFacet + .createForActionLayoutXml(actionLayoutData, objectAction, precedence, qualifier); } @Override public void visit(final PropertyLayoutData propertyLayoutData) { var oneToOneAssociation = oneToOneAssociationById.get(propertyLayoutData.getId()); - if(oneToOneAssociation == null) return; + if(oneToOneAssociation == null) + return; var qualifier = layoutKey.layoutIfAny(); - updateFacetIfPresent( - CssClassFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - MemberDescribedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - HiddenFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - LabelAtFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - MultiLineFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - MemberNamedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - PromptStyleFacet.createForPropertyLayoutXml(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - RenderedAdjustedFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - UnchangingFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - TypicalLengthFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation, precedence, qualifier)); + CssClassFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + MemberDescribedFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + HiddenFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + LabelAtFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + MultiLineFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + MemberNamedFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + PromptStyleFacet + .createForPropertyLayoutXml(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + RenderedAdjustedFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + UnchangingFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); + TypicalLengthFacetForPropertyLayoutXml + .create(propertyLayoutData, oneToOneAssociation, precedence, qualifier); // Layout group-name based on owning property group, Layout sequence monotonically increasing // nb for any given field set the sequence won't reset to zero; however this is what we want so that // table columns are shown correctly (by fieldset, then property order within that fieldset). final FieldSet fieldSet = propertyLayoutData.owner(); - updateFacet( - LayoutOrderFacetForLayoutXml.create(propertySequence++, oneToOneAssociation, precedence, qualifier)); - - updateFacetIfPresent( - LayoutGroupFacetForLayoutXml.create(fieldSet, oneToOneAssociation, precedence, qualifier)); + LayoutOrderFacetForLayoutXml + .create(propertySequence++, oneToOneAssociation, precedence, qualifier); + LayoutGroupFacetForLayoutXml + .create(fieldSet, oneToOneAssociation, precedence, qualifier); } @Override public void visit(final CollectionLayoutData collectionLayoutData) { var oneToManyAssociation = oneToManyAssociationById.get(collectionLayoutData.getId()); - if(oneToManyAssociation == null) return; + if(oneToManyAssociation == null) + return; var qualifier = layoutKey.layoutIfAny(); - updateFacetIfPresent( - CssClassFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - DefaultViewFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - TableDecoratorFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - MemberDescribedFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - HiddenFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - MemberNamedFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - PagedFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacetIfPresent( - SortedByFacetForCollectionLayoutXml - .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier)); - - updateFacet(LayoutOrderFacetForLayoutXml - .create(collectionSequence++, oneToManyAssociation, precedence, qualifier)); + CssClassFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + DefaultViewFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + TableDecoratorFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + MemberDescribedFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + HiddenFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + MemberNamedFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + PagedFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + SortedByFacetForCollectionLayoutXml + .create(collectionLayoutData, oneToManyAssociation, precedence, qualifier); + LayoutOrderFacetForLayoutXml + .create(collectionSequence++, oneToManyAssociation, precedence, qualifier); } }); diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java index 43d5d544e54..7cdcc3b8e44 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java @@ -45,7 +45,6 @@ import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence; -import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.actions.layout.CssClassFacetForMenuBarXml; import org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForMenuBarXml; import org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForMenuBarXml; @@ -170,36 +169,24 @@ private BSMenuBars updateFacetsFromActionLayoutXml(final BSMenuBars menuBarsFrom serviceActionLayoutData)); metaModelContext.streamServiceAdapters() - .filter(this::isVisibleAdapterForMenu) - .forEach(serviceAdapter->{ - - var serviceSpec = serviceAdapter.objSpec(); - - serviceSpec.streamAnyActions(MixedIn.INCLUDED) - .forEach(objectAction->{ - - var serviceActionIdentifier = objectAction.getFeatureIdentifier(); - - var actionId = serviceActionIdentifier.logicalTypeName() - + "#" + serviceActionIdentifier.memberLogicalName(); - - var layoutData = serviceActionLayoutDataByActionId.get(actionId); - - FacetUtil.updateFacetIfPresent( - MemberNamedFacetForMenuBarXml.create(layoutData, objectAction)); - - FacetUtil.updateFacetIfPresent( - MemberDescribedFacetForMenuBarXml.create(layoutData, objectAction)); - - FacetUtil.updateFacetIfPresent( - CssClassFacetForMenuBarXml.create(layoutData, objectAction)); - - FacetUtil.updateFacetIfPresent( - FaFacetForMenuBarXml.create(layoutData, objectAction)); - - }); - - }); + .filter(this::isVisibleAdapterForMenu) + .map(ManagedObject::objSpec) + .flatMap(serviceSpec->serviceSpec.streamAnyActions(MixedIn.INCLUDED)) + .forEach(serviceAction->{ + var serviceActionIdentifier = serviceAction.getFeatureIdentifier(); + var actionId = serviceActionIdentifier.logicalTypeName() + + "#" + serviceActionIdentifier.memberLogicalName(); + var layoutData = serviceActionLayoutDataByActionId.get(actionId); + + MemberNamedFacetForMenuBarXml + .create(layoutData, serviceAction); + MemberDescribedFacetForMenuBarXml + .create(layoutData, serviceAction); + CssClassFacetForMenuBarXml + .create(layoutData, serviceAction); + FaFacetForMenuBarXml + .create(layoutData, serviceAction); + }); return menuBarsFromXml; }