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 2018/10/05 06:03:02 UTC

[isis] 02/02: ISIS-1619: properly handle action semantics in blob/clob request caching

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 36f3688b8dad9dff256e9a330220d33835fb7875
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 5 08:02:30 2018 +0200

    ISIS-1619: properly handle action semantics in blob/clob request caching
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1619
---
 .../apache/isis/core/metamodel/spec/feature/ObjectAction.java |  7 ++++---
 .../wicket/ui/components/widgets/linkandlabel/ActionLink.java | 11 +++++------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 9e508d0..1ae2f63 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -229,10 +229,11 @@ public interface ObjectAction extends ObjectMember {
             return semanticsOf(objectAction).isAreYouSure();
         }
 
-        public static boolean isNonIdempotent(ObjectAction objectAction) {
-            return !semanticsOf(objectAction).isIdempotentInNature();
+        public static boolean isIdempotentOrCachable(ObjectAction objectAction) {
+            final SemanticsOf semantics = semanticsOf(objectAction);
+            return semantics.isIdempotentInNature() || semantics.isSafeAndRequestCacheable();
         }
-
+        
         public static boolean isNoParameters(ObjectAction objectAction) {
             return objectAction.getParameterCount()==0;
         }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 7f789f3..6447c74 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -244,10 +244,9 @@ public abstract class ActionLink extends AjaxLink<ObjectAdapter> implements IAja
                     final IRequestHandler handler = ActionModel.downloadHandler(value);
 
                     //ISIS-1619, prevent clients from caching the response content
-                    return isNonIdempotent(actionModel)
-                            ? enforceNoCacheOnClientSide(handler)
-                                    : handler
-                                    ;
+                    return isIdempotentOrCachable(actionModel)
+                            ? handler
+                                    : enforceNoCacheOnClientSide(handler);
                 }
             };
         }
@@ -272,10 +271,10 @@ public abstract class ActionLink extends AjaxLink<ObjectAdapter> implements IAja
                 action.getReturnType().getCorrespondingClass() == org.apache.isis.applib.value.Clob.class);
     }
 
-    private static boolean isNonIdempotent(ActionModel actionModel) {
+    private static boolean isIdempotentOrCachable(ActionModel actionModel) {
         final ObjectAction objectAction = actionModel.getActionMemento()
                 .getAction(actionModel.getSpecificationLoader());
-        return ObjectAction.Util.isNonIdempotent(objectAction);
+        return ObjectAction.Util.isIdempotentOrCachable(objectAction);
     }
 
     // -- CLIENT SIDE CACHING ASPECTS ...