This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push: new 6b8d3bc363 ISIS-3049: no longer have both the Member and its Peer maintain their own list of Facets 6b8d3bc363 is described below commit 6b8d3bc3630e97b59eff55e62fc41b5a829deda1 Author: Andi Huber <ahu...@apache.org> AuthorDate: Tue Jun 28 14:51:22 2022 +0200 ISIS-3049: no longer have both the Member and its Peer maintain their own list of Facets - as these may run out of sync eg. with metamodel post-processing - also removes superfluous TypeOfFacetFromActionReturn - also its simpler to have translation contexts for mixins separately, so don't duplicate translation contexts for mixed-in members; - this commit potentially breaks mixed-in facets that originate from layout.xml files --- .../java/org/apache/isis/applib/Identifier.java | 2 +- .../applib/exceptions/RecoverableException.java | 2 +- .../applib/exceptions/UnrecoverableException.java | 2 +- .../applib/services/i18n/TranslationContext.java | 21 ++--- .../services/i18n/TranslatableStringTest.java | 6 +- .../isis/core/metamodel/facetapi/FacetHolder.java | 12 ++- .../metamodel/facetapi/FacetHolderAbstract.java | 4 +- .../metamodel/facetapi/FacetHolderDelegated.java | 102 +++++++++++++++++++++ .../metamodel/facetapi/FacetHolderLayered.java | 101 -------------------- .../typeof/TypeOfFacetFromActionReturn.java | 30 ------ .../invocation/ActionDomainEventFacetAbstract.java | 4 +- .../method/ActionValidationFacetViaMethod.java | 3 +- ...erDescribedFacetWithImperativeTextAbstract.java | 3 +- ...MemberDescribedFacetWithStaticTextAbstract.java | 3 +- .../described/ObjectDescribedFacetAbstract.java | 3 +- .../all/described/ParamDescribedFacetAbstract.java | 3 +- ...MemberNamedFacetWithImperativeTextAbstract.java | 3 +- .../MemberNamedFacetWithStaticTextAbstract.java | 3 +- .../facets/all/named/ObjectNamedFacetAbstract.java | 3 +- .../facets/all/named/ParamNamedFacetAbstract.java | 3 +- .../method/DisableForContextFacetViaMethod.java | 3 +- ...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 3 +- .../MustSatisfySpecificationFacetAbstract.java | 4 +- .../ActionParameterChoicesFacetAbstract.java | 4 +- ...ctionParameterChoicesFacetFromChoicesFacet.java | 25 +++-- ...rameterChoicesFacetFromChoicesFacetFactory.java | 11 ++- .../ActionParameterDisabledFacetViaMethod.java | 3 +- .../ActionParameterValidationFacetViaMethod.java | 3 +- .../choices/PropertyChoicesFacetAbstract.java | 6 +- .../PropertyChoicesFacetFromChoicesFacet.java | 30 +++--- ...ropertyChoicesFacetFromChoicesFacetFactory.java | 13 ++- .../modify/PropertyDomainEventFacetAbstract.java | 10 +- .../method/PropertyValidateFacetViaMethod.java | 3 +- .../param/ChoicesAndDefaultsPostProcessor.java | 26 ++++-- .../specloader/specimpl/ObjectActionMixedIn.java | 2 +- .../specimpl/OneToManyAssociationMixedIn.java | 6 +- .../specimpl/OneToOneAssociationMixedIn.java | 2 +- .../memberorder/DeweyOrderComparatorTest.java | 2 +- .../ordering/memberorder/DeweyOrderSetTest.java | 2 +- .../core/runtimeservices/i18n/po/PoReaderTest.java | 14 +-- .../domainmodel/MetaModelRegressionTest.java | 3 +- .../ui/app/registry/ComponentFactoryRegistry.java | 4 +- .../value/fallback/ValueFallbackPanelFactory.java | 7 +- .../ValueChoicesSelect2PanelFactory.java | 2 +- 44 files changed, 241 insertions(+), 260 deletions(-) diff --git a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java index dea20e8406..da49b4afaf 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java +++ b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java @@ -192,7 +192,7 @@ implements ? "(" + memberParameterClassNames.stream().collect(Collectors.joining(",")) + ")" : ""); - this.translationContext = TranslationContext.ofName( + this.translationContext = TranslationContext.named( className + "#" + memberLogicalName + (type.isAction() ? "()" : "")); this.fullIdentityString = _Strings.isEmpty(memberLogicalName) diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java index 13ef109a4c..5b00cc1b47 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java +++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java @@ -89,7 +89,7 @@ implements TranslatableException { super(message, cause); this.translatableMessage = translatableMessage; this.translationContext = translationContextClass != null - ? TranslationContext.ofName( + ? TranslationContext.named( translationContextClass.getName() + (_Strings.isNotEmpty(translationContextMethod) ? "#" + translationContextMethod diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java index d206fbc0e2..d7d321c0da 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java +++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java @@ -82,7 +82,7 @@ implements TranslatableException { super(message, cause); this.translatableMessage = translatableMessage; this.translationContext = translationContextClass != null - ? TranslationContext.ofName( + ? TranslationContext.named( translationContextClass.getName() + (_Strings.isNotEmpty(translationContextMethod) ? "#" + translationContextMethod diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java index 1e85ec7606..a45074045b 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java +++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java @@ -32,7 +32,7 @@ import lombok.val; /** * @since 2.x {@index} */ -@Value(staticConstructor = "ofName") +@Value(staticConstructor = "named") public final class TranslationContext implements Serializable { @@ -40,21 +40,12 @@ implements Serializable { @Getter private final String name; - //XXX this guard could be removed if non-null is guaranteed - public static TranslationContext forTranslationContextHolder( - final @Nullable HasTranslationContext hasTranslationContext) { - - return hasTranslationContext!=null - ? hasTranslationContext.getTranslationContext() - : EMPTY; - } - //XXX no logical type name supported public static TranslationContext forClassName( final @Nullable Class<?> contextClass) { return contextClass!=null - ? ofName(contextClass.getName()) + ? named(contextClass.getName()) : EMPTY; } @@ -66,7 +57,7 @@ implements Serializable { val classContext = forClassName(contextClass); return _Strings.isNullOrEmpty(contextMethodName) ? classContext - : ofName(classContext.getName() + "#" + contextMethodName + "()"); + : named(classContext.getName() + "#" + contextMethodName + "()"); } //XXX no logical type name supported @@ -74,7 +65,7 @@ implements Serializable { final @Nullable Method method) { return method!=null - ? ofName(method.getDeclaringClass().getName() + "#" + method.getName() + "()") + ? named(method.getDeclaringClass().getName() + "#" + method.getName() + "()") : EMPTY; } @@ -83,13 +74,13 @@ implements Serializable { final @Nullable Enum<?> objectAsEnum) { return objectAsEnum!=null - ? ofName(objectAsEnum.getClass().getName() + "#" + objectAsEnum.name()) + ? named(objectAsEnum.getClass().getName() + "#" + objectAsEnum.name()) : EMPTY; } // -- EMPTY - private final static TranslationContext EMPTY = TranslationContext.ofName("default"); + private final static TranslationContext EMPTY = TranslationContext.named("default"); public static TranslationContext empty() { return EMPTY; diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java b/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java index 09100ee341..30455602f6 100644 --- a/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java +++ b/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java @@ -88,7 +88,7 @@ public class TranslatableStringTest { public void singularForm() throws Exception { // given final String simpleText = "text to translate"; - final TranslationContext someContext = TranslationContext.ofName("someContext"); + final TranslationContext someContext = TranslationContext.named("someContext"); final String translation = "the translation"; final TranslatableString ts = TranslatableString.tr(simpleText); @@ -109,7 +109,7 @@ public class TranslatableStringTest { // given final String singularText = "singular text to translate"; final String pluralText = "plural text to translate"; - final TranslationContext someContext = TranslationContext.ofName("someContext"); + final TranslationContext someContext = TranslationContext.named("someContext"); final String translation = "the translation"; final TranslatableString ts = TranslatableString.trn(singularText, pluralText, 1); @@ -130,7 +130,7 @@ public class TranslatableStringTest { // given final String singularText = "singular text to translate"; final String pluralText = "plural text to translate"; - final TranslationContext someContext = TranslationContext.ofName("someContext"); + final TranslationContext someContext = TranslationContext.named("someContext"); final String translation = "the translation"; final int number = 2; // != 1 diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java index fdf625b0ef..140045789c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java @@ -23,6 +23,8 @@ import java.util.function.Predicate; import java.util.stream.Stream; import org.apache.isis.applib.Identifier; +import org.apache.isis.applib.services.i18n.HasTranslationContext; +import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.core.metamodel.context.HasMetaModelContext; import lombok.NonNull; @@ -32,7 +34,8 @@ import lombok.val; * Anything in the metamodel (which also includes peers in the reflector) that * can be extended. */ -public interface FacetHolder extends HasMetaModelContext { +public interface FacetHolder +extends HasMetaModelContext, HasTranslationContext { /** * Identifier of the feature this holder represents or is associated with. @@ -119,4 +122,11 @@ public interface FacetHolder extends HasMetaModelContext { Stream<FacetRanking> streamFacetRankings(); Optional<FacetRanking> getFacetRanking(Class<? extends Facet> facetType); + // -- TRANSLATION CONTEXT + + @Override + default TranslationContext getTranslationContext() { + return getFeatureIdentifier().getTranslationContext(); + } + } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java index 2307c37b65..da26748440 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java @@ -53,10 +53,10 @@ implements FacetHolder { return new FacetHolderAbstract(mmc, featureIdentifier) {}; } - public static FacetHolderAbstract layered( + public static FacetHolder delegated( final Identifier featureIdentifier, final FacetHolder parentLayer) { - return new FacetHolderLayered(featureIdentifier, parentLayer); + return new FacetHolderDelegated(featureIdentifier, parentLayer); } // -- FIELDS diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java new file mode 100644 index 0000000000..0c8ce03a58 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderDelegated.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.isis.core.metamodel.facetapi; + +import java.util.Optional; +import java.util.stream.Stream; + +import org.apache.isis.applib.Identifier; +import org.apache.isis.applib.services.i18n.TranslationContext; +import org.apache.isis.core.metamodel.context.MetaModelContext; +import org.apache.isis.core.metamodel.facets.FacetedMethod; + +import lombok.Getter; +import lombok.NonNull; + +/** + * Acts as a facade to the underlying delegate, but provides its own <i>Member</i>-{@link Identifier}. + * <p> + * Any mixed in <i>Member</i> has a {@link FacetedMethod} that acts as the {@link FacetHolder}, + * which is shared among all types that this particular mixed in <i>Member</i> is contributed to. + * @apiNote + * was introduced in response to a couple of bugs originating from having both the <i>Member</i> and + * its <i>Peer</i> maintaining their own list of {@link Facet}(s), that may run out of sync + * eg. with metamodel post-processing; + */ +class FacetHolderDelegated +implements FacetHolder { + + @Getter(onMethod_ = {@Override}) + private final @NonNull Identifier featureIdentifier; + private final @NonNull FacetHolder delegate; + + public FacetHolderDelegated( + final @NonNull Identifier featureIdentifier, + final @NonNull FacetHolder delegate) { + this.featureIdentifier = featureIdentifier; + this.delegate = delegate; + } + + @Override + public TranslationContext getTranslationContext() { + return delegate.getTranslationContext(); + } + + @Override + public void addFacet(@NonNull final Facet facet) { + //FIXME[ISIS-3049] if a Facet originates from layout.xml introspection, don't install it on the delegate + delegate.addFacet(facet); + } + + @Override + public MetaModelContext getMetaModelContext() { + return delegate.getMetaModelContext(); + } + + @Override + public int getFacetCount() { + return delegate.getFacetCount(); + } + + @Override + public <T extends Facet> T getFacet(final Class<T> facetType) { + return delegate.getFacet(facetType); + } + + @Override + public boolean containsFacet(final Class<? extends Facet> facetType) { + return delegate.containsFacet(facetType); + } + + @Override + public Stream<Facet> streamFacets() { + return delegate.streamFacets(); + } + + @Override + public Stream<FacetRanking> streamFacetRankings() { + return delegate.streamFacetRankings(); + } + + @Override + public Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) { + return delegate.getFacetRanking(facetType); + } + +} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java deleted file mode 100644 index 717610504d..0000000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderLayered.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.isis.core.metamodel.facetapi; - -import org.apache.isis.applib.Identifier; - -import lombok.NonNull; - -/** - * Supposed to provide a merged view of the local and the parent-layer, - * where the parent is used as read-only fallback. - * - * @apiNote It is still not clear to me why we do need this at all, - * why not just simply delegate/wrap? - */ -class FacetHolderLayered -extends FacetHolderAbstract { - - private final @NonNull FacetHolder parentLayer; - - public FacetHolderLayered( - final @NonNull Identifier featureIdentifier, - final @NonNull FacetHolder parentLayer) { - super(parentLayer.getMetaModelContext(), featureIdentifier); - this.parentLayer = parentLayer; - - // legacy implementation, it will miss any changes that happen to the parent-layer after copying - copyFacetsTo(parentLayer, this); - } - - /* XXX first attempt on an implementation, but does not handle facet precedence correctly - @Override - public int getFacetCount() { - // cannot simply add up this and parent - return (int)streamFacets().count(); - } - - @Override - public <T extends Facet> T getFacet(final Class<T> facetType) { - return Optional.ofNullable(super.getFacet(facetType)) - .orElse(parentLayer.getFacet(facetType)); - } - - @Override - public boolean containsFacet(final Class<? extends Facet> facetType) { - return super.containsFacet(facetType) - || parentLayer.containsFacet(facetType); - } - - @Override - public Stream<Facet> streamFacets() { - val localFacetTypes = new HashSet<Class<? extends Facet>>(); - return Stream.concat( - super.streamFacets() - .peek(facet->localFacetTypes.add(facet.facetType())) - , - parentLayer.streamFacets() - .filter(facet->!localFacetTypes.contains(facet.facetType()))); - } - - @Override - public Stream<FacetRanking> streamFacetRankings() { - val localFacetTypes = new HashSet<Class<? extends Facet>>(); - return Stream.concat( - super.streamFacetRankings() - .peek(ranking->localFacetTypes.add(ranking.facetType())) - , - parentLayer.streamFacetRankings() - .filter(ranking->!localFacetTypes.contains(ranking.facetType()))); - } - - @Override - public Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) { - return Optional.ofNullable(super.getFacetRanking(facetType)) - .orElse(parentLayer.getFacetRanking(facetType)); - }*/ - - // -- HELPER - - private static void copyFacetsTo(final FacetHolder source, final FacetHolder target) { - source.streamFacets() - .forEach(target::addFacet); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacetFromActionReturn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacetFromActionReturn.java deleted file mode 100644 index 7b414cbb51..0000000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/TypeOfFacetFromActionReturn.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.isis.core.metamodel.facets.actcoll.typeof; - -import org.apache.isis.core.metamodel.facetapi.FacetHolder; - -public class TypeOfFacetFromActionReturn -extends TypeOfFacetAbstract { - - public TypeOfFacetFromActionReturn(final Class<?> type, final FacetHolder holder) { - super(type, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java index 93983c0430..9f5ae1912d 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java @@ -56,9 +56,7 @@ implements ActionDomainEventFacet { setEventType(eventType); this.translationService = getTranslationService(); - // sadness: same as in TranslationFactory - this.translationContext = TranslationContext.forTranslationContextHolder( - holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java index ad6e7d46b6..dd1f2f1e8d 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java @@ -51,8 +51,7 @@ implements ImperativeFacet { super(holder); this.methods = ImperativeFacet.singleMethod(method); - this.translationContext = - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); this.patConstructor = patConstructor; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithImperativeTextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithImperativeTextAbstract.java index 926a9efc07..0452e94a39 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithImperativeTextAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithImperativeTextAbstract.java @@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.facets.all.described; import java.lang.reflect.Method; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.commons.functional.Either; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FacetHolder; @@ -51,7 +50,7 @@ implements MemberDescribedFacet { final Method method, final FacetHolder holder) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), method, holder); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithStaticTextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithStaticTextAbstract.java index 656b50474f..4431eb32a2 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithStaticTextAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/MemberDescribedFacetWithStaticTextAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.described; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.commons.functional.Either; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.imperative.HasImperativeText; @@ -58,7 +57,7 @@ implements MemberDescribedFacet { final FacetHolder holder, final Precedence precedence) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), originalText, holder, precedence); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ObjectDescribedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ObjectDescribedFacetAbstract.java index a0c23c7272..14e4f1a0f6 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ObjectDescribedFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ObjectDescribedFacetAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.described; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.staatic.HasStaticTextFacetAbstract; @@ -38,7 +37,7 @@ implements ObjectDescribedFacet { final String originalText, final FacetHolder holder) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), originalText, holder); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ParamDescribedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ParamDescribedFacetAbstract.java index f3e737c759..496c42dead 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ParamDescribedFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/described/ParamDescribedFacetAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.described; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.staatic.HasStaticTextFacetAbstract; @@ -49,7 +48,7 @@ implements ParamDescribedFacet { final FacetHolder holder, final Precedence precedence) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), originalText, holder, precedence); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithImperativeTextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithImperativeTextAbstract.java index f248ea4594..b7c126b24c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithImperativeTextAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithImperativeTextAbstract.java @@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.facets.all.named; import java.lang.reflect.Method; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.commons.functional.Either; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FacetHolder; @@ -51,7 +50,7 @@ implements MemberNamedFacet { final Method method, final FacetHolder holder) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), method, holder); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithStaticTextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithStaticTextAbstract.java index f844f2dec4..0e13219ad0 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithStaticTextAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/MemberNamedFacetWithStaticTextAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.named; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.commons.functional.Either; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.imperative.HasImperativeText; @@ -58,7 +57,7 @@ implements MemberNamedFacet { final FacetHolder holder, final Precedence precedence) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), originalText, holder, precedence); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ObjectNamedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ObjectNamedFacetAbstract.java index 3cda3b7f64..5d6a21aa64 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ObjectNamedFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ObjectNamedFacetAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.named; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.noun.HasNounFacetAbstract; import org.apache.isis.core.metamodel.facets.all.i8n.noun.NounForms; @@ -49,7 +48,7 @@ implements ObjectNamedFacet { final FacetHolder holder, final Precedence precedence) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), nounForms, holder, precedence); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ParamNamedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ParamNamedFacetAbstract.java index 05956ede76..dd9fe247c5 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ParamNamedFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/ParamNamedFacetAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.facets.all.named; -import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facets.all.i8n.staatic.HasStaticTextFacetAbstract; @@ -46,7 +45,7 @@ implements ParamNamedFacet { final FacetHolder holder, final Precedence precedence) { super(type(), - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()), + holder.getTranslationContext(), originalText, holder, precedence); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java index 47b24ee71c..885b72d9ea 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java @@ -46,8 +46,7 @@ implements ImperativeFacet { final FacetHolder holder) { super(holder); this.methods = ImperativeFacet.singleMethod(method); - this.translationContext = - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); } @Override diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java index daa961b528..a29fcc7a22 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java @@ -133,8 +133,7 @@ extends TitleFacetAbstract { private static TranslationContext translationContextFor(final FacetHolder facetHolder) { if(facetHolder instanceof ObjectSpecification) { - val facetHolderAsSpec = (ObjectSpecification) facetHolder; - return TranslationContext.forTranslationContextHolder(facetHolderAsSpec.getFeatureIdentifier()); + return facetHolder.getTranslationContext(); } return null; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java index ff0345b870..64ec686802 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java @@ -59,9 +59,7 @@ implements MustSatisfySpecificationFacet { this.specifications = specifications; final TranslationService translationService = getTranslationService(); - // sadness: same as in TranslationFactory - final TranslationContext translationContext = TranslationContext.forTranslationContextHolder( - holder.getFeatureIdentifier()); // .getTranslationContext(); + final TranslationContext translationContext = holder.getTranslationContext(); specificationEvaluator = new SpecificationEvaluator(translationService, translationContext); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java index 50b683aa3f..4aa1a1e5fa 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java @@ -30,11 +30,11 @@ implements ActionParameterChoicesFacet { return ActionParameterChoicesFacet.class; } - public ActionParameterChoicesFacetAbstract(FacetHolder holder) { + protected ActionParameterChoicesFacetAbstract(final FacetHolder holder) { super(type(), holder); } - public ActionParameterChoicesFacetAbstract(final FacetHolder holder, final Facet.Precedence precedence) { + protected ActionParameterChoicesFacetAbstract(final FacetHolder holder, final Facet.Precedence precedence) { super(type(), holder, precedence); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java index f8c4b426b7..3a1eda9194 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java @@ -18,10 +18,11 @@ */ package org.apache.isis.core.metamodel.facets.param.choices.enums; +import java.util.Optional; + import org.apache.isis.commons.collections.Can; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; import org.apache.isis.core.metamodel.facetapi.FacetHolder; -import org.apache.isis.core.metamodel.facets.TypedHolder; import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet; import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract; import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead; @@ -31,8 +32,20 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification; public class ActionParameterChoicesFacetFromChoicesFacet extends ActionParameterChoicesFacetAbstract { - public ActionParameterChoicesFacetFromChoicesFacet(final FacetHolder holder) { + public static Optional<ActionParameterChoicesFacetAbstract> create( + final Optional<ChoicesFacet> choicesFacet, + final FacetHolder facetHolder) { + return choicesFacet + .map(choicesFct->new ActionParameterChoicesFacetFromChoicesFacet(choicesFct, facetHolder)); + } + + private final ChoicesFacet choicesFacet; + + private ActionParameterChoicesFacetFromChoicesFacet( + final ChoicesFacet choicesFacet, + final FacetHolder holder) { super(holder, Precedence.INFERRED); + this.choicesFacet = choicesFacet; } @Override @@ -41,14 +54,6 @@ extends ActionParameterChoicesFacetAbstract { final ActionInteractionHead head, final Can<ManagedObject> pendingArgs, final InteractionInitiatedBy interactionInitiatedBy) { - - final FacetHolder facetHolder = getFacetHolder(); - final TypedHolder paramPeer = (TypedHolder) facetHolder; - final ObjectSpecification noSpec = specForTypeElseFail(paramPeer.getType()); - final ChoicesFacet choicesFacet = noSpec.getFacet(ChoicesFacet.class); - if (choicesFacet == null) { - return Can.empty(); - } return choicesFacet.getChoices(head.getTarget(), interactionInitiatedBy); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java index 267a857ee2..cf45962c0e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java @@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.param.choices.enums; import javax.inject.Inject; import org.apache.isis.core.metamodel.context.MetaModelContext; +import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet; @@ -40,12 +41,12 @@ extends FacetFactoryAbstract { val paramType = processParameterContext.getParameterType(); - if(!getSpecificationLoader().loadSpecification(paramType).containsNonFallbackFacet(ChoicesFacet.class)) { - return; - } + val choicesFacetIfAny = getSpecificationLoader().loadSpecification(paramType) + .lookupNonFallbackFacet(ChoicesFacet.class); - val facetHolder = processParameterContext.getFacetHolder(); - addFacet(new ActionParameterChoicesFacetFromChoicesFacet(facetHolder)); + FacetUtil.addFacetIfPresent( + ActionParameterChoicesFacetFromChoicesFacet + .create(choicesFacetIfAny, processParameterContext.getFacetHolder())); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java index 5967825ed8..ff98c131b9 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java @@ -51,8 +51,7 @@ implements ImperativeFacet { super(holder); this.methods = ImperativeFacet.singleMethod(method); - this.translationContext = - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); this.patConstructor = patConstructor; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java index d4882f0441..4cf18aa50a 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java @@ -51,8 +51,7 @@ implements ImperativeFacet { super(holder); this.methods = ImperativeFacet.singleMethod(method); - this.translationContext = - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); this.patConstructor = patConstructor; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacetAbstract.java index eab95b124f..d0f11acc2f 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacetAbstract.java @@ -28,8 +28,12 @@ public abstract class PropertyChoicesFacetAbstract extends FacetAbstract impleme return PropertyChoicesFacet.class; } - public PropertyChoicesFacetAbstract(final FacetHolder holder) { + protected PropertyChoicesFacetAbstract(final FacetHolder holder) { super(type(), holder); } + protected PropertyChoicesFacetAbstract(final FacetHolder holder, final Facet.Precedence precedence) { + super(type(), holder, precedence); + } + } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacet.java index 13f9e04848..8b85cdd4eb 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacet.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacet.java @@ -18,34 +18,38 @@ */ package org.apache.isis.core.metamodel.facets.properties.choices.enums; +import java.util.Optional; + import org.apache.isis.commons.collections.Can; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; import org.apache.isis.core.metamodel.facetapi.FacetHolder; -import org.apache.isis.core.metamodel.facets.FacetedMethod; import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet; import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract; import org.apache.isis.core.metamodel.spec.ManagedObject; -import lombok.val; - -public class PropertyChoicesFacetFromChoicesFacet +public class PropertyChoicesFacetFromChoicesFacet extends PropertyChoicesFacetAbstract { - public PropertyChoicesFacetFromChoicesFacet(final FacetHolder holder) { - super(holder); + public static Optional<PropertyChoicesFacetAbstract> create( + final Optional<ChoicesFacet> choicesFacet, + final FacetHolder facetHolder) { + return choicesFacet + .map(choicesFct->new PropertyChoicesFacetFromChoicesFacet(choicesFct, facetHolder)); + } + + private final ChoicesFacet choicesFacet; + + private PropertyChoicesFacetFromChoicesFacet( + final ChoicesFacet choicesFacet, + final FacetHolder holder) { + super(holder, Precedence.INFERRED); + this.choicesFacet = choicesFacet; } @Override public Can<ManagedObject> getChoices( final ManagedObject adapter, final InteractionInitiatedBy interactionInitiatedBy) { - - val facetedMethod = (FacetedMethod) getFacetHolder(); - val methodSpec = specForTypeElseFail(facetedMethod.getType()); - val choicesFacet = methodSpec.getFacet(ChoicesFacet.class); - if (choicesFacet == null) { - return Can.empty(); - } return choicesFacet.getChoices(adapter, interactionInitiatedBy); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacetFactory.java index 04b822d358..657663e21a 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetFromChoicesFacetFactory.java @@ -21,10 +21,13 @@ package org.apache.isis.core.metamodel.facets.properties.choices.enums; import javax.inject.Inject; import org.apache.isis.core.metamodel.context.MetaModelContext; +import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet; +import lombok.val; + public class PropertyChoicesFacetFromChoicesFacetFactory extends FacetFactoryAbstract { @@ -38,12 +41,12 @@ extends FacetFactoryAbstract { final Class<?> returnType = processMethodContext.getMethod().getReturnType(); - if(!getSpecificationLoader().loadSpecification(returnType).containsNonFallbackFacet(ChoicesFacet.class)) { - return; - } + val choicesFacetIfAny = getSpecificationLoader().loadSpecification(returnType) + .lookupNonFallbackFacet(ChoicesFacet.class); - addFacet( - new PropertyChoicesFacetFromChoicesFacet(processMethodContext.getFacetHolder())); + FacetUtil.addFacetIfPresent( + PropertyChoicesFacetFromChoicesFacet + .create(choicesFacetIfAny, processMethodContext.getFacetHolder())); } } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java index 1fee027ee3..d247d2334c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java @@ -60,9 +60,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { this.getterFacetIfAny = getterFacetIfAny; this.translationService = getTranslationService(); - // sadness: same as in TranslationFactory - this.translationContext = TranslationContext.forTranslationContextHolder( - holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } @@ -87,7 +85,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { } @Override - public String hides(VisibilityContext ic) { + public String hides(final VisibilityContext ic) { final PropertyDomainEvent<?, ?> event = domainEventHelper.postEventForProperty( @@ -102,7 +100,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { } @Override - public String disables(UsabilityContext ic) { + public String disables(final UsabilityContext ic) { final PropertyDomainEvent<?, ?> event = domainEventHelper.postEventForProperty( @@ -121,7 +119,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { } @Override - public String invalidates(ValidityContext ic) { + public String invalidates(final ValidityContext ic) { if(getterFacetIfAny == null) { return null; diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java index 68ca9f1ce1..70586b7fdd 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java @@ -40,8 +40,7 @@ public class PropertyValidateFacetViaMethod extends PropertyValidateFacetAbstrac final FacetHolder holder) { super(holder); this.method = method; - this.translationContext = - TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier()); + this.translationContext = holder.getTranslationContext(); } /** diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java index 2b865712e4..c97cc98d42 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java @@ -69,10 +69,15 @@ extends ObjectSpecificationPostProcessorAbstract { final ObjectAction objectAction, final ObjectActionParameter param) { if(!hasMemberLevelChoices(param)) { - param.getElementType() - .lookupNonFallbackFacet(ChoicesFacet.class) - .ifPresent(choicesFacet -> FacetUtil - .addFacet(new ActionParameterChoicesFacetFromChoicesFacet(peerFor(param)))); + + //TODO not used: ActionParameterChoicesFacetFromChoicesFacetFactory + + val choicesFacetIfAny = param.getElementType() + .lookupNonFallbackFacet(ChoicesFacet.class); + + FacetUtil.addFacetIfPresent( + ActionParameterChoicesFacetFromChoicesFacet + .create(choicesFacetIfAny, peerFor(param))); } } @@ -87,10 +92,15 @@ extends ObjectSpecificationPostProcessorAbstract { specFacet, facetedMethodFor(prop)))); } if(!hasMemberLevelChoices(prop)) { - prop.getElementType() - .lookupNonFallbackFacet(ChoicesFacet.class) - .ifPresent(specFacet -> FacetUtil - .addFacet(new PropertyChoicesFacetFromChoicesFacet(facetedMethodFor(prop)))); + + //TODO not used: PropertyChoicesFacetFromChoicesFacetFactory + + val choicesFacetIfAny = prop.getElementType() + .lookupNonFallbackFacet(ChoicesFacet.class); + + FacetUtil.addFacetIfPresent( + PropertyChoicesFacetFromChoicesFacet + .create(choicesFacetIfAny, facetedMethodFor(prop))); } } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java index 90c7214dce..9ee63c558e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java @@ -80,7 +80,7 @@ implements MixedInMember { mixinAction.getFacetedMethod().getFeatureIdentifier().getMemberParameterClassNames()), mixinAction.getFacetedMethod(), false); - this.facetHolder = FacetHolderAbstract.layered( + this.facetHolder = FacetHolderAbstract.delegated( super.getFeatureIdentifier(), mixinAction.getFacetedMethod()); this.mixinType = mixinType; diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java index fae5884b82..11d16d29ee 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java @@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract; import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet; -import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetFromActionReturn; import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacet; import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName; import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet; @@ -97,7 +96,7 @@ implements MixedInMember { _MixedInMemberNamingStrategy.determineIdFrom(mixinAction)), mixinAction.getFacetedMethod(), typeOfSpec(mixinAction)); - this.facetHolder = FacetHolderAbstract.layered( + this.facetHolder = FacetHolderAbstract.delegated( super.getFeatureIdentifier(), mixinAction.getFacetedMethod()); @@ -106,11 +105,10 @@ implements MixedInMember { this.mixeeSpec = mixeeSpec; // - // ensure the mixedIn collection cannot be modified, and derive its TypeOfFaccet + // ensure the mixedIn collection cannot be modified, and infer its TypeOfFaccet // FacetUtil.addFacet(new SnapshotExcludeFacetFromImmutableMember(this)); FacetUtil.addFacet(disabledFacet()); - FacetUtil.addFacet(new TypeOfFacetFromActionReturn(getElementType().getCorrespondingClass(), this)); // adjust name if necessary val isExplicitlyNamed = lookupNonFallbackFacet(MemberNamedFacet.class) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java index e6c3f0aca1..c1f6cfb0b6 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java @@ -80,7 +80,7 @@ implements MixedInMember { _MixedInMemberNamingStrategy.determineIdFrom(mixinAction)), mixinAction.getFacetedMethod(), mixinAction.getReturnType()); - this.facetHolder = FacetHolderAbstract.layered( + this.facetHolder = FacetHolderAbstract.delegated( super.getFeatureIdentifier(), mixinAction.getFacetedMethod()); diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java index 3e1b586f93..1655700444 100644 --- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java +++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderComparatorTest.java @@ -64,7 +64,7 @@ public class DeweyOrderComparatorTest extends TestCase { @Rule public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES); - static TranslationContext ctx = TranslationContext.ofName("test"); + static TranslationContext ctx = TranslationContext.named("test"); @Override protected void setUp() { diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java index 4fa22f236b..6fd973f0a1 100644 --- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java +++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java @@ -92,7 +92,7 @@ public class DeweyOrderSetTest extends TestCase { @Rule public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES); - static TranslationContext ctx = TranslationContext.ofName("test"); + static TranslationContext ctx = TranslationContext.named("test"); @Override protected void setUp() { diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java index 421f47953f..edaed97b08 100644 --- a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java +++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java @@ -80,7 +80,7 @@ public class PoReaderTest { public void singleContext() throws Exception { // given - final TranslationContext context = TranslationContext.ofName( + final TranslationContext context = TranslationContext.named( "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()"); final String msgId = "Work of art"; final String msgStr = "Objet d'art"; @@ -107,9 +107,9 @@ public class PoReaderTest { public void multipleContext() throws Exception { // given - final TranslationContext context1 = TranslationContext.ofName( + final TranslationContext context1 = TranslationContext.named( "fixture.simple.SimpleObjectsFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)"); - final TranslationContext context2 = TranslationContext.ofName( + final TranslationContext context2 = TranslationContext.named( "org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)"); final String msgId = "Parameters"; final String msgStr = "Paramètres"; @@ -142,12 +142,12 @@ public class PoReaderTest { public void multipleBlocks() throws Exception { // given - final TranslationContext context1 = TranslationContext.ofName( + final TranslationContext context1 = TranslationContext.named( "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()"); final String msgid1 = "Work of art"; final String msgstr1 = "Objet d'art"; - final TranslationContext context2 = TranslationContext.ofName( + final TranslationContext context2 = TranslationContext.named( "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#lookup()"); final String msgid2 = "Lookup"; final String msgstr2 = "Look up"; @@ -189,7 +189,7 @@ public class PoReaderTest { public void withPlurals() throws Exception { // given - final TranslationContext context = TranslationContext.ofName( + final TranslationContext context = TranslationContext.named( "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()"); final String msgid = "Work of art"; final String msgid_plural = "Works of art"; @@ -236,7 +236,7 @@ public class PoReaderTest { } }; - TranslationContext context = TranslationContext.ofName("someContext"); + TranslationContext context = TranslationContext.named("someContext"); // when final String translated = poReader.translate(context, "Something to translate"); diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java index 8218e15d61..2478a7b0b5 100644 --- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java +++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java @@ -29,6 +29,7 @@ import javax.inject.Inject; import org.assertj.core.api.Assumptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; @@ -65,7 +66,7 @@ import lombok.val; IsisPresets.SilenceProgrammingModel }) //uncomment if intended only for manual verification. -//@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true") +@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true") class MetaModelRegressionTest { @Inject MetaModelServiceMenu metaModelServiceMenu; diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistry.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistry.java index b5b0fca63c..01b461f9c1 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistry.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/registry/ComponentFactoryRegistry.java @@ -88,10 +88,10 @@ public interface ComponentFactoryRegistry { Component addOrReplaceComponent(MarkupContainer markupContainer, String id, ComponentType componentType, IModel<?> model); /** - * As per {@link #createComponent(ComponentType, String, IModel)}, but with + * As per {@link #createComponent(String, ComponentType, IModel)}, but with * the wicket id derived from the {@link ComponentType}. * - * @see #createComponent(ComponentType, String, IModel) + * @see #createComponent(String, ComponentType, IModel) */ Component createComponent(ComponentType componentType, IModel<?> model); diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java index 338fcbf671..162bad71dd 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanelFactory.java @@ -18,6 +18,7 @@ */ package org.apache.isis.viewer.wicket.ui.components.scalars.value.fallback; + import org.apache.wicket.Component; import org.apache.wicket.model.IModel; @@ -36,7 +37,8 @@ extends ComponentFactoryScalarAbstract { private static final long serialVersionUID = 1L; public ValueFallbackPanelFactory() { - super(ValueFallbackPanel.class); // not asking the supertype to validate types, so no value types need be provided. + // not asking the super-type to validate types, so no value types need be provided. + super(ValueFallbackPanel.class); } @Override @@ -48,8 +50,9 @@ extends ComponentFactoryScalarAbstract { if(!scalarModel.getScalarTypeSpec().isValue()) { return ApplicationAdvice.DOES_NOT_APPLY; } + final boolean hasChoices = scalarModel.hasChoices(); - // autoComplete not supported on values, only references + // autoComplete not supported for values, only for references // final boolean hasAutoComplete = scalarModel.hasAutoComplete(); return appliesIf( !(hasChoices /*|| hasAutoComplete*/) ); } diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2PanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2PanelFactory.java index ecdb0f7e87..0ddece17da 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2PanelFactory.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2PanelFactory.java @@ -43,7 +43,7 @@ public class ValueChoicesSelect2PanelFactory extends ComponentFactoryAbstract { } val scalarModel = (ScalarModel) model; - // autoComplete not supported on values, only references + // autoComplete not supported for values, only for references // this is because there is no easy way in the ChoiceProvider to convert the list of Ids (strings) // into corresponding ObjectAdapterMemento's. // see subclasses of ObjectAdapterMementoProviderAbstract