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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 5c9221d00c CAUSEWAY-3697: deprecates
DomainService(nature=NatureOfService..)
5c9221d00c is described below
commit 5c9221d00cd73671207ebf5059d0bcb60ea67d70
Author: Andi Huber <[email protected]>
AuthorDate: Thu Mar 14 11:36:11 2024 +0100
CAUSEWAY-3697: deprecates DomainService(nature=NatureOfService..)
- leaving some TODO markers for implementing a SPI
---
api/applib/src/main/java/module-info.java | 1 +
.../causeway/applib/annotation/DomainService.java | 4 +-
.../applib/annotation/NatureOfService.java | 74 +-----------
.../services/appfeatui/ApplicationFeatureMenu.java | 5 +-
.../services/confview/ConfigurationMenu.java | 5 +-
.../services/metamodel/MetaModelServiceMenu.java | 5 +-
.../scope/ActionContributionFilterService.java | 29 +++--
.../applib/services/user/ImpersonateMenu.java | 5 +-
.../applib/services/user/ImpersonateStopMenu.java | 5 +-
.../causeway/applib/services/userui/UserMenu.java | 5 +-
.../config/beans/CausewayBeanTypeClassifier.java | 26 +++++
.../beans/CausewayBeanTypeClassifierDefault.java | 5 +-
core/metamodel/src/main/java/module-info.java | 1 -
.../WebApiOnlyActionFacetAbstract.java | 39 -------
...viceMenuFacetFromDomainServiceFacetFactory.java | 65 -----------
...ebApiOnlyActionFacetFromDomainServiceFacet.java | 55 ---------
.../object/domainservice/DomainServiceFacet.java | 54 +++------
.../domainservice/DomainServiceFacetAbstract.java | 26 +++--
.../DomainServiceFacetAnnotationFactory.java | 3 +-
.../DomainServiceFacetForAnnotation.java | 28 ++++-
.../RemoveAnnotatedMethodsFacetFactory.java | 18 +--
.../LogicalTypeFacetFromClassNameFactory.java | 5 +-
.../dflt/ProgrammingModelFacetsJava11.java | 3 -
.../services/metamodel/MetaModelExporter.java | 35 +-----
.../core/metamodel/spec/ObjectSpecification.java | 5 +
.../specimpl/dflt/ObjectSpecificationDefault.java | 13 +++
...tionFacetFromDomainServiceFacetFactoryTest.java | 129 ---------------------
.../DomainServiceFacetAnnotationFactoryTest.java | 3 +-
.../facets/param/name/ParameterNameFacetTest.java | 2 +-
.../bootstrap/MenuBarsServiceBootstrap.java | 14 +--
.../runtimeservices/menubars/bootstrap/Bar.java | 5 +-
.../security/authentication/logout/LogoutMenu.java | 5 +-
.../commandlog/applib/app/CommandLogMenu.java | 3 +-
.../docgen/help/menu/DocumentationMenu.java | 3 +-
.../bulkupdate/BulkUpdateMenuForDemoToDoItem.java | 5 +-
.../ExcelPivotByCategoryAndSubcategoryMenu.java | 5 +-
.../ExcelUploadServiceForDemoToDoItem.java | 5 +-
.../todomodule/dom/ExcelDemoToDoItemMenu.java | 5 +-
.../executionlog/applib/app/ExecutionLogMenu.java | 3 +-
.../applib/app/ExecutionOutboxMenu.java | 5 +-
.../applib/restapi/OutboxRestApi.java | 3 +-
.../github/menu/LayoutLoadersGitHubMenu.java | 3 +-
.../audittrail/applib/app/AuditTrailMenu.java | 3 +-
.../permission/menu/ApplicationPermissionMenu.java | 5 +-
.../applib/role/menu/ApplicationRoleMenu.java | 5 +-
.../tenancy/menu/ApplicationTenancyMenu.java | 5 +-
.../applib/user/menu/ApplicationUserMenu.java | 5 +-
.../secman/applib/user/menu/MeService.java | 5 +-
.../sessionlog/applib/app/SessionLogMenu.java | 3 +-
.../restapi/CommandRetrievalOnPrimaryService.java | 3 +-
.../testdomain/jdo/JdoInventoryResource.java | 2 -
.../testdomain/jpa/JpaInventoryResource.java | 3 +-
.../causeway/testdomain/rospec/RoSpecSampler.java | 3 +-
.../dom/FakeDataDemoObjectWithAllMenu.java | 5 +-
.../applib/fixturescripts/FixtureScripts.java | 5 +-
.../h2console/ui/services/H2ManagerMenu.java | 5 +-
.../hsqldbmgr/dom/services/HsqlDbManagerMenu.java | 5 +-
.../viewer/test/domain/admin/AdminMenu.java | 9 +-
.../viewer/test/domain/calc/Calculator.java | 53 +++++----
.../viewer/test/domain/dept/Departments.java | 4 +-
.../graphql/viewer/test/domain/dept/DeptHeads.java | 3 +-
.../graphql/viewer/test/domain/dept/People.java | 8 +-
.../graphql/viewer/test/domain/dept/Staff.java | 4 +-
.../viewer/test/domain/i18n/I18nCalculator.java | 3 +-
.../swagger/internal/_OpenApiModelFactory.java | 2 +-
...sewayViewerRestfulObjectsIntegTestAbstract.java | 9 +-
.../test/domain/dom/Departments.java | 4 +-
.../restfulobjects/test/domain/dom/DeptHeads.java | 3 +-
.../restfulobjects/test/domain/dom/People.java | 8 +-
.../restfulobjects/test/domain/dom/Staff.java | 4 +-
.../test/scenarios/dept/Department_IntegTest.java | 15 +--
.../resources/DomainServiceResourceServerside.java | 5 +-
72 files changed, 242 insertions(+), 671 deletions(-)
diff --git a/api/applib/src/main/java/module-info.java
b/api/applib/src/main/java/module-info.java
index bfd4bca708..b4a89c800f 100644
--- a/api/applib/src/main/java/module-info.java
+++ b/api/applib/src/main/java/module-info.java
@@ -97,6 +97,7 @@ module org.apache.causeway.applib {
exports org.apache.causeway.applib.services.repository;
exports org.apache.causeway.applib.services.routing;
exports org.apache.causeway.applib.services.scratchpad;
+ exports org.apache.causeway.applib.services.scope;
exports org.apache.causeway.applib.services.session;
exports org.apache.causeway.applib.services.sitemap;
exports org.apache.causeway.applib.services.sudo;
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainService.java
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainService.java
index d0c6b2df72..b4f7b14a81 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainService.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/DomainService.java
@@ -68,8 +68,10 @@ public @interface DomainService {
* The nature of this service, either in the UI or REST only
*
* @see DomainObject#nature()
+ * @deprecated has no scope limiting effect any longer, see [CAUSEWAY-3697]
*/
+ @Deprecated(forRemoval = true, since = "2.0.0-RC4")
NatureOfService nature()
- default NatureOfService.BOTH;
+ default NatureOfService.VIEW;
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/NatureOfService.java
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/NatureOfService.java
index 10f70d0167..129ba10361 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/NatureOfService.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/NatureOfService.java
@@ -19,78 +19,12 @@
package org.apache.causeway.applib.annotation;
/**
- * The different sorts of domain services recognized by Causeway, as specified
in {@link DomainService#nature()}
+ * Corresponds to {@link DomainService#nature()}
*
- * @since 1.x {@index}
+ * @deprecated has no scope limiting effect any longer, see [CAUSEWAY-3697]
*/
+@Deprecated(forRemoval = true, since = "2.0.0-RC4")
public enum NatureOfService {
- /**
- * The service's actions appear only in the menu bar human-usable UIs
(such as Wicket viewer).
- * They do <i>not</i> appear in any REST or GraphQL APIs.
- */
- WEB_UI, //TODO perhaps rename to UI_ONLY?
-
- /**
- * The service's actions should only be visible in the Web API exposed by
the Restful Objects viewer and the
- * GraphQL viewer. They do <i>not</i> appear in any human-usable Web UIs
(such as Wicket viewer)
- */
- WEB_API, //TODO perhaps rename to WEBAPI_ONLY?
-
- /**
- * The service's actions appear in the menu bar of Web UIs (such as Wicket
viewer), and also appear in the
- * Web APIs (Restful Objects viewer and GraphQL viewer).
- *
- * @apiNote
- * Contributing actions to the 'viewer' implies, that these must also be
exposed to the REST API,
- * simply because alternative viewers might be solely based on the
provided REST end-points.
- */
- BOTH, //TODO perhaps rename to ENABLED_EVERYWHERE?
-
- /**
- * @deprecated use {@link #BOTH} instead
- * @see NatureOfService#BOTH
- */
- @Deprecated
VIEW,
-
- /**
- * @deprecated use {@link #WEB_API} instead
- * @see NatureOfService#WEB_API
- */
- @Deprecated
- REST
-
- ;
-
- // -- BASIC PREDICATES
-
- /**
- * Whether a service contributes its actions to both human-usable UIs and
the Web APIs.
- *
- * @see NatureOfService#BOTH
- */
- public boolean isEnabledEverywhere() {
- return this == BOTH
- || this == VIEW;
- }
-
- /**
- * Whether a service contributes its actions to human-usable UIs.
- * @see NatureOfService#WEB_UI
- */
- public boolean isEnabledForUi() {
- return isEnabledEverywhere()
- || this == WEB_UI;
- }
-
- /**
- * Whether a service contributes its actions to Web APIs (REST and GraphQL)
- * @see NatureOfService#WEB_API
- */
- public boolean isEnabledForWebApi() {
- return isEnabledEverywhere()
- || this == WEB_API
- || this == REST;
- }
-
+ REST;
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/appfeatui/ApplicationFeatureMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/appfeatui/ApplicationFeatureMenu.java
index 8dc47b3e47..f323c1b010 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/appfeatui/ApplicationFeatureMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/appfeatui/ApplicationFeatureMenu.java
@@ -29,7 +29,6 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.RestrictTo;
@@ -43,9 +42,7 @@ import
org.apache.causeway.commons.internal.collections._Lists;
/**
* @since 2.x {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Prototyping",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/confview/ConfigurationMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/confview/ConfigurationMenu.java
index edbcc58bc2..1728fdc723 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/confview/ConfigurationMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/confview/ConfigurationMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -41,9 +40,7 @@ import lombok.RequiredArgsConstructor;
*
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
index 8d37c45796..87ca4373cf 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
@@ -34,7 +34,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
@@ -59,9 +58,7 @@ import lombok.val;
* @since 2.0 {@index}
*/
@Named(MetaModelServiceMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Prototyping",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacet.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/scope/ActionContributionFilterService.java
similarity index 51%
rename from
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacet.java
rename to
api/applib/src/main/java/org/apache/causeway/applib/services/scope/ActionContributionFilterService.java
index 8b9eaa134f..7167d1fade 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacet.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/scope/ActionContributionFilterService.java
@@ -16,21 +16,30 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.core.metamodel.facets.actions.notinservicemenu;
+package org.apache.causeway.applib.services.scope;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.interactions.VisibilityContext;
+import org.springframework.lang.Nullable;
+
+import org.apache.causeway.applib.annotation.DomainService;
+import org.apache.causeway.applib.id.LogicalType;
/**
- * Indicates that the (repository) action should not be contributed to any
- * objects.
+ * Optional SPI to limit the scope of {@link DomainService} actions that
contribute to UI or Web-API(s).
*
- * <p>
- * In the standard Apache Causeway Programming Model, corresponds to
annotating the
- * action method using <tt>@NotContributed</tt>.
+ * @since 2.0.0 {index}
*/
-public interface WebApiOnlyActionFacet extends Facet {
+public interface ActionContributionFilterService {
+
+ /**
+ * Whether {@link LogicalType} represents a domain-service
+ * that contributes actions to the UI.
+ */
+ boolean isContributingToUi(final @Nullable LogicalType logicalType);
- String hides(VisibilityContext ic);
+ /**
+ * Whether {@link LogicalType} represents a domain-service
+ * that contributes actions to the Web API(s).
+ */
+ boolean isContributingToWebApi(final @Nullable LogicalType logicalType);
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateMenu.java
index 12637155e2..fdc1991b7f 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateMenu.java
@@ -31,7 +31,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.RestrictTo;
@@ -56,9 +55,7 @@ import lombok.val;
*
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(ImpersonateMenu.LOGICAL_TYPE_NAME)
@DomainServiceLayout(
named = "Security",
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateStopMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateStopMenu.java
index fca90d2ac5..e827c5f828 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateStopMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/user/ImpersonateStopMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.Redirect;
@@ -51,9 +50,7 @@ import lombok.RequiredArgsConstructor;
*
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(ImpersonateStopMenu.LOGICAL_TYPE_NAME)
@DomainServiceLayout(
named = "Security",
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/services/userui/UserMenu.java
b/api/applib/src/main/java/org/apache/causeway/applib/services/userui/UserMenu.java
index eae41ed51d..eceaf91983 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/services/userui/UserMenu.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/services/userui/UserMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -41,9 +40,7 @@ import lombok.RequiredArgsConstructor;
*
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(UserMenu.LOGICAL_TYPE_NAME)
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
index 84cd4a9ee3..a12e7d8016 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifier.java
@@ -18,11 +18,16 @@
*/
package org.apache.causeway.core.config.beans;
+import java.util.Optional;
+
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.support.SpringFactoriesLoader;
+import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.context._Context;
+import org.apache.causeway.commons.internal.reflection._ClassCache;
import lombok.NonNull;
@@ -32,6 +37,27 @@ import lombok.NonNull;
*/
public interface CausewayBeanTypeClassifier {
+ public enum Attributes {
+ /**
+ * Corresponds to presence of a {@link DomainService} annotation.
+ * @see _ClassCache#lookupAttribute(Class, String)
+ */
+ HAS_DOMAIN_SERVICE_SEMANTICS,
+
+ /**
+ * Corresponds to {@link DomainObject#mixinMethod()}.
+ * @see _ClassCache#lookupAttribute(Class, String)
+ */
+ MIXIN_MAIN_METHOD_NAME;
+
+ public void set(final _ClassCache classCache, final Class<?> type,
final String attributeValue) {
+ classCache.setAttribute(type, this.name(), attributeValue);
+ }
+ public Optional<String> lookup(final _ClassCache classCache, final
Class<?> type) {
+ return classCache.lookupAttribute(type, this.name());
+ }
+ }
+
// -- INTERFACE
/**
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
index d47a261f3c..2debdfc68d 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
@@ -51,7 +51,7 @@ implements CausewayBeanTypeClassifier {
private final Can<CausewayBeanTypeClassifier> classifierPlugins =
CausewayBeanTypeClassifier.get();
private final _ClassCache classCache = _ClassCache.getInstance();
-
+
// handle arbitrary types ...
@Override
public CausewayBeanMetaData classify(
@@ -109,6 +109,7 @@ implements CausewayBeanTypeClassifier {
val aDomainService = _Annotations.synthesize(type,
DomainService.class);
if(aDomainService.isPresent()) {
val logicalType = LogicalType.infer(type);
+ Attributes.HAS_DOMAIN_SERVICE_SEMANTICS.set(classCache, type,
"true");
return CausewayBeanMetaData
.injectable(BeanSort.MANAGED_BEAN_CONTRIBUTING,
logicalType);
}
@@ -139,7 +140,7 @@ implements CausewayBeanTypeClassifier {
.indifferent(BeanSort.MANAGED_BEAN_CONTRIBUTING, type);
case MIXIN:
// memoize mixin main name
- classCache.setAttribute(type, "mixin-main-method-name",
aDomainObject.mixinMethod());
+ Attributes.MIXIN_MAIN_METHOD_NAME.set(classCache, type,
aDomainObject.mixinMethod());
return CausewayBeanMetaData.causewayManaged(BeanSort.MIXIN,
type);
case ENTITY:
return
CausewayBeanMetaData.entity(PersistenceStack.UNSPECIFIED,
LogicalType.infer(type));
diff --git a/core/metamodel/src/main/java/module-info.java
b/core/metamodel/src/main/java/module-info.java
index e3f8907630..1a13c1ce55 100644
--- a/core/metamodel/src/main/java/module-info.java
+++ b/core/metamodel/src/main/java/module-info.java
@@ -29,7 +29,6 @@ open module org.apache.causeway.core.metamodel {
//XXX ... org.apache.causeway.core.metamodel.facets.* : probably don't
expose directly
exports
org.apache.causeway.core.metamodel.facets.actions.action.invocation;
exports org.apache.causeway.core.metamodel.facets.actions.layout;
- exports org.apache.causeway.core.metamodel.facets.actions.notinservicemenu;
exports org.apache.causeway.core.metamodel.facets.actions.semantics;
exports org.apache.causeway.core.metamodel.facets.actcoll.typeof;
exports org.apache.causeway.core.metamodel.facets.all.described;
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacetAbstract.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacetAbstract.java
deleted file mode 100644
index 11e2dca243..0000000000
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/WebApiOnlyActionFacetAbstract.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.core.metamodel.facets.actions.notinservicemenu;
-
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-
-public abstract class WebApiOnlyActionFacetAbstract extends FacetAbstract
implements WebApiOnlyActionFacet {
-
- private static final Class<? extends Facet> type() {
- return WebApiOnlyActionFacet.class;
- }
-
- public WebApiOnlyActionFacetAbstract(final FacetHolder holder) {
- super(type(), holder);
- }
-
- public WebApiOnlyActionFacetAbstract(final FacetHolder holder, final
Facet.Precedence precedence) {
- super(type(), holder, precedence);
- }
-
-}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactory.java
deleted file mode 100644
index 487c5d6c1e..0000000000
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.derived;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.NatureOfService;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.FacetedMethod;
-import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-import lombok.val;
-
-public class NotInServiceMenuFacetFromDomainServiceFacetFactory
-extends FacetFactoryAbstract {
-
- @Inject
- public NotInServiceMenuFacetFromDomainServiceFacetFactory(final
MetaModelContext mmc) {
- super(mmc, FeatureType.ACTIONS_ONLY);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- val method = processMethodContext.getMethod();
- final Class<?> declaringClass = method.getDeclaringClass();
- final ObjectSpecification spec =
getSpecificationLoader().loadSpecification(declaringClass);
-
- if(spec == null) {
- return;
- }
-
- spec.lookupNonFallbackFacet(DomainServiceFacet.class)
- .ifPresent(domainServiceFacet->{
- final NatureOfService natureOfService =
domainServiceFacet.getNatureOfService();
- if(natureOfService.isEnabledForUi()) {
- return;
- }
- final FacetedMethod facetHolder =
processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new
WebApiOnlyActionFacetFromDomainServiceFacet(natureOfService, facetHolder));
- });
-
- }
-
-}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacet.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacet.java
deleted file mode 100644
index b0f9adddab..0000000000
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacet.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.derived;
-
-
-import java.util.function.BiConsumer;
-
-import org.apache.causeway.applib.annotation.NatureOfService;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.WebApiOnlyActionFacetAbstract;
-import org.apache.causeway.core.metamodel.interactions.VisibilityContext;
-
-
-public class WebApiOnlyActionFacetFromDomainServiceFacet
-extends WebApiOnlyActionFacetAbstract {
-
- private final NatureOfService natureOfService;
-
- public WebApiOnlyActionFacetFromDomainServiceFacet(
- final NatureOfService natureOfService, final FacetHolder holder) {
- super(holder, Precedence.HIGH); // facet has final say, don't override
- this.natureOfService = natureOfService;
- }
-
- @Override
- public String hides(final VisibilityContext ic) {
- return String.format("@DomainService(nature=%s) annotation present",
natureOfService);
- }
-
- NatureOfService getNatureOfService() {
- return natureOfService;
- }
-
- @Override
- public void visitAttributes(final BiConsumer<String, Object> visitor) {
- super.visitAttributes(visitor);
- visitor.accept("natureOfService", natureOfService);
- }
-}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
index fafff2a6cb..79d02c8bdf 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
@@ -18,53 +18,37 @@
*/
package org.apache.causeway.core.metamodel.facets.object.domainservice;
-import java.util.Optional;
+import java.util.function.Predicate;
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.annotation.NatureOfService;
-import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-/**
- * Corresponds to annotating the class with the {@link
org.apache.causeway.applib.annotation.DomainService} annotation.
- */
public interface DomainServiceFacet extends Facet {
/**
- * Corresponds to {@link
org.apache.causeway.applib.annotation.DomainService#nature()}.
- *
+ * Whether facetHolder represents a service that contributes actions to
the UI.
+ * May or may not also contribute to the Web API(s).
*/
- NatureOfService getNatureOfService();
-
- // -- UTILITY
-
- static Optional<NatureOfService> getNatureOfService(final @Nullable
FacetHolder facetHolderIfAny) {
- return Optional.ofNullable(facetHolderIfAny)
- .map(facetHolder->facetHolder.getFacet(DomainServiceFacet.class))
- .filter(_NullSafe::isPresent)
- .map(DomainServiceFacet::getNatureOfService);
- }
+ boolean isContributingToUi();
/**
- * @param facetHolderIfAny - null-able
- * @return whether facetHolder represents a service that contributes
actions to the Web UI (may or may not also contribute to the Web APIs)
+ * Whether facetHolder represents a service that contributes actions the
Web API(s).
+ * May or may not also contribute to the UI.
*/
- static boolean isContributingToUi(final @Nullable FacetHolder
facetHolderIfAny) {
- return getNatureOfService(facetHolderIfAny)
- .filter(NatureOfService::isEnabledForUi)
- .isPresent();
+ boolean isContributingToWebApi();
+
+ // -- PREDICATES
+
+ static Predicate<ObjectSpecification> contributingToUi() {
+ return spec-> spec.lookupFacet(DomainServiceFacet.class)
+ .map(DomainServiceFacet::isContributingToUi)
+ .orElse(false);
}
- /**
- * @param facetHolderIfAny - null-able
- * @return whether facetHolder represents a service that contributes
actions the Web API (may or may not also contribute to the Web UI)
- */
- static boolean isContributingToWebApi(final @Nullable FacetHolder
facetHolderIfAny) {
- return getNatureOfService(facetHolderIfAny)
- .filter(NatureOfService::isEnabledForWebApi)
- .isPresent();
+ static Predicate<ObjectSpecification> contributingToWebApi() {
+ return spec-> spec.lookupFacet(DomainServiceFacet.class)
+ .map(DomainServiceFacet::isContributingToWebApi)
+ .orElse(false);
}
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
index 21eda8d368..690210f276 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
@@ -18,14 +18,14 @@
*/
package org.apache.causeway.core.metamodel.facets.object.domainservice;
-
import java.util.function.BiConsumer;
-import org.apache.causeway.applib.annotation.NatureOfService;
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.NonNull;
public abstract class DomainServiceFacetAbstract
extends FacetAbstract
@@ -35,23 +35,25 @@ implements DomainServiceFacet {
return DomainServiceFacet.class;
}
- private final NatureOfService natureOfService;
+ @Getter(onMethod_={@Override})
+ private final boolean contributingToUi;
+
+ @Getter(onMethod_={@Override})
+ private final boolean contributingToWebApi;
public DomainServiceFacetAbstract(
- final FacetHolder facetHolder,
- final NatureOfService natureOfService) {
+ final @NonNull FacetHolder facetHolder,
+ final boolean contributingToUi,
+ final boolean contributingToWebApi) {
super(DomainServiceFacetAbstract.type(), facetHolder);
- this.natureOfService = natureOfService;
- }
-
- @Override
- public NatureOfService getNatureOfService() {
- return natureOfService;
+ this.contributingToUi = contributingToUi;
+ this.contributingToWebApi = contributingToWebApi;
}
@Override
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("natureOfService", natureOfService);
+ visitor.accept("isContributingToUi", isContributingToUi());
+ visitor.accept("isContributingToWebApi", isContributingToWebApi());
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index 73349582a6..beb88ce9f8 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import org.apache.causeway.applib.annotation.DomainService;
+import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facetapi.MetaModelRefiner;
@@ -54,7 +55,7 @@ implements MetaModelRefiner {
addFacet(
new DomainServiceFacetForAnnotation(
facetHolder,
- domainServiceIfAny.get().nature()));
+ Can.empty())); //TODO[CAUSEWAY-3697] provide services
addFacetIfPresent(
AliasedFacetForDomainServiceAnnotation
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
index 462d4bc7c3..1352984e3f 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetForAnnotation.java
@@ -18,16 +18,36 @@
*/
package
org.apache.causeway.core.metamodel.facets.object.domainservice.annotation;
-import org.apache.causeway.applib.annotation.NatureOfService;
+import
org.apache.causeway.applib.services.scope.ActionContributionFilterService;
+import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacetAbstract;
+import lombok.NonNull;
+
public class DomainServiceFacetForAnnotation
extends DomainServiceFacetAbstract {
public DomainServiceFacetForAnnotation(
- final FacetHolder facetHolder,
- final NatureOfService natureOfService) {
- super(facetHolder, natureOfService);
+ final @NonNull FacetHolder facetHolder,
+ final @NonNull Can<ActionContributionFilterService>
filterServices) {
+ super(facetHolder,
+ evaluateIsContributingToUi(filterServices),
+ evaluateIsContributingToWebApi(filterServices));
+ }
+
+ // -- HELPER
+
+ private static boolean evaluateIsContributingToWebApi(
+ final Can<ActionContributionFilterService> filterServices) {
+ // TODO[CAUSEWAY-3697] honor filterServices
+ return true;
}
+
+ private static boolean evaluateIsContributingToUi(
+ final Can<ActionContributionFilterService> filterServices) {
+ // TODO[CAUSEWAY-3697] honor filterServices
+ return true;
+ }
+
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
index 41ba531285..7acfa89de1 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
@@ -24,6 +24,7 @@ import javax.inject.Inject;
import org.apache.causeway.commons.internal.functions._Predicates;
import
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
+import
org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier.Attributes;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
@@ -57,7 +58,7 @@ extends FacetFactoryAbstract {
}
return true; // continue processing
})
- /* don't throw away mixin main methods,
+ /* don't throw away mixin main methods,
* those we keep irrespective of IntrospectionPolicy */
.filter(_Predicates.not(isMixinMainMethod(processClassContext)))
.forEach(method -> {
@@ -85,25 +86,24 @@ extends FacetFactoryAbstract {
}
// -- HELPER
-
+
/**
* We have no MixinFacet yet, so we need to revert to low level
introspection tactics.
*/
private Predicate<ResolvedMethod> isMixinMainMethod(final @NonNull
ProcessClassContext processClassContext) {
-
+
// shortcut, when we already know the class is not a mixin
if(processClassContext.getFacetHolder() instanceof
ObjectSpecification) {
val spec = (ObjectSpecification)
processClassContext.getFacetHolder();
if(!spec.getBeanSort().isMixin()) {
- return method->false;
+ return method->false;
}
}
- // lookup attribute from class-cache as it should have been already
processed by the BeanTypeClassifier
- val cls = processClassContext.getCls();
- val mixinMainMethodName = getClassCache()
- .lookupAttribute(cls, "mixin-main-method-name")
+ // lookup attribute from class-cache as it should have been already
processed by the BeanTypeClassifier
+ val cls = processClassContext.getCls();
+ val mixinMainMethodName =
Attributes.MIXIN_MAIN_METHOD_NAME.lookup(getClassCache(), cls)
.orElse(null);
return method->method.name().equals(mixinMainMethodName);
}
-
+
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
index 86a8566785..224cd3f242 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
@@ -26,7 +26,6 @@ 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.ObjectTypeFacetFactory;
-import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -122,8 +121,8 @@ implements
return false; //skip validation
}
if (objectSpec.isInjectable()) {
- // only check if domain service is contributing visible somehow
(Web UI or Web APIREST)
- if(DomainServiceFacet.getNatureOfService(objectSpec).isEmpty()) {
+ // only check if its a domain service (that is potentially
contributing to UI or Web-API(s).
+ if(!objectSpec.isDomainService()) {
return false; //skip validation
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 0d3722179e..44ecc13130 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -24,7 +24,6 @@ import
org.apache.causeway.core.metamodel.facets.actions.action.ActionOverloadin
import
org.apache.causeway.core.metamodel.facets.actions.contributing.derived.ContributingFacetFromMixinFacetFactory;
import
org.apache.causeway.core.metamodel.facets.actions.homepage.annotation.HomePageFacetAnnotationFactory;
import
org.apache.causeway.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
-import
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.derived.NotInServiceMenuFacetFromDomainServiceFacetFactory;
import
org.apache.causeway.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethodFactory;
import
org.apache.causeway.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
import
org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory;
@@ -180,8 +179,6 @@ extends ProgrammingModelAbstract {
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new
BookmarkPolicyFacetFallbackFactory(mmc));
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new
HomePageFacetAnnotationFactory(mmc));
- addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new
NotInServiceMenuFacetFromDomainServiceFacetFactory(mmc));
-
// must come after CssClassFacetOnMemberFactory
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new
CssClassFacetOnActionFromConfiguredRegexFactory(mmc));
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelExporter.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelExporter.java
index c6576fdeba..b418f279fe 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelExporter.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelExporter.java
@@ -20,7 +20,6 @@ package org.apache.causeway.core.metamodel.services.metamodel;
import java.lang.reflect.Modifier;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -32,7 +31,6 @@ import
org.apache.causeway.commons.internal.collections._Lists;
import org.apache.causeway.commons.internal.collections._Maps;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -239,7 +237,7 @@ class MetaModelExporter {
}
if (specification.isInjectable()) {
-
if(DomainServiceFacet.getNatureOfService(specification).isPresent()) {
+ if(specification.isDomainService()) {
addActions(specification, domainClassByObjectSpec, config);
}
} else {
@@ -406,9 +404,7 @@ class MetaModelExporter {
final List<org.apache.causeway.schema.metamodel.v2.Facet> facetList =
facets.getFacet();
facetHolder.streamFacets()
- .filter(facet -> ! (
- config.isIgnoreFallbackFacets()
- && facet.getPrecedence().isFallback()))
+ .filter(facet -> (!config.isIgnoreFallbackFacets() ||
!facet.getPrecedence().isFallback()))
.map(facet -> asXsdType(facet, config))
.forEach(facetList::add);
@@ -452,38 +448,19 @@ class MetaModelExporter {
}
private void sortFacetAttributes(final List<FacetAttr> attributes) {
- Collections.sort(attributes, new Comparator<FacetAttr>() {
- @Override
- public int compare(final FacetAttr o1, final FacetAttr o2) {
- return o1.getName().compareTo(o2.getName());
- }
- });
+ Collections.sort(attributes, (o1, o2) ->
o1.getName().compareTo(o2.getName()));
}
private static void sortDomainClasses(final List<DomainClassDto>
specifications) {
- Collections.sort(specifications, new Comparator<DomainClassDto>() {
- @Override
- public int compare(final DomainClassDto o1, final DomainClassDto
o2) {
- return o1.getId().compareTo(o2.getId());
- }
- });
+ Collections.sort(specifications, (o1, o2) ->
o1.getId().compareTo(o2.getId()));
}
private void sortMembers(final List<? extends Member> members) {
- Collections.sort(members, new Comparator<Member>() {
- @Override public int compare(final Member o1, final Member o2) {
- return o1.getId().compareTo(o2.getId());
- }
- });
+ Collections.sort(members, (o1, o2) ->
o1.getId().compareTo(o2.getId()));
}
private void sortFacets(final
List<org.apache.causeway.schema.metamodel.v2.Facet> facets) {
- Collections.sort(facets, new
Comparator<org.apache.causeway.schema.metamodel.v2.Facet>() {
- @Override public int compare(final
org.apache.causeway.schema.metamodel.v2.Facet o1,
- final org.apache.causeway.schema.metamodel.v2.Facet o2) {
- return o1.getId().compareTo(o2.getId());
- }
- });
+ Collections.sort(facets, (o1, o2) -> o1.getId().compareTo(o2.getId()));
}
private boolean isValueType(final ObjectSpecification specification) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
index bfd669bfef..8680f5e289 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
@@ -421,6 +421,11 @@ extends
*/
boolean isInjectable();
+ /**
+ * Whether represents a bean, that is in effect annotated with {@link
DomainService}.
+ */
+ boolean isDomainService();
+
default boolean isMixin() {
return getBeanSort().isMixin();
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 3517ccf1cf..231ed0fc8f 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -36,10 +36,12 @@ import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.commons.internal.collections._Lists;
import org.apache.causeway.commons.internal.collections._Maps;
+import org.apache.causeway.commons.internal.reflection._ClassCache;
import
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import
org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
import org.apache.causeway.commons.internal.reflection._Reflect;
import org.apache.causeway.core.config.beans.CausewayBeanMetaData;
+import
org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier.Attributes;
import org.apache.causeway.core.metamodel.commons.ToString;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
@@ -342,6 +344,17 @@ implements FacetHolder {
return isInjectableLazy.get();
}
+ private _Lazy<Boolean> isDomainServiceLazy = _Lazy.threadSafe(()->
+
Attributes.HAS_DOMAIN_SERVICE_SEMANTICS.lookup(_ClassCache.getInstance(),
getCorrespondingClass())
+ .map("true"::equals)
+ .orElse(false));
+
+ @Override
+ public boolean isDomainService() {
+ return isDomainServiceLazy.get();
+ }
+
+
// -- TO STRING
@Override
diff --git
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacetFactoryTest.java
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacetFactoryTest.java
deleted file mode 100644
index 18f17e5d9f..0000000000
---
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/WebApiOnlyActionFacetFromDomainServiceFacetFactoryTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.derived;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract;
-import
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.WebApiOnlyActionFacet;
-
-class WebApiOnlyActionFacetFromDomainServiceFacetFactoryTest
-extends FacetFactoryTestAbstract {
-
- private NotInServiceMenuFacetFromDomainServiceFacetFactory facetFactory;
-
- @BeforeEach
- public void setUp() throws Exception {
- facetFactory = new
NotInServiceMenuFacetFromDomainServiceFacetFactory(getMetaModelContext());
- }
-
- @Test
- public void whenRest() throws Exception {
-
- // given
- @DomainService(nature = NatureOfService.WEB_API)
- class CustomerService {
- @SuppressWarnings("unused")
- public String name() { return "Joe"; }
- }
-
- actionScenario(CustomerService.class, "name", (processMethodContext,
facetHolder, facetedMethod) -> {
- // when
- facetFactory.process(processMethodContext);
- // then
- final Facet facet =
facetedMethod.lookupNonFallbackFacet(WebApiOnlyActionFacet.class).orElse(null);
- assertNotNull(facet);
- assertThat(facet instanceof
WebApiOnlyActionFacetFromDomainServiceFacet, is(true));
- final WebApiOnlyActionFacetFromDomainServiceFacet
facetDerivedFromDomainServiceFacet =
(WebApiOnlyActionFacetFromDomainServiceFacet) facet;
- assertEquals(NatureOfService.WEB_API,
facetDerivedFromDomainServiceFacet.getNatureOfService());
- assertNoMethodsRemoved();
- });
-
- }
-
- @Test
- public void whenView() throws Exception {
-
- // given
- @DomainService()
- class CustomerService {
- @SuppressWarnings("unused")
- public String name() { return "Joe"; }
- }
-
- actionScenario(CustomerService.class, "name", (processMethodContext,
facetHolder, facetedMethod) -> {
- // when
- facetFactory.process(processMethodContext);
- // then
- final Facet facet =
facetedMethod.lookupNonFallbackFacet(WebApiOnlyActionFacet.class).orElse(null);
- assertThat(facet, is(nullValue()));
- assertNoMethodsRemoved();
- });
- }
-
- @Test
- public void whenMenu() throws Exception {
-
- // given
- @DomainService()
- class CustomerService {
- @SuppressWarnings("unused")
- public String name() { return "Joe"; }
- }
-
- actionScenario(CustomerService.class, "name", (processMethodContext,
facetHolder, facetedMethod) -> {
- // when
- facetFactory.process(processMethodContext);
- // then
- final Facet facet =
facetedMethod.lookupNonFallbackFacet(WebApiOnlyActionFacet.class).orElse(null);
- assertThat(facet, is(nullValue()));
- assertNoMethodsRemoved();
- });
- }
-
- @Test
- public void whenNone() throws Exception {
-
- // given
- class CustomerService {
- @SuppressWarnings("unused")
- public String name() { return "Joe"; }
- }
-
- actionScenario(CustomerService.class, "name", (processMethodContext,
facetHolder, facetedMethod) -> {
- // when
- facetFactory.process(processMethodContext);
- // then
- final Facet facet =
facetedMethod.lookupNonFallbackFacet(WebApiOnlyActionFacet.class).orElse(null);
- assertThat(facet, is(nullValue()));
- assertNoMethodsRemoved();
- });
- }
-
-}
\ No newline at end of file
diff --git
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java
index c208692026..87a2192950 100644
---
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java
+++
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java
@@ -26,7 +26,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract;
import
org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet;
@@ -56,7 +55,7 @@ extends FacetFactoryTestAbstract {
//when
facetFactory.process(processClassContext);
//then
- final Facet facet = facetHolder.getFacet(DomainServiceFacet.class);
+ var facet = facetHolder.getFacet(DomainServiceFacet.class);
assertNotNull(facet);
assertTrue(facet instanceof DomainServiceFacetForAnnotation);
DomainServiceFacetForAnnotation domainServiceFacet =
(DomainServiceFacetForAnnotation) facet;
diff --git
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index caffee75b2..8a755a0667 100644
---
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -54,7 +54,7 @@ extends FacetFactoryTestAbstract {
@Test
public void verifyProgrammingModelNumberOfFactories() {
- assertEquals(63, programmingModel.streamFactories().count());
+ assertEquals(62, programmingModel.streamFactories().count());
}
@Test //verify we have the javac -parameter flag set when compiling this
class
diff --git
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
index 9726bea67c..f3b10cf09f 100644
---
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
+++
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
@@ -33,7 +33,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.layout.component.ServiceActionLayoutData;
import org.apache.causeway.applib.layout.menubars.bootstrap.BSMenu;
@@ -58,7 +57,6 @@ import
org.apache.causeway.core.metamodel.facets.actions.layout.CssClassFacetFor
import
org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForMenuBarXml;
import
org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForMenuBarXml;
import
org.apache.causeway.core.metamodel.facets.actions.layout.MemberNamedFacetForMenuBarXml;
-import
org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.WebApiOnlyActionFacet;
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.layout.group.LayoutGroupFacet;
@@ -432,20 +430,13 @@ implements MenuBarsService {
final ActionScope actionType) {
final ObjectSpecification serviceSpec =
serviceAdapter.getSpecification();
- // skip if annotated to not be included in repository menu using
@DomainService
- final DomainServiceFacet domainServiceFacet =
serviceSpec.getFacet(DomainServiceFacet.class);
- if (domainServiceFacet != null) {
- final NatureOfService natureOfService =
domainServiceFacet.getNatureOfService();
- if (!natureOfService.isEnabledForUi()) {
- return Stream.empty();
- }
+ if (!DomainServiceFacet.contributingToUi().test(serviceSpec)) {
+ return Stream.empty();
}
final Stream<ObjectAction> objectActions =
serviceSpec.streamDeclaredActions(actionType, MixedIn.INCLUDED);
return objectActions
- // skip if annotated to not be included in repository menu
using legacy mechanism
-
.filter(objectAction->objectAction.getFacet(WebApiOnlyActionFacet.class) ==
null)
.map(objectAction->{
val layoutGroupFacet =
objectAction.getFacet(LayoutGroupFacet.class);
String serviceName = layoutGroupFacet != null
@@ -457,7 +448,6 @@ implements MenuBarsService {
}
return new ServiceAndAction(serviceName, serviceAdapter,
objectAction);
});
-
}
private static Predicate<ManagedObject> with(final
DomainServiceLayout.MenuBar menuBar) {
diff --git
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/Bar.java
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/Bar.java
index bbe96ec193..90888c0e18 100644
---
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/Bar.java
+++
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/Bar.java
@@ -22,11 +22,8 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
-@DomainService(
- nature = NatureOfService.BOTH
- )
+@DomainService
@Named("simple.SimpleMenu")
public class Bar {
diff --git
a/core/security/src/main/java/org/apache/causeway/core/security/authentication/logout/LogoutMenu.java
b/core/security/src/main/java/org/apache/causeway/core/security/authentication/logout/LogoutMenu.java
index 918977d695..17fba40e25 100644
---
a/core/security/src/main/java/org/apache/causeway/core/security/authentication/logout/LogoutMenu.java
+++
b/core/security/src/main/java/org/apache/causeway/core/security/authentication/logout/LogoutMenu.java
@@ -30,7 +30,6 @@ import org.apache.causeway.applib.annotation.DomainObject;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.Nature;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -45,9 +44,7 @@ import lombok.RequiredArgsConstructor;
import lombok.val;
@Named(LogoutMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
)
diff --git
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
index 69950a36c4..6f2be45e9a 100644
---
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
+++
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
@@ -32,7 +32,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.RestrictTo;
@@ -51,7 +50,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(CommandLogMenu.LOGICAL_TYPE_NAME)
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
named = "Activity"
diff --git
a/extensions/core/docgen/help/src/main/java/org/apache/causeway/extensions/docgen/help/menu/DocumentationMenu.java
b/extensions/core/docgen/help/src/main/java/org/apache/causeway/extensions/docgen/help/menu/DocumentationMenu.java
index 8eb7278d15..226167eb83 100644
---
a/extensions/core/docgen/help/src/main/java/org/apache/causeway/extensions/docgen/help/menu/DocumentationMenu.java
+++
b/extensions/core/docgen/help/src/main/java/org/apache/causeway/extensions/docgen/help/menu/DocumentationMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -46,7 +45,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.x {@index}
*/
@Named(CausewayModuleExtDocgenHelp.NAMESPACE + ".DocumentationMenu")
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
)
diff --git
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateMenuForDemoToDoItem.java
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateMenuForDemoToDoItem.java
index 56497e99a1..103363a758 100644
---
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateMenuForDemoToDoItem.java
+++
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/bulkupdate/BulkUpdateMenuForDemoToDoItem.java
@@ -26,7 +26,6 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.services.bookmark.BookmarkService;
@@ -37,9 +36,7 @@ import
org.apache.causeway.extensions.excel.applib.ExcelService;
import
org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.Category;
import
org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.Subcategory;
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named("libExcelFixture.BulkUpdateMenuForDemoToDoItem")
@DomainServiceLayout(
named = "Excel"
diff --git
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
index 7b5b5be943..a6880704a8 100644
---
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
+++
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
@@ -27,7 +27,6 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.services.repository.RepositoryService;
@@ -35,9 +34,7 @@ import org.apache.causeway.applib.value.Blob;
import org.apache.causeway.extensions.excel.applib.service.ExcelServiceDefault;
import
org.apache.causeway.extensions.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem;
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named("libExcelFixture.ExcelPivotByCategoryAndSubcategoryMenu")
@DomainServiceLayout(
named = "Excel"
diff --git
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/fixturehandlers/excelupload/ExcelUploadServiceForDemoToDoItem.java
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/fixturehandlers/excelupload/ExcelUploadServiceForDemoToDoItem.java
index e93a52d65e..fedd65579c 100644
---
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/fixturehandlers/excelupload/ExcelUploadServiceForDemoToDoItem.java
+++
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/demomodule/fixturehandlers/excelupload/ExcelUploadServiceForDemoToDoItem.java
@@ -25,7 +25,6 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
@@ -37,9 +36,7 @@ import
org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureResult;
import
org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScript;
import
org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScripts;
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named("libExcelFixture.ExcelUploadServiceForDemoToDoItem")
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
diff --git
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
index 61e671a4f8..63c66801dc 100644
---
a/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
+++
b/extensions/core/excel/fixture/src/main/java/org/apache/causeway/extensions/excel/fixtures/demoapp/todomodule/dom/ExcelDemoToDoItemMenu.java
@@ -33,7 +33,6 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.MinLength;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Programmatic;
@@ -46,9 +45,7 @@ import org.apache.causeway.applib.services.user.UserService;
import lombok.RequiredArgsConstructor;
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named("libExcelFixture.ExcelDemoToDoItemMenu")
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
diff --git
a/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/app/ExecutionLogMenu.java
b/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/app/ExecutionLogMenu.java
index 8722557a0c..4a5d046026 100644
---
a/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/app/ExecutionLogMenu.java
+++
b/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/app/ExecutionLogMenu.java
@@ -32,7 +32,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.RestrictTo;
@@ -51,7 +50,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(ExecutionLogMenu.LOGICAL_TYPE_NAME)
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
named = "Activity"
diff --git
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/app/ExecutionOutboxMenu.java
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/app/ExecutionOutboxMenu.java
index 12c00c6275..9782cd5f95 100644
---
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/app/ExecutionOutboxMenu.java
+++
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/app/ExecutionOutboxMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -45,9 +44,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(ExecutionOutboxMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Activity",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/restapi/OutboxRestApi.java
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/restapi/OutboxRestApi.java
index 74e7030924..6035bc1e7c 100644
---
a/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/restapi/OutboxRestApi.java
+++
b/extensions/core/executionoutbox/applib/src/main/java/org/apache/causeway/extensions/executionoutbox/applib/restapi/OutboxRestApi.java
@@ -26,7 +26,6 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.services.factory.FactoryService;
@@ -47,7 +46,7 @@ import lombok.val;
* @since 2.0 {@index}
*/
@Named(OutboxRestApi.LOGICAL_TYPE_NAME)
-@DomainService(nature = NatureOfService.WEB_API)
+@DomainService
@RequiredArgsConstructor
public class OutboxRestApi {
diff --git
a/extensions/core/layoutloaders/github/src/main/java/org/apache/causeway/extensions/layoutloaders/github/menu/LayoutLoadersGitHubMenu.java
b/extensions/core/layoutloaders/github/src/main/java/org/apache/causeway/extensions/layoutloaders/github/menu/LayoutLoadersGitHubMenu.java
index a918678e44..2c7cddd6d0 100644
---
a/extensions/core/layoutloaders/github/src/main/java/org/apache/causeway/extensions/layoutloaders/github/menu/LayoutLoadersGitHubMenu.java
+++
b/extensions/core/layoutloaders/github/src/main/java/org/apache/causeway/extensions/layoutloaders/github/menu/LayoutLoadersGitHubMenu.java
@@ -27,7 +27,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -45,7 +44,7 @@ import lombok.val;
* @since 2.x {@index}
*/
@Named(CausewayModuleExtLayoutLoadersGithub.NAMESPACE +
".LayoutLoadersGitHubMenu")
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
)
diff --git
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
index 2b26ea0d2b..639cba6d3c 100644
---
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
+++
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
@@ -34,7 +34,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -53,7 +52,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(AuditTrailMenu.LOGICAL_TYPE_NAME)
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
named = "Activity"
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/permission/menu/ApplicationPermissionMenu.java
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/permission/menu/ApplicationPermissionMenu.java
index c2b01f95a9..026264c25f 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/permission/menu/ApplicationPermissionMenu.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/permission/menu/ApplicationPermissionMenu.java
@@ -28,7 +28,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
@@ -45,9 +44,7 @@ import
org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPe
* @since 2.0 {@index}
*/
@Named(ApplicationPermissionMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
named="Security"
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/menu/ApplicationRoleMenu.java
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/menu/ApplicationRoleMenu.java
index aaf4e91ec3..09ee80443b 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/menu/ApplicationRoleMenu.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/menu/ApplicationRoleMenu.java
@@ -28,7 +28,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
@@ -48,9 +47,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(ApplicationRoleMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Security",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
index d61277b566..961c660267 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
@@ -29,7 +29,6 @@ import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
import org.apache.causeway.applib.annotation.MinLength;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
@@ -48,9 +47,7 @@ import
org.apache.causeway.extensions.secman.applib.tenancy.man.ApplicationTenan
* @since 2.0 {@index}
*/
@Named(ApplicationTenancyMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Security",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/ApplicationUserMenu.java
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/ApplicationUserMenu.java
index db42caf5dc..ca476ced45 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/ApplicationUserMenu.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/ApplicationUserMenu.java
@@ -28,7 +28,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.ParameterLayout;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -47,9 +46,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(ApplicationUserMenu.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
named = "Security",
menuBar = DomainServiceLayout.MenuBar.SECONDARY
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/MeService.java
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/MeService.java
index 49fdacd922..f494b6dfaa 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/MeService.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/menu/MeService.java
@@ -33,7 +33,6 @@ import org.apache.causeway.applib.annotation.Domain;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ObjectSupport;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
@@ -52,9 +51,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(MeService.LOGICAL_TYPE_NAME)
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.TERTIARY
)
diff --git
a/extensions/security/sessionlog/applib/src/main/java/org/apache/causeway/extensions/sessionlog/applib/app/SessionLogMenu.java
b/extensions/security/sessionlog/applib/src/main/java/org/apache/causeway/extensions/sessionlog/applib/app/SessionLogMenu.java
index 2efe646278..02f1eda3e6 100644
---
a/extensions/security/sessionlog/applib/src/main/java/org/apache/causeway/extensions/sessionlog/applib/app/SessionLogMenu.java
+++
b/extensions/security/sessionlog/applib/src/main/java/org/apache/causeway/extensions/sessionlog/applib/app/SessionLogMenu.java
@@ -33,7 +33,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.SemanticsOf;
import
org.apache.causeway.extensions.sessionlog.applib.CausewayModuleExtSessionLogApplib;
@@ -50,7 +49,7 @@ import lombok.RequiredArgsConstructor;
* @since 2.0 {@index}
*/
@Named(SessionLogMenu.LOGICAL_TYPE_NAME)
-@DomainService(nature = NatureOfService.BOTH)
+@DomainService
@DomainServiceLayout(
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
named = "Activity"
diff --git
a/incubator/extensions/core/commandreplay/primary/src/main/java/org/apache/causeway/extensions/commandreplay/primary/restapi/CommandRetrievalOnPrimaryService.java
b/incubator/extensions/core/commandreplay/primary/src/main/java/org/apache/causeway/extensions/commandreplay/primary/restapi/CommandRetrievalOnPrimaryService.java
index 66a81569a4..d74dc4f13c 100644
---
a/incubator/extensions/core/commandreplay/primary/src/main/java/org/apache/causeway/extensions/commandreplay/primary/restapi/CommandRetrievalOnPrimaryService.java
+++
b/incubator/extensions/core/commandreplay/primary/src/main/java/org/apache/causeway/extensions/commandreplay/primary/restapi/CommandRetrievalOnPrimaryService.java
@@ -30,7 +30,6 @@ import org.springframework.context.annotation.Profile;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
@@ -46,7 +45,7 @@ import org.apache.causeway.schema.cmd.v2.CommandDto;
/**
* @since 2.0 {@index}
*/
-@DomainService(nature = NatureOfService.WEB_API)
+@DomainService
@Named(CausewayModuleExtCommandReplayPrimary.NAMESPACE +
".CommandRetrievalOnPrimaryService")
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@Profile("commandreplay-primary")
diff --git
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryResource.java
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryResource.java
index 9d74b84dfe..cff0c89b28 100644
---
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryResource.java
+++
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryResource.java
@@ -31,7 +31,6 @@ import
org.springframework.web.context.request.ServletRequestAttributes;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ParameterLayout;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.services.factory.FactoryService;
@@ -48,7 +47,6 @@ import lombok.val;
@Named("testdomain.jdo.InventoryResource")
@DomainService(
- nature = NatureOfService.WEB_API,
aliased = "testdomain.jdo.InventoryResourceAlias" // <-- as tested
with RestEndpointService
)
@javax.annotation.Priority(PriorityPrecedence.EARLY)
diff --git
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryResource.java
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryResource.java
index daf2a33f01..8fa0d49b33 100644
---
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryResource.java
+++
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryResource.java
@@ -30,7 +30,6 @@ import
org.springframework.web.context.request.ServletRequestAttributes;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.ParameterLayout;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.services.repository.RepositoryService;
@@ -44,7 +43,7 @@ import lombok.RequiredArgsConstructor;
import lombok.val;
@Named("testdomain.jpa.InventoryResource")
-@DomainService(nature = NatureOfService.WEB_API)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = { @Inject })
public class JpaInventoryResource {
diff --git
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/rospec/RoSpecSampler.java
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/rospec/RoSpecSampler.java
index 63caf051d5..a0e9b7d12e 100644
---
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/rospec/RoSpecSampler.java
+++
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/rospec/RoSpecSampler.java
@@ -25,12 +25,11 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
@Named("testdomain.RoSpecSampler")
-@DomainService(nature = NatureOfService.WEB_API)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
public class RoSpecSampler {
diff --git
a/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAllMenu.java
b/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAllMenu.java
index d9d641e197..2e2e01596c 100644
---
a/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAllMenu.java
+++
b/testing/fakedata/fixtures/src/main/java/org/apache/causeway/testing/fakedata/fixtures/demoapp/demomodule/dom/FakeDataDemoObjectWithAllMenu.java
@@ -27,16 +27,13 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.services.repository.RepositoryService;
import lombok.val;
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named("libFakeDataFixture.FakeDataDemoObjectWithAllMenu")
@DomainServiceLayout(
named = "Demo"
diff --git
a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureScripts.java
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureScripts.java
index 32ca455ad6..c293435321 100644
---
a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureScripts.java
+++
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureScripts.java
@@ -37,7 +37,6 @@ import org.apache.causeway.applib.annotation.Domain;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
@@ -71,9 +70,7 @@ import lombok.val;
*
* @since 1.x {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(FixtureScripts.LOGICAL_TYPE_NAME)
@DomainServiceLayout(
named="Prototyping",
diff --git
a/testing/h2console/ui/src/main/java/org/apache/causeway/testing/h2console/ui/services/H2ManagerMenu.java
b/testing/h2console/ui/src/main/java/org/apache/causeway/testing/h2console/ui/services/H2ManagerMenu.java
index 3007ef8b58..b3fbe67be5 100644
---
a/testing/h2console/ui/src/main/java/org/apache/causeway/testing/h2console/ui/services/H2ManagerMenu.java
+++
b/testing/h2console/ui/src/main/java/org/apache/causeway/testing/h2console/ui/services/H2ManagerMenu.java
@@ -30,7 +30,6 @@ import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -44,9 +43,7 @@ import lombok.RequiredArgsConstructor;
/**
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(CausewayModuleTestingH2ConsoleUi.NAMESPACE + ".H2ManagerMenu")
@DomainServiceLayout(
named = "Prototyping",
diff --git
a/testing/hsqldbmgr/ui/src/main/java/org/apache/causeway/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
b/testing/hsqldbmgr/ui/src/main/java/org/apache/causeway/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
index 2a1f5a4e38..678ee3261d 100644
---
a/testing/hsqldbmgr/ui/src/main/java/org/apache/causeway/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
+++
b/testing/hsqldbmgr/ui/src/main/java/org/apache/causeway/extensions/hsqldbmgr/dom/services/HsqlDbManagerMenu.java
@@ -28,7 +28,6 @@ import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.applib.annotation.SemanticsOf;
@@ -43,9 +42,7 @@ import lombok.extern.log4j.Log4j2;
/**
* @since 2.0 {@index}
*/
-@DomainService(
- nature = NatureOfService.BOTH
-)
+@DomainService
@Named(CausewayModuleExtHsqldbMgr.NAMESPACE + ".HsqlDbManagerMenu")
@DomainServiceLayout(
named = "Prototyping",
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/admin/AdminMenu.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/admin/AdminMenu.java
index 48fa0cdca6..bbeb16e673 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/admin/AdminMenu.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/admin/AdminMenu.java
@@ -25,7 +25,6 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.annotation.Where;
@@ -34,7 +33,7 @@ import org.apache.causeway.commons.internal.base._Strings;
import lombok.RequiredArgsConstructor;
@Named("university.admin.AdminMenu")
-@DomainService(nature=NatureOfService.BOTH)
+@DomainService
@Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class AdminMenu {
@@ -55,19 +54,19 @@ public class AdminMenu {
@Action(semantics = SemanticsOf.NON_IDEMPOTENT)
- public void actionWithDisabledParam(String firstParam, String secondParam,
String thirdParameter) {
+ public void actionWithDisabledParam(final String firstParam, final String
secondParam, final String thirdParameter) {
}
public String disable0ActionWithDisabledParam() {
return "yup, disabled!";
}
- public String disable2ActionWithDisabledParam(String firstParam, String
secondParam) {
+ public String disable2ActionWithDisabledParam(final String firstParam,
final String secondParam) {
return _Strings.isNullOrEmpty(secondParam) ? null : "Disabled because
secondParam is not empty";
}
@Action(semantics = SemanticsOf.NON_IDEMPOTENT)
- public void actionWithHiddenParam(String firstParam, String secondParam) {
+ public void actionWithHiddenParam(final String firstParam, final String
secondParam) {
}
public boolean hide0ActionWithHiddenParam() {
return true;
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
index 755bf9019b..5e18904bc7 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
@@ -17,7 +17,6 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.Optionality;
import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -27,134 +26,134 @@ import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
@Named("university.calc.Calculator")
-@DomainService(nature= NatureOfService.BOTH)
+@DomainService
@Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class Calculator {
@Action(semantics = SemanticsOf.SAFE)
- public byte addBytes(byte x, byte y) {
+ public byte addBytes(final byte x, final byte y) {
return (byte)(x+y);
}
@Action(semantics = SemanticsOf.SAFE)
- public int addByteWrappers(Byte x, @Parameter(optionality =
Optionality.OPTIONAL) Byte y) {
+ public int addByteWrappers(final Byte x, @Parameter(optionality =
Optionality.OPTIONAL) final Byte y) {
return y != null ? x+y : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public short addShorts(short x, short y) {
+ public short addShorts(final short x, final short y) {
return (short)(x+y);
}
@Action(semantics = SemanticsOf.SAFE)
- public Short addShortWrappers(Short x, @Parameter(optionality =
Optionality.OPTIONAL) Short y) {
+ public Short addShortWrappers(final Short x, @Parameter(optionality =
Optionality.OPTIONAL) final Short y) {
return y != null ? (short)(x+y) : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public int addIntegers(int x, int y) {
+ public int addIntegers(final int x, final int y) {
return x+y;
}
@Action(semantics = SemanticsOf.SAFE)
- public int addIntegerWrappers(Integer x, @Parameter(optionality =
Optionality.OPTIONAL) Integer y) {
+ public int addIntegerWrappers(final Integer x, @Parameter(optionality =
Optionality.OPTIONAL) final Integer y) {
return y != null ? x+y : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public double addDoubles(double x, double y) {
+ public double addDoubles(final double x, final double y) {
return x+y;
}
@Action(semantics = SemanticsOf.SAFE)
- public Double addDoubleWrappers(Double x, @Parameter(optionality =
Optionality.OPTIONAL) Double y) {
+ public Double addDoubleWrappers(final Double x, @Parameter(optionality =
Optionality.OPTIONAL) final Double y) {
return y != null ? x+y : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public float addFloats(float x, float y) {
+ public float addFloats(final float x, final float y) {
return x+y;
}
@Action(semantics = SemanticsOf.SAFE)
- public Float addFloatWrappers(Float x, @Parameter(optionality =
Optionality.OPTIONAL) Float y) {
+ public Float addFloatWrappers(final Float x, @Parameter(optionality =
Optionality.OPTIONAL) final Float y) {
return y != null ? (float)(x+y) : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public BigInteger addBigIntegers(BigInteger x, @Parameter(optionality =
Optionality.OPTIONAL) BigInteger y) {
+ public BigInteger addBigIntegers(final BigInteger x,
@Parameter(optionality = Optionality.OPTIONAL) final BigInteger y) {
return y != null ? x.add(y) : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public BigDecimal addBigDecimals(BigDecimal x, @Parameter(optionality =
Optionality.OPTIONAL) BigDecimal y) {
+ public BigDecimal addBigDecimals(final BigDecimal x,
@Parameter(optionality = Optionality.OPTIONAL) final BigDecimal y) {
return y != null ? x.add(y) : x;
}
@Action(semantics = SemanticsOf.SAFE)
- public LocalDate jdk8LocalPlusDays(LocalDate date, int numDays) {
+ public LocalDate jdk8LocalPlusDays(final LocalDate date, final int
numDays) {
return date.plusDays(numDays);
}
@Action(semantics = SemanticsOf.SAFE)
- public OffsetDateTime jdk8OffsetPlusDaysAndHoursAndMinutes(OffsetDateTime
dateTime, int numDays, int numHours, int numMinutes) {
+ public OffsetDateTime jdk8OffsetPlusDaysAndHoursAndMinutes(final
OffsetDateTime dateTime, final int numDays, final int numHours, final int
numMinutes) {
return
dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public ZonedDateTime jdk8ZonedPlusDaysAndHoursAndMinutes(ZonedDateTime
dateTime, int numDays, int numHours, int numMinutes) {
+ public ZonedDateTime jdk8ZonedPlusDaysAndHoursAndMinutes(final
ZonedDateTime dateTime, final int numDays, final int numHours, final int
numMinutes) {
return
dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public OffsetTime jdk8OffsetPlusHoursAndMinutes(OffsetTime time, int
numHours, int numMinutes) {
+ public OffsetTime jdk8OffsetPlusHoursAndMinutes(final OffsetTime time,
final int numHours, final int numMinutes) {
return time.plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public LocalTime jdk8LocalPlusHoursAndMinutes(LocalTime time, int
numHours, int numMinutes) {
+ public LocalTime jdk8LocalPlusHoursAndMinutes(final LocalTime time, final
int numHours, final int numMinutes) {
return time.plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public org.joda.time.LocalDate jodaLocalPlusDays(org.joda.time.LocalDate
date, int numDays) {
+ public org.joda.time.LocalDate jodaLocalPlusDays(final
org.joda.time.LocalDate date, final int numDays) {
return date.plusDays(numDays);
}
@Action(semantics = SemanticsOf.SAFE)
- public org.joda.time.DateTime
jodaPlusDaysAndHoursAndMinutes(org.joda.time.DateTime dateTime, int numDays,
int numHours, int numMinutes) {
+ public org.joda.time.DateTime jodaPlusDaysAndHoursAndMinutes(final
org.joda.time.DateTime dateTime, final int numDays, final int numHours, final
int numMinutes) {
return
dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public org.joda.time.LocalTime
jodaLocalPlusHoursAndMinutes(org.joda.time.LocalTime time, int numHours, int
numMinutes) {
+ public org.joda.time.LocalTime jodaLocalPlusHoursAndMinutes(final
org.joda.time.LocalTime time, final int numHours, final int numMinutes) {
return time.plusHours(numHours).plusMinutes(numMinutes);
}
@Action(semantics = SemanticsOf.SAFE)
- public boolean and(boolean x, boolean y) {
+ public boolean and(final boolean x, final boolean y) {
return x & y;
}
@Action(semantics = SemanticsOf.SAFE)
- public boolean or(boolean x, boolean y) {
+ public boolean or(final boolean x, final boolean y) {
return x | y;
}
@Action(semantics = SemanticsOf.SAFE)
- public boolean not(boolean x) {
+ public boolean not(final boolean x) {
return !x;
}
@Action(semantics = SemanticsOf.SAFE)
- public Month nextMonth(Month month) {
+ public Month nextMonth(final Month month) {
return month.nextMonth();
}
@Action(semantics = SemanticsOf.SAFE)
- public String concat(String prefix, @Parameter(optionality =
Optionality.OPTIONAL) String suffix) {
+ public String concat(final String prefix, @Parameter(optionality =
Optionality.OPTIONAL) final String suffix) {
return prefix + suffix;
}
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Departments.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Departments.java
index ee7a001b1b..a12438e8a7 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Departments.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Departments.java
@@ -27,15 +27,13 @@ import org.springframework.lang.Nullable;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.Departments")
-@DomainService(
- nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class Departments {
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/DeptHeads.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/DeptHeads.java
index 05e98e33bb..439932e1e7 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/DeptHeads.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/DeptHeads.java
@@ -25,14 +25,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.DeptHeads")
-@DomainService(nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class DeptHeads {
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/People.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/People.java
index c84c926cf2..2bc2915d04 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/People.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/People.java
@@ -7,15 +7,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.People")
-@DomainService(
- nature= NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class People {
@@ -24,13 +22,13 @@ public class People {
private final DeptHeadRepository deptHeadRepository;
@Action(semantics = SemanticsOf.SAFE)
- public Person findNamed(String name) {
+ public Person findNamed(final String name) {
return
Optional.ofNullable((Person)staffMemberRepository.findByName(name))
.orElse(deptHeadRepository.findByName(name));
}
@Action(semantics = SemanticsOf.SAFE)
- public String nameOf(Person person) {
+ public String nameOf(final Person person) {
return person.getName();
}
}
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Staff.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Staff.java
index b3f9aa70b4..15ec874b12 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Staff.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/Staff.java
@@ -25,15 +25,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.Staff")
-@DomainService(
- nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class Staff {
diff --git
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/i18n/I18nCalculator.java
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/i18n/I18nCalculator.java
index 107b01a00b..67fa67943e 100644
---
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/i18n/I18nCalculator.java
+++
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/i18n/I18nCalculator.java
@@ -6,14 +6,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.calc.I18nCalculator")
-@DomainService(nature= NatureOfService.BOTH)
+@DomainService
@Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class I18nCalculator {
diff --git
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
index 68a31425d6..9c6d966b76 100644
---
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
+++
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
@@ -160,7 +160,7 @@ class _OpenApiModelFactory {
for (val spec : specificationLoader.snapshotSpecifications()) {
- if(! DomainServiceFacet.isContributingToWebApi(spec)) {
+ if(!DomainServiceFacet.contributingToWebApi().test(spec)) {
continue;
}
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
index 42c1141185..b8a67d776a 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
@@ -26,11 +26,6 @@ import javax.inject.Inject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import
org.apache.causeway.testing.fixtures.applib.CausewayModuleTestingFixturesApplib;
-
-import
org.apache.causeway.viewer.restfulobjects.jaxrsresteasy.CausewayModuleViewerRestfulObjectsJaxrsResteasy;
-
import org.approvaltests.Approvals;
import org.approvaltests.core.Options;
import org.junit.jupiter.api.BeforeEach;
@@ -53,13 +48,15 @@ import org.springframework.test.context.ActiveProfiles;
import org.apache.causeway.applib.services.xactn.TransactionService;
import org.apache.causeway.applib.value.Blob;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.config.presets.CausewayPresets;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import
org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
+import
org.apache.causeway.testing.fixtures.applib.CausewayModuleTestingFixturesApplib;
import org.apache.causeway.viewer.restfulobjects.client.AuthenticationMode;
import org.apache.causeway.viewer.restfulobjects.client.RestfulClient;
import org.apache.causeway.viewer.restfulobjects.client.RestfulClientConfig;
-import
org.apache.causeway.viewer.restfulobjects.viewer.CausewayModuleViewerRestfulObjectsViewer;
+import
org.apache.causeway.viewer.restfulobjects.jaxrsresteasy.CausewayModuleViewerRestfulObjectsJaxrsResteasy;
import static
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Departments.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Departments.java
index a156cd0b83..eabb6c3c8e 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Departments.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Departments.java
@@ -27,15 +27,13 @@ import org.springframework.lang.Nullable;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.Departments")
-@DomainService(
- nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class Departments {
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/DeptHeads.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/DeptHeads.java
index 9f303bf829..9fc390b55a 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/DeptHeads.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/DeptHeads.java
@@ -25,14 +25,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.DeptHeads")
-@DomainService(nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class DeptHeads {
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/People.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/People.java
index 3af3a2e4db..511cc3b1f5 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/People.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/People.java
@@ -7,15 +7,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.People")
-@DomainService(
- nature= NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class People {
@@ -24,13 +22,13 @@ public class People {
private final DeptHeadRepository deptHeadRepository;
@Action(semantics = SemanticsOf.SAFE)
- public Person findNamed(String name) {
+ public Person findNamed(final String name) {
return
Optional.ofNullable((Person)staffMemberRepository.findByName(name))
.orElse(deptHeadRepository.findByName(name));
}
@Action(semantics = SemanticsOf.SAFE)
- public String nameOf(Person person) {
+ public String nameOf(final Person person) {
return person.getName();
}
}
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Staff.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Staff.java
index 646ce863c7..11923234d1 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Staff.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/domain/dom/Staff.java
@@ -25,15 +25,13 @@ import javax.inject.Named;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.DomainService;
-import org.apache.causeway.applib.annotation.NatureOfService;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.SemanticsOf;
import lombok.RequiredArgsConstructor;
@Named("university.dept.Staff")
-@DomainService(
- nature=NatureOfService.BOTH)
+@DomainService
@javax.annotation.Priority(PriorityPrecedence.EARLY)
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class Staff {
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/dept/Department_IntegTest.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/dept/Department_IntegTest.java
index 1b1b2c585b..bd2cf5b568 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/dept/Department_IntegTest.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/dept/Department_IntegTest.java
@@ -18,17 +18,9 @@
*/
package org.apache.causeway.viewer.restfulobjects.test.scenarios.dept;
-import lombok.val;
-
-import java.util.Optional;
-
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-
-import org.apache.causeway.viewer.restfulobjects.test.domain.dom.Department;
-
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
@@ -36,10 +28,13 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
-import
org.apache.causeway.viewer.restfulobjects.test.scenarios.Abstract_IntegTest;
-
import org.springframework.transaction.annotation.Propagation;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.viewer.restfulobjects.test.domain.dom.Department;
+import
org.apache.causeway.viewer.restfulobjects.test.scenarios.Abstract_IntegTest;
+
+import lombok.val;
public class Department_IntegTest extends Abstract_IntegTest {
diff --git
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
index 4ea7fb83b8..c23d74f8d6 100644
---
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
+++
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
@@ -64,7 +64,10 @@ extends ResourceAbstract
implements DomainServiceResource {
private static final Predicate<ManagedObject> NATURE_REST = (final
ManagedObject input) -> {
- return
DomainServiceFacet.isContributingToWebApi(input.getSpecification());
+ var isContributingToWebApi =
input.getSpecification().lookupFacet(DomainServiceFacet.class)
+ .map(DomainServiceFacet::isContributingToWebApi)
+ .orElse(false);
+ return isContributingToWebApi;
};
public DomainServiceResourceServerside() {