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/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/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/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/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/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..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;
@@ -27,23 +29,26 @@
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 extends Facet> facetType;
- @Override
- 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(
final Class extends Facet> facetType,
final FacetHolder facetHolder) {
- this.facetType = facetType;
- this.facetHolder = facetHolder;
- //TODO refactor facetHolder.addFacet(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/FacetHolder.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolder.java
index bd416475937..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
@@ -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
@@ -70,7 +69,6 @@ public static FacetHolder forTesting(final MetaModelContext mmc) {
int getFacetCount();
-
// -- FACET LOOKUP
Optional lookupFacet(final @NonNull Class facetType);
@@ -86,16 +84,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 +123,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 extends Facet> facetType);
+ Optional lookupFacetRanking(Class extends Facet> 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..2ca09c5bd8b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetHolderInternal.java
@@ -0,0 +1,43 @@
+/*
+ * 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);
+
+ /**
+ * @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 69efbaf77bc..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
@@ -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,28 @@ 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);
+ }
+
+ @SuppressWarnings("deprecation")
+ @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 +149,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 extends Facet> facetType) {
- var localFacetRanking = local.getFacetRanking(facetType);
- var sharedFacetRanking = shared.getFacetRanking(facetType);
+ public Optional lookupFacetRanking(final Class extends Facet> 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..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
@@ -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,25 @@ public boolean containsFacet(final Class extends Facet> 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);
}
+ @SuppressWarnings("deprecation")
+ @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 +103,7 @@ public Stream streamFacetRankings() {
}
@Override
- public Optional getFacetRanking(final Class extends Facet> facetType) {
+ public Optional lookupFacetRanking(final Class extends Facet> 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..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
@@ -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,21 @@ FacetRank add(final @Nullable F facet) {
return this;
}
+ /**
+ * @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
+
+ 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..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
@@ -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,15 @@ public void add(final F facet) {
delegate(facet).add(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);
+ }
+
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..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
@@ -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;
@@ -34,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;
@@ -42,99 +42,19 @@
@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));
}
-
};
}
- // -- 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 qualifierKey = QualifiedFacet.Key.forFacet(facet);
-
- facet.facetHolder().getFacetRanking(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
- ));
-
- addFacet(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 extends F> facetIfAny) {
- updateFacet(facetIfAny.orElse(null));
- }
-
// -- FACET ATTRIBUTES
public static String attributesAsString(final Facet facet) {
@@ -185,13 +105,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);
}
/**
@@ -208,18 +128,20 @@ public static Optional computeIfAbsentExact(
final Precedence overrideUpToIncluding,
final Function facetFactory) {
- T winnerFacet = facetHolder.lookupFacet(facetType).orElse(null);
- if(winnerFacet==null) return Optional.of(addFacet(facetFactory.apply(facetHolder)));
- if(winnerFacet.getClass().equals(facetExactClass)) return Optional.of(winnerFacet).map(facetExactClass::cast);
+ final T winnerFacet = facetHolder.lookupFacet(facetType).orElse(null);
+ if(winnerFacet==null)
+ 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(addFacet(facetFactory.apply(facetHolder)));
+ return Optional.of(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 +152,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..525497715d8 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,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/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 extends Facet> facetType) {
- return facetHolder().getFacetRanking(facetType);
+ default Optional lookupFacetRanking(final Class extends Facet> 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..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
@@ -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
@@ -15,12 +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
*/
-@FunctionalInterface
-public interface QualifiedFacet {
+public interface QualifiedFacet
+extends ReloadableFacet {
record Key(
Class extends Facet> facetType,
@@ -55,6 +57,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/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/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..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
@@ -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,24 @@ 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;
+ // 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 IllegalArgumentException("removal of facet with EVENT precedence is not supported");
+ 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..c1714662203
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/_BindUtil.java
@@ -0,0 +1,105 @@
+/*
+ * 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();
+ }
+
+ /**
+ * @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);
+ }
+
+ // -- 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 extends Facet> 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/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/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/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/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/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/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/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/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/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 extends Facet> 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..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,49 +48,39 @@ 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..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
@@ -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.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 MemberNamedFacetForCollectionLayoutXml
extends MemberNamedFacetWithStaticTextAbstract
implements QualifiedFacet {
@@ -45,24 +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, precedence, qualifier))
+ ? 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 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) {
+ 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/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..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
@@ -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 extends Comparator>> 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 extends Facet> 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 extends TableDecorator> 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 @@
*
*