You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/10/06 23:29:37 UTC

[4/4] isis git commit: ISIS-1007: extending for no-arg links. NB: however, this is currently broken, have asked martin-g to help out.

ISIS-1007: extending for no-arg links.  NB: however, this is currently broken, have asked martin-g to help out.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/dbcd0965
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/dbcd0965
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/dbcd0965

Branch: refs/heads/master
Commit: dbcd09655318958cd2b5e4784a632ac8692ddb07
Parents: 99e1e03
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 6 22:29:09 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 6 22:29:09 2015 +0100

----------------------------------------------------------------------
 .../isis/applib/annotation/ActionSemantics.java |  8 +++++++
 .../isis/applib/annotation/SemanticsOf.java     |  4 ++++
 .../viewer/wicket/model/links/LinkAndLabel.java | 10 ++++++++-
 .../entityactions/AdditionalLinksPanel.java     | 22 +++++++++++++++++++-
 .../actions/ActionParametersFormPanel.java      | 18 +++++++++-------
 .../collection/bulk/BulkActionsLinkFactory.java |  6 +++++-
 .../linkandlabel/ActionLinkFactoryAbstract.java | 22 ++++++++++++--------
 7 files changed, 71 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
index 0801922..edcaade 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
@@ -122,6 +122,14 @@ public @interface ActionSemantics {
         public boolean isSafeAndRequestCacheable() {
             return SemanticsOf.from(this).isSafeAndRequestCacheable();
         }
+
+        /**
+         * @deprecated - see {@link SemanticsOf#isAreYouSure()}.
+         */
+        @Deprecated
+        public boolean isAreYouSure() {
+            return SemanticsOf.from(this).isAreYouSure();
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
index 7a4a570..1fc8ce0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
@@ -102,6 +102,10 @@ public enum SemanticsOf {
         return this == SAFE_AND_REQUEST_CACHEABLE;
     }
 
+    public boolean isAreYouSure() {
+        return this == IDEMPOTENT_ARE_YOU_SURE || this == NON_IDEMPOTENT_ARE_YOU_SURE;
+    }
+
     @Deprecated
     public static ActionSemantics.Of from(final SemanticsOf semantics) {
         if(semantics == null) return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 19e1fd4..d961fc2 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -25,6 +25,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 
 public class LinkAndLabel implements Serializable {
@@ -49,6 +50,7 @@ public class LinkAndLabel implements Serializable {
     private final String cssClassFa;
     private final CssClassFaPosition cssClassFaPosition;
     private final ActionLayout.Position position;
+    private final SemanticsOf semanticsOf;
 
     public LinkAndLabel(
             final AbstractLink link,
@@ -61,7 +63,8 @@ public class LinkAndLabel implements Serializable {
             final String cssClass,
             final String cssClassFa,
             final CssClassFaPosition cssClassFaPosition,
-            final ActionLayout.Position position) {
+            final ActionLayout.Position position,
+            final SemanticsOf semanticsOf) {
         this.link = link;
         this.label = label;
         this.disabledReasonIfAny = disabledReasonIfAny;
@@ -73,6 +76,7 @@ public class LinkAndLabel implements Serializable {
         this.cssClassFa = cssClassFa;
         this.cssClassFaPosition = cssClassFaPosition;
         this.position = position;
+        this.semanticsOf = semanticsOf;
     }
 
     public AbstractLink getLink() {
@@ -119,6 +123,10 @@ public class LinkAndLabel implements Serializable {
         return position;
     }
 
+    public SemanticsOf getSemantics() {
+        return semanticsOf;
+    }
+
     public static class Predicates {
         public static Predicate<LinkAndLabel> positioned(final ActionLayout.Position position) {
             return new Predicate<LinkAndLabel>() {

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
index d80374a..1aa625b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
@@ -20,7 +20,9 @@
 package org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions;
 
 import java.util.List;
+
 import com.google.common.base.Strings;
+
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -28,8 +30,10 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
+
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.links.ListOfLinksModel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.CssClassFaBehavior;
@@ -37,6 +41,9 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
+
 public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
 
     private static final long serialVersionUID = 1L;
@@ -117,6 +124,19 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
                 }
                 link.add(new CssClassAppender(linkAndLabel.getActionIdentifier()));
 
+                SemanticsOf semantics = linkAndLabel.getSemantics();
+                if (    semantics.isAreYouSure() ) {
+                    ConfirmationConfig confirmationConfig = new ConfirmationConfig();
+                    // TODO ISIS-1007 Use i18n for the title and the labels
+                    confirmationConfig.withTitle("Are you sure?");
+                    confirmationConfig.withBtnOkLabel("Confirm");
+                    confirmationConfig.withBtnCancelLabel("Cancel");
+                    confirmationConfig.withBtnOkClass("btn btn-danger");
+                    confirmationConfig.withBtnCancelClass("btn btn-default");
+                    link.add(new ConfirmationBehavior(confirmationConfig));
+                }
+
+
                 final String cssClass = linkAndLabel.getCssClass();
                 CssClassAppender.appendCssClassTo(link, cssClass);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index f20fbe7..5366944 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -19,11 +19,10 @@
 
 package org.apache.isis.viewer.wicket.ui.components.actions;
 
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
-
 import java.util.List;
+
 import com.google.common.collect.Lists;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -32,7 +31,8 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.ResourceModel;
-import org.apache.isis.applib.annotation.ActionSemantics;
+
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
@@ -56,7 +56,11 @@ import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
-import static org.hamcrest.CoreMatchers.*;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
 
 /**
  * {@link PanelAbstract Panel} to capture the arguments for an action
@@ -218,8 +222,8 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
         private void applyAreYouSure(AjaxButton button) {
             ActionModel actionModel = getActionModel();
             final ObjectAction action = actionModel.getActionMemento().getAction();
-            ActionSemantics.Of semantics = action.getSemantics();
-            if (semantics == ActionSemantics.Of.IDEMPOTENT_ARE_YOU_SURE || semantics == ActionSemantics.Of.NON_IDEMPOTENT_ARE_YOU_SURE) {
+            SemanticsOf semanticsOf = SemanticsOf.from(action.getSemantics());
+            if (semanticsOf.isAreYouSure()) {
                 ConfirmationConfig confirmationConfig = new ConfirmationConfig();
                 // TODO ISIS-1007 Use i18n for the title and the labels
                 confirmationConfig.withTitle("Are you sure?");

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
index d5aebc7..de42f3f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
@@ -26,6 +26,8 @@ import org.apache.wicket.Session;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.isis.applib.RecoverableException;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Bulk;
@@ -217,8 +219,10 @@ public final class BulkActionsLinkFactory implements ActionLinkFactory {
         final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
         final CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
         final ActionLayout.Position position = ObjectAction.Utils.actionLayoutPositionOf(objectAction);
+        final ActionSemantics.Of semantics = objectAction.getSemantics();
 
-        return new LinkAndLabel(link, objectAction.getName(), null, description, false, explorationOrPrototype, actionIdentifier, cssClass, cssClassFa, cssClassFaPosition, position);
+        return new LinkAndLabel(link, objectAction.getName(), null, description, false, explorationOrPrototype, actionIdentifier, cssClass, cssClassFa, cssClassFaPosition, position,
+                SemanticsOf.from(semantics));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/dbcd0965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index d7f10d2..0608c7c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -17,9 +17,19 @@
 
 package org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.request.IRequestHandler;
+
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
@@ -33,13 +43,6 @@ import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
-import org.apache.wicket.Application;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.request.IRequestHandler;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 
@@ -180,9 +183,10 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
         final String cssClass = ObjectAction.Utils.cssClassFor(objectAction, objectAdapter);
         final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
         final CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
+        final ActionSemantics.Of semantics = objectAction.getSemantics();
 
         return new LinkAndLabel(link, label, disabledReasonIfAny, description, blobOrClob, prototype, actionIdentifier,
-                cssClass, cssClassFa, cssClassFaPosition, position);
+                cssClass, cssClassFa, cssClassFaPosition, position, SemanticsOf.from(semantics));
     }
 
     // ////////////////////////////////////////////////////////////