You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/09/01 09:59:46 UTC
[isis] branch master updated: ISIS-2774: fixes object level
visibility and usability support method detection
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 ee7d6ee ISIS-2774: fixes object level visibility and usability support method detection
ee7d6ee is described below
commit ee7d6eea4de45f2776e62677cd4ed3be98fa479f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 1 11:59:35 2021 +0200
ISIS-2774: fixes object level visibility and usability support method
detection
---
.../method/DisabledObjectFacetViaMethod.java | 8 ++---
.../DisabledObjectFacetViaMethodFactory.java | 7 ++--
.../method/HiddenObjectFacetViaMethodFactory.java | 37 +++++++---------------
.../DomainModelTest_usingGoodDomain.java | 10 ++++--
...lWithAnnotationOptionalUsingPrivateSupport.java | 22 +++++++++++--
.../interaction/DomainObjectTesterFactory.java | 32 +++++++++++++++++--
6 files changed, 72 insertions(+), 44 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
index fa9ea1e..7dc3b13 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethod.java
@@ -26,7 +26,6 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.Identifier.Type;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -43,17 +42,14 @@ extends DisabledObjectFacetAbstract
implements ImperativeFacet {
@Getter(onMethod_ = {@Override}) private final @NonNull Can<Method> methods;
- private TranslationService translationService;
private final TranslationContext translationContext;
public DisabledObjectFacetViaMethod(
final Method method,
- final TranslationService translationService,
final TranslationContext translationContext,
final FacetHolder holder) {
super(holder);
this.methods = ImperativeFacet.singleMethod(method);
- this.translationService = translationService;
this.translationContext = translationContext;
}
@@ -72,7 +68,7 @@ implements ImperativeFacet {
}
if(returnValue instanceof TranslatableString) {
final TranslatableString ts = (TranslatableString) returnValue;
- return ts.translate(translationService, translationContext);
+ return ts.translate(getTranslationService(), translationContext);
}
return null;
}
@@ -86,7 +82,7 @@ implements ImperativeFacet {
@Override
public DisabledObjectFacetViaMethod clone(final FacetHolder holder) {
val method = methods.getFirstOrFail();
- return new DisabledObjectFacetViaMethod(method, translationService, translationContext, holder);
+ return new DisabledObjectFacetViaMethod(method, translationContext, holder);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
index 86cb128..8f91beb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.facets.object.disabled.method;
import javax.inject.Inject;
-import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.i18n.TranslationContext;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -64,23 +63,21 @@ extends MethodPrefixBasedFacetFactoryAbstract {
public void process(final ProcessClassContext processClassContext) {
val cls = processClassContext.getCls();
val facetHolder = processClassContext.getFacetHolder();
- val paramTypes = new Class<?>[] {Identifier.Type.class};
val method = MethodFinderUtils.findMethod_returningText(
MethodFinderOptions
.objectSupport(processClassContext.getIntrospectionPolicy()),
cls,
METHOD_NAME,
- paramTypes);
+ NO_ARG);
if (method == null) {
return;
}
- val translationService = getTranslationService();
// sadness: same logic as in I18nFacetFactory
val translationContext = TranslationContext.forMethod(method);
- addFacet(new DisabledObjectFacetViaMethod(method, translationService, translationContext, facetHolder));
+ addFacet(new DisabledObjectFacetViaMethod(method, translationContext, facetHolder));
processClassContext.removeMethod(method);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
index 788c019..92f6f9d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
@@ -19,13 +19,10 @@
package org.apache.isis.core.metamodel.facets.object.hidden.method;
-import java.lang.reflect.Method;
-
import javax.inject.Inject;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactory;
@@ -63,12 +60,18 @@ extends MethodPrefixBasedFacetFactoryAbstract {
@Override
public void process(final ProcessClassContext processClassContext) {
- for (final Class<?> returnType : new Class<?>[] { Boolean.class, boolean.class }) {
- if (addFacetIfMethodFound(processClassContext, returnType)) {
- return;
- }
+ val cls = processClassContext.getCls();
+ val facetHolder = processClassContext.getFacetHolder();
+
+ val method = MethodFinderUtils.findMethod_returningBoolean(
+ MethodFinderOptions
+ .objectSupport(processClassContext.getIntrospectionPolicy()),
+ cls, METHOD_NAME, NO_ARG);
+ if (method == null) {
+ return;
}
- return;
+ addFacet(new HiddenObjectFacetViaMethod(method, facetHolder));
+ processClassContext.removeMethod(method);
}
@Override
@@ -82,22 +85,4 @@ extends MethodPrefixBasedFacetFactoryAbstract {
.ifPresent(FacetUtil::addFacet);
}
- private boolean addFacetIfMethodFound(
- final ProcessClassContext processClassContext,
- final Class<?> returnType) {
- final Class<?> cls = processClassContext.getCls();
- final FacetHolder facetHolder = processClassContext.getFacetHolder();
-
- final Method method = MethodFinderUtils.findMethod(
- MethodFinderOptions
- .objectSupport(processClassContext.getIntrospectionPolicy()),
- cls, METHOD_NAME, returnType, NO_ARG);
- if (method == null) {
- return false;
- }
- FacetUtil.addFacet(new HiddenObjectFacetViaMethod(method, facetHolder));
- processClassContext.removeMethod(method);
- return true;
- }
-
}
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index 6020dbb..a5d79f7 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -45,6 +45,7 @@ import org.apache.isis.applib.services.metamodel.Config;
import org.apache.isis.applib.services.metamodel.MetaModelService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -515,7 +516,8 @@ class DomainModelTest_usingGoodDomain {
act.assertExists(true);
act.assertIsExplicitlyAnnotated(true);
act.assertVisibilityIsNotVetoed();
- act.assertUsabilityIsVetoedWith("action disabled for testing purposes");
+ act.assertUsabilityIsVetoedWithAll(
+ Can.of("object disabled for testing purposes", "action disabled for testing purposes"));
act.assertInvocationResult("Hallo World!", List.of());
// -- PROPERTY WITH PRIVATE GETTER AND SETTER
@@ -525,7 +527,8 @@ class DomainModelTest_usingGoodDomain {
prop.assertExists(true);
prop.assertIsExplicitlyAnnotated(true);
prop.assertVisibilityIsNotVetoed();
- prop.assertUsabilityIsVetoedWith("property disabled for testing purposes");
+ prop.assertUsabilityIsVetoedWithAll(
+ Can.of("object disabled for testing purposes", "property disabled for testing purposes"));
prop.assertValue("Foo");
prop.assertValueUpdate("Bar");
@@ -536,7 +539,8 @@ class DomainModelTest_usingGoodDomain {
coll.assertExists(true);
coll.assertIsExplicitlyAnnotated(true);
coll.assertVisibilityIsNotVetoed();
- coll.assertUsabilityIsVetoedWith("collection disabled for testing purposes");
+ coll.assertUsabilityIsVetoedWithAll(
+ Can.of("object disabled for testing purposes", "collection disabled for testing purposes"));
coll.assertCollectionElements(List.of("Foo"));
}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
index 4db5a3d..d0ba85e 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
@@ -46,6 +46,8 @@ implements Serializable {
private static final long serialVersionUID = 1L;
+ // -- PUBLIC ACTION WITH PRIVATE SUPPORT
+
@Action
public String myAction() {
return "Hallo World!";
@@ -57,7 +59,7 @@ implements Serializable {
return "action disabled for testing purposes";
}
- // -- PROPERTY WITH PRIVATE GETTER AND SETTER
+ // -- PROPERTY WITH PUBLIC GETTER AND SETTER, PRIVATE SUPPORT
@Property
@Getter @Setter
@@ -69,7 +71,7 @@ implements Serializable {
return "property disabled for testing purposes";
}
- // -- COLLECTION WITH PRIVATE GETTER AND SETTER
+ // -- COLLECTION WITH PUBLIC GETTER AND SETTER, PRIVATE SUPPORT
@Collection
@Getter @Setter
@@ -81,5 +83,21 @@ implements Serializable {
return "collection disabled for testing purposes";
}
+ // -- PRIVATE OBJECT SUPPORT
+
+ // allowed to be private since 2.0.0-M7
+ @MemberSupport//FIXME[ISIS-2774] be more specific, don't allow @MemberSupport
+ private String disabled() {
+ return "object disabled for testing purposes";
+ }
+
+ // allowed to be private since 2.0.0-M7
+ @MemberSupport//FIXME[ISIS-2774] be more specific, don't allow @MemberSupport
+ private boolean hidden() {
+ return false;
+ }
+
+ // -- PRIVATE OBJECT LAYOUT SUPPORT
+
}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
index b01929b..4c26794 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
import org.apache.isis.core.metamodel.interactions.managed.CollectionInteraction;
import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
@@ -335,6 +336,33 @@ public class DomainObjectTesterFactory {
assertUsabilityIsVetoedWith(null);
}
+ public final void assertUsabilityIsVetoedWithAll(final Can<String> expectedVetoReasons) {
+
+ assertExists(true);
+
+ managedMemberIfAny
+ .ifPresent(managedCollection->{
+ interactionService.runAnonymous(()->{
+ final String actualVetoReason = managedCollection
+ .checkUsability()
+ .map(veto->veto.getReason())
+ .orElse(null);
+
+ if(!expectedVetoReasons.isEmpty()
+ && actualVetoReason==null) {
+ fail("usability not vetoed, while expecting all of: " + expectedVetoReasons.toList());
+ }
+
+ expectedVetoReasons
+ .forEach(expectedVetoReason->{
+ assertTrue(actualVetoReason.contains(expectedVetoReason),
+ ()->String.format("usability veto %s is not containing %s",
+ actualVetoReason, expectedVetoReason));
+ });
+ });
+ });
+ }
+
public final void assertUsabilityIsVetoedWith(final @Nullable String expectedVetoReason) {
final boolean isExpectedUsable = expectedVetoReason == null;
@@ -346,12 +374,12 @@ public class DomainObjectTesterFactory {
managedMemberIfAny
.ifPresent(managedCollection->{
interactionService.runAnonymous(()->{
- final String actualVetoResaon = managedCollection
+ final String actualVetoReason = managedCollection
.checkUsability()
.map(veto->veto.getReason())
.orElse(null);
- assertEquals(expectedVetoReason, actualVetoResaon);
+ assertEquals(expectedVetoReason, actualVetoReason);
});
});
}