You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/06/30 09:22:56 UTC
[isis] 02/02: ISIS-3084: Remove direct Collections modification endpoints from RO
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 6dd943862d1edaee8637ae769683b670bf763d2e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jun 30 11:22:48 2022 +0200
ISIS-3084: Remove direct Collections modification endpoints from RO
---
.../WrapperFactory_020-examples-and-usage.adoc | 5 +-
.../permission/dom/ApplicationPermissionMode.adoc | 4 +-
.../applib/domainobjects/DomainObjectResource.adoc | 3 -
.../dom/JavaObjectWithBasicProgramConventions.java | 4 +-
.../permission/dom/ApplicationPermissionMode.java | 15 +--
.../applib/domainobjects/DomainObjectResource.java | 53 ++++-----
.../resources/DomainObjectResourceServerside.java | 123 +++++++++++----------
7 files changed, 100 insertions(+), 107 deletions(-)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/hooks/WrapperFactory_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/hooks/WrapperFactory_020-examples-and-usage.adoc
index 814c69f225..393c0ba16e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/hooks/WrapperFactory_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/hooks/WrapperFactory_020-examples-and-usage.adoc
@@ -40,9 +40,12 @@ For domain objects (not mixins), the wrapper can be interacted with as follows:
* a `get...()` method for properties or collections
* a `set...()` method for properties
-* an `addTo...()` or `removeFrom...()` method for collections
* any action
+NOTE: with ISIS-3084, `addTo...()` and `removeFrom...()` methods for collections were removed;
+ the notion (direct) collection modification was deprecated as any specific business logic
+ should by handled via actions instead;
+
Calling any of the above methods may result in a (subclass of) `InteractionException` if the object disallows it.
For example, if a property is annotated with xref:refguide:applib:index/annotation/ActionLayout.adoc#hidden[@ActionLayout#hidden] then a `HiddenException` will be thrown.
Similarly if an action has a xref:refguide:applib-methods:prefixes.adoc[validateXxx()] method and the supplied arguments are invalid then an `InvalidException` will be thrown.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermissionMode.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermissionMode.adoc
index 29a79b3479..07954b6c27 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermissionMode.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermissionMode.adoc
@@ -40,8 +40,8 @@ The xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermi
Whether can user/role can change (or is prevented from changing) the state of the system using the application feature (class member).
-In other words, whether they can execute (if an action, modify/clear (if a property), addTo/removeFrom (if a collection).
+In other words, whether they can execute (if an action, modify/clear (if a property), [addTo/removeFrom (if a collection) ... see note below].
The xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermissionRule.adoc[ApplicationPermissionRule] of the xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermission.adoc[ApplicationPermission] indicates whether access is being granted or denied.
-Note that the Wicket viewer does not at the time of writing (Isis 1.6.0) support the notion of mutable collections. The RO viewer does, however.
+Note: as of ISIS-3084 the notion of mutable collections was removed
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/domainobjects/DomainObjectResource.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/domainobjects/DomainObjectResource.adoc
index 080a72d4b0..3167933115 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/domainobjects/DomainObjectResource.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/domainobjects/DomainObjectResource.adoc
@@ -19,9 +19,6 @@ interface DomainObjectResource {
Response clearProperty(String domainType, String instanceId, String propertyId)
Response postPropertyNotAllowed(String domainType, String instanceId, String propertyId)
Response accessCollection(String domainType, String instanceId, String collectionId)
- Response addToSet(String domainType, String instanceId, String collectionId, InputStream arguments)
- Response addToList(String domainType, String instanceId, String collectionId, InputStream arguments)
- Response removeFromCollection(String domainType, String instanceId, String collectionId)
Response actionPrompt(String domainType, String instanceId, String actionId)
Response deleteActionPromptNotAllowed(String domainType, String instanceId, String actionId)
Response putActionPromptNotAllowed(String domainType, String instanceId, String actionId)
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/dom/JavaObjectWithBasicProgramConventions.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/dom/JavaObjectWithBasicProgramConventions.java
index 53372f1e75..d8d80fd6f9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/dom/JavaObjectWithBasicProgramConventions.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/dom/JavaObjectWithBasicProgramConventions.java
@@ -207,7 +207,7 @@ public class JavaObjectWithBasicProgramConventions implements Interface1, Interf
return "one, field two ,three, five";
}
- // tests the hide method with same set of paramaters
+ // tests the hide method with same set of parameters
public static boolean alwaysHideHiddenAction(final String param) {
return true;
}
@@ -215,7 +215,7 @@ public class JavaObjectWithBasicProgramConventions implements Interface1, Interf
public void hiddenAction(final String param) {
}
- // tests the hide method with no paramaters
+ // tests the hide method with no parameters
public static boolean alwaysHideHiddenAction2() {
return true;
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionMode.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionMode.java
index 80efdced81..00fb59548d 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionMode.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionMode.java
@@ -30,32 +30,23 @@ import org.apache.isis.commons.internal.base._Strings;
public enum ApplicationPermissionMode {
/**
* Whether the user/role can view (or is prevented from viewing) the application feature (class member).
- *
* <p>
* The {@link ApplicationPermissionRule rule} of the
* {@link ApplicationPermission} indicates whether access is being
* granted or denied.
- * </p>
*/
VIEWING,
/**
* Whether can user/role can change (or is prevented from changing) the state of the system using the application feature (class member).
- *
* <p>
- * In other words, whether they can execute (if an action, modify/clear (if a property), addTo/removeFrom
- * (if a collection).
- * </p>
- *
+ * In other words, whether they can execute (if an action, modify/clear (if a property), [addTo/removeFrom
+ * (if a collection) ... see note below].
* <p>
* The {@link ApplicationPermissionRule rule} of the
* {@link ApplicationPermission} indicates whether access is being
* granted or denied.
- * </p>
- *
* <p>
- * Note that the Wicket viewer does not at the time of writing (Isis 1.6.0) support the notion of
- * mutable collections. The RO viewer does, however.
- * </p>
+ * Note: as of ISIS-3084 the notion of mutable collections was removed
*/
CHANGING;
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java b/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
index b0057b9282..9b4bc93aba 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
@@ -164,32 +164,33 @@ public interface DomainObjectResource {
})
public Response accessCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId);
- @PUT
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
-
- @POST
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
-
- @DELETE
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId);
+//XXX[ISIS-3084] - removal of (direct) collection modification - business logic should handle that via actions instead
+// @PUT
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
+//
+// @POST
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
+//
+// @DELETE
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId);
// //////////////////////////////////////////////////////////
// domain object action
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index c337f0363a..2691ed3d26 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -545,67 +545,68 @@ implements DomainObjectResource {
domainResourceHelper.collectionDetails(collectionId, ManagedMember.RepresentationMode.READ));
}
- @Override
- @PUT
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response addToSet(
- @PathParam("domainType") final String domainType,
- @PathParam("instanceId") final String instanceId,
- @PathParam("collectionId") final String collectionId,
- final InputStream body) {
-
- throw _EndpointLogging.error(log, "POST /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
- RestfulObjectsApplicationException
- .createWithMessage(
- HttpStatusCode.METHOD_NOT_ALLOWED,
- "The framework no longer supports mutable collections."));
- }
-
- @Override
- @POST
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response addToList(
- @PathParam("domainType") final String domainType,
- @PathParam("instanceId") final String instanceId,
- @PathParam("collectionId") final String collectionId,
- final InputStream body) {
-
- throw _EndpointLogging.error(log, "POST /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
- RestfulObjectsApplicationException
- .createWithMessage(
- HttpStatusCode.METHOD_NOT_ALLOWED,
- "The framework no longer supports mutable collections."));
- }
-
- @Override
- @DELETE
- @Path("/{domainType}/{instanceId}/collections/{collectionId}")
- @Consumes({ MediaType.WILDCARD })
- @Produces({
- MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
- MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
- })
- public Response removeFromCollection(
- @PathParam("domainType") final String domainType,
- @PathParam("instanceId") final String instanceId,
- @PathParam("collectionId") final String collectionId) {
-
- throw _EndpointLogging.error(log, "DELETE /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
- RestfulObjectsApplicationException
- .createWithMessage(
- HttpStatusCode.METHOD_NOT_ALLOWED,
- "The framework no longer supports mutable collections."));
- }
+ //XXX[ISIS-3084] - removal of (direct) collection modification - business logic should handle that via actions instead
+// @Override
+// @PUT
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response addToSet(
+// @PathParam("domainType") final String domainType,
+// @PathParam("instanceId") final String instanceId,
+// @PathParam("collectionId") final String collectionId,
+// final InputStream body) {
+//
+// throw _EndpointLogging.error(log, "POST /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
+// RestfulObjectsApplicationException
+// .createWithMessage(
+// HttpStatusCode.METHOD_NOT_ALLOWED,
+// "The framework no longer supports mutable collections."));
+// }
+//
+// @Override
+// @POST
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response addToList(
+// @PathParam("domainType") final String domainType,
+// @PathParam("instanceId") final String instanceId,
+// @PathParam("collectionId") final String collectionId,
+// final InputStream body) {
+//
+// throw _EndpointLogging.error(log, "POST /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
+// RestfulObjectsApplicationException
+// .createWithMessage(
+// HttpStatusCode.METHOD_NOT_ALLOWED,
+// "The framework no longer supports mutable collections."));
+// }
+//
+// @Override
+// @DELETE
+// @Path("/{domainType}/{instanceId}/collections/{collectionId}")
+// @Consumes({ MediaType.WILDCARD })
+// @Produces({
+// MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
+// MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
+// })
+// public Response removeFromCollection(
+// @PathParam("domainType") final String domainType,
+// @PathParam("instanceId") final String instanceId,
+// @PathParam("collectionId") final String collectionId) {
+//
+// throw _EndpointLogging.error(log, "DELETE /objects/{}/{}/collections/{}", domainType, instanceId, collectionId,
+// RestfulObjectsApplicationException
+// .createWithMessage(
+// HttpStatusCode.METHOD_NOT_ALLOWED,
+// "The framework no longer supports mutable collections."));
+// }
// //////////////////////////////////////////////////////////
// domain object action