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/11/26 15:20:22 UTC

[1/3] isis git commit: ISIS-1243: adding some docs on using AgileJ.

Repository: isis
Updated Branches:
  refs/heads/master b37c49ad9 -> 7798ab807


ISIS-1243: adding some docs on using AgileJ.


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

Branch: refs/heads/master
Commit: 26fd2cb69ed6e279db3bc45c272ea83e2d62d94a
Parents: b37c49a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Nov 26 13:44:25 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Nov 26 13:44:25 2015 +0000

----------------------------------------------------------------------
 .../src/main/asciidoc/guides/_cg_ide.adoc       |  1 +
 .../main/asciidoc/guides/_cg_ide_agilej.adoc    | 54 ++++++++++++++++++++
 .../main/asciidoc/guides/_cg_ide_eclipse.adoc   |  4 ++
 .../main/asciidoc/guides/_cg_ide_intellij.adoc  |  9 +++-
 4 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/26fd2cb6/adocs/documentation/src/main/asciidoc/guides/_cg_ide.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide.adoc
index 1f779f4..cef604a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide.adoc
@@ -15,4 +15,5 @@ This chapter shows how to setup and use two of the most popular IDEs, IntelliJ I
 include::_cg_ide_intellij.adoc[leveloffset=+1]
 include::_cg_ide_eclipse.adoc[leveloffset=+1]
 include::_cg_ide_project-lombok.adoc[leveloffset=+1]
+include::_cg_ide_agilej.adoc[leveloffset=+1]
 

http://git-wip-us.apache.org/repos/asf/isis/blob/26fd2cb6/adocs/documentation/src/main/asciidoc/guides/_cg_ide_agilej.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_agilej.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_agilej.adoc
new file mode 100644
index 0000000..9c4d5a7
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_agilej.adoc
@@ -0,0 +1,54 @@
+[[_cg_ide_agilej]]
+= AgileJ
+:Notice: 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.
+:_basedir: ../../../
+:_imagesdir: images/
+:toc: right
+
+
+link:http://www.agilej.com/[AgileJ Structure Views] is a commercial product to reverse engineer and visualize Java classes from source code.
+
+The key to using the tool is in developing a suitable filter script, a DSL.  You can use the following script as a starting point for visualizing Apache Isis domain models:
+
+[source,AgileJ]
+----
+// use CTRL+SPACE for completion suggestions
+hide all fields
+hide setter methods
+hide private methods
+hide methods named compareTo
+hide methods named toString
+hide methods named inject*
+hide methods named disable*
+hide methods named default*
+hide methods named hide*
+hide methods named autoComplete*
+hide methods named choices*
+hide methods named title
+hide methods named iconName
+hide methods named validate*
+hide methods named modify*
+hide protected methods
+hide types annotated as DomainService
+hide types named Constants
+hide types named InvoicingInterval
+hide enums
+hide constructors
+hide inner types named *Event
+hide inner types named *Functions
+hide inner types named *Predicates
+show getter methods in green
+show methods annotated as Programmatic in orange
+show methods annotated as Action in largest
+hide dependency lines
+hide call lines
+hide method lines
+----
+
+For more information on AgileJ, see Paul Wells' 8-part tutorial series on Youtube; the first can be found link:https://www.youtube.com/watch?v=YrZQ7lMSsH0[here] (view the "show more" comments to click through to other parts).
+
+[NOTE]
+====
+This material does not constitute an endorsement; AgileJ is not affiliated to Apache Software Foundation in any way.
+====
+

http://git-wip-us.apache.org/repos/asf/isis/blob/26fd2cb6/adocs/documentation/src/main/asciidoc/guides/_cg_ide_eclipse.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_eclipse.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_eclipse.adoc
index c6527fc..dac1f93 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_eclipse.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_eclipse.adoc
@@ -16,6 +16,10 @@ This plugin needs to be configured for each of your domain modules (usually just
 * configure the DataNucleus enhancer
 * run the app from the `.launch` file
 
+[NOTE]
+====
+This material does not constitute an endorsement; Eclipse foundation is not affiliated to Apache Software Foundation in any way.
+====
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/26fd2cb6/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
index 85887e2..f912828 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_cg_ide_intellij.adoc
@@ -6,12 +6,12 @@
 :toc: right
 
 
-This section describes how to install and setup IntelliJ, then how to import an application into IntelliJ and run it.
+This section describes how to install and setup JetBrains' IntelliJ IDEA, then how to import an application into IntelliJ and run it.
 
 
 [NOTE]
 ====
-This document relates to IntelliJ Community Edition 14.1.x, with screenshots taken for Windows.
+This material does not constitute an endorsement; JetBrains is not affiliated to Apache Software Foundation in any way.
 ====
 
 
@@ -20,6 +20,11 @@ This document relates to IntelliJ Community Edition 14.1.x, with screenshots tak
 
 This section covers installation and setup.
 
+[NOTE]
+====
+These notes relates to IntelliJ Community Edition 14.1.x, with screenshots taken for Windows.
+====
+
 === Download and Install
 
 https://www.jetbrains.com/idea/download/[Download] latest version of IntelliJ Community Edition, and install:


[3/3] isis git commit: ISIS-1269: ignore any null objects in list (this can happen if they have for example just been deleted).

Posted by da...@apache.org.
ISIS-1269: ignore any null objects in list (this can happen if they have for example just been deleted).

Really the list being rendered shouldn't include the object about to be deleted; in the isis-app-todoapp there was a programming error:

    public List<ToDoItem> delete() {

        // obtain title first, because cannot reference object after deleted
        final String title = container.titleOf(this);

        final List<ToDoItem> returnList = actionInvocationContext.isLast() ? toDoItems.notYetComplete() : null;

        // there's actually a bug in this method; shouldn't be returning the current object in the list if just deleted.
        // however, ISIS-1269 transparently handles this and won't attempt to render a deleted object.
        container.removeIfNotAlready(this);

        container.informUser(
                TranslatableString.tr("Deleted {title}", "title", title), this.getClass(), "delete");

        return returnList;
    }

On the other hand, in the more general case some *other* user might have just deleted the object, in which case this fix will also support that case.


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

Branch: refs/heads/master
Commit: 7798ab807d6cd0751d84eb61910021b8ca5794e0
Parents: 6a67f76
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Nov 26 14:13:10 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Nov 26 14:17:17 2015 +0000

----------------------------------------------------------------------
 .../wicket/model/models/EntityCollectionModel.java | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7798ab80/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index be64f05..f456afc 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -25,6 +25,7 @@ import java.util.Comparator;
 import java.util.List;
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
@@ -33,12 +34,12 @@ import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.commons.lang.Closure;
 import org.apache.isis.core.commons.lang.IterableExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -77,13 +78,19 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
         STANDALONE {
             @Override
             List<ObjectAdapter> load(final EntityCollectionModel entityCollectionModel) {
-                return Lists.transform(entityCollectionModel.mementoList, ObjectAdapterMemento.Functions.fromMemento(
-                        ConcurrencyChecking.NO_CHECK));
+                return Lists.newArrayList(
+                        Iterables.filter(
+                                Iterables.transform(entityCollectionModel.mementoList,
+                                        ObjectAdapterMemento.Functions.fromMemento(ConcurrencyChecking.NO_CHECK)),
+                                Predicates.notNull()));
             }
 
             @Override
             void setObject(final EntityCollectionModel entityCollectionModel, final List<ObjectAdapter> list) {
-                entityCollectionModel.mementoList = Lists.newArrayList(Lists.transform(list, ObjectAdapterMemento.Functions.toMemento()));
+                entityCollectionModel.mementoList = Lists.newArrayList(
+                        Iterables.filter(
+                                Iterables.transform(list, ObjectAdapterMemento.Functions.toMemento()),
+                                Predicates.<ObjectAdapterMemento>notNull()));
             }
 
             @Override


[2/3] isis git commit: ISIS-1243: minor refactorings while researching the issue to do with exception for action returning a Clob (now logged as ISIS-1264).

Posted by da...@apache.org.
ISIS-1243: minor refactorings while researching the issue to do with exception for action returning a Clob (now logged as ISIS-1264).

Main changes are factoring out of some methods in ActionPanel (to make more symmetrical for no-arg vs with-arg cases), and also changing of an overloaded method signature in BulkActionsLinkFactory.


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

Branch: refs/heads/master
Commit: 6a67f769dea0177e329cb059196ac51f42e7016d
Parents: 26fd2cb
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Nov 26 13:56:07 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Nov 26 13:56:07 2015 +0000

----------------------------------------------------------------------
 .../Persistable_downloadJdoMetadata.java        |  3 +-
 .../viewer/wicket/model/models/ActionModel.java |  2 -
 .../ActionResultResponseHandlingStrategy.java   | 13 ++--
 .../entityactions/EntityActionLinkFactory.java  |  4 +-
 .../entityactions/EntityActionUtil.java         |  2 +-
 .../actionmenu/serviceactions/CssMenuItem.java  |  4 +-
 .../ServiceActionLinkFactory.java               |  5 +-
 .../ui/components/actions/ActionPanel.java      | 72 +++++++++++---------
 .../collection/bulk/BulkActionsLinkFactory.java |  5 +-
 .../StandaloneCollectionPanel.java              |  2 +-
 .../widgets/linkandlabel/ActionLinkFactory.java |  5 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java |  3 +
 12 files changed, 66 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
index 1fdb08e..1040e79 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
@@ -55,7 +55,7 @@ public class Persistable_downloadJdoMetadata {
             cssClassFa = "fa-download"
     )
     @MemberOrder(sequence = "800.1")
-    public Object $$(final String fileName) throws JAXBException, IOException {
+    public Clob $$(final String fileName) throws JAXBException, IOException {
 
         final Class<? extends Persistable> objClass = persistable.getClass();
         final String objClassName = objClass.getName();
@@ -66,7 +66,6 @@ public class Persistable_downloadJdoMetadata {
         return new Clob(Util.withSuffix(fileName, "jdo"), "text/xml", xml);
     }
 
-
     public String default0$$() {
         return Util.withSuffix(persistable.getClass().getName(), "jdo");
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 84d1152..96f61ed 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -51,7 +51,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 import org.apache.isis.applib.value.NamedWithMimeType;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
@@ -463,7 +462,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         final ObjectAdapter[] arguments = getArgumentsAsArray();
         final ObjectAction action = getActionMemento().getAction();
 
-        final AuthenticationSession session = getAuthenticationSession();
         final ObjectAdapter resultAdapter =
                 action.executeWithRuleChecking(
                         targetAdapter, arguments,

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
index 3bc6e65..81a77ed 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
@@ -18,9 +18,6 @@ package org.apache.isis.viewer.wicket.ui.actionresponse;
 
 import java.net.URL;
 
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.models.VoidModel;
-import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
@@ -31,6 +28,10 @@ import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.time.Duration;
 
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.models.VoidModel;
+import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
+
 public enum ActionResultResponseHandlingStrategy {
     REDIRECT_TO_VOID {
         @Override
@@ -55,10 +56,13 @@ public enum ActionResultResponseHandlingStrategy {
         public void handleResults(final Component component, final ActionResultResponse resultResponse) {
             RequestCycle requestCycle = component.getRequestCycle();
             AjaxRequestTarget target = requestCycle.find(AjaxRequestTarget.class);
+
             if (target == null) {
-                // normal (non-Ajax) request => just stream the Lob to the browser
+                // non-Ajax request => just stream the Lob to the browser
+                // or if this is a no-arg action, there also will be no parent for the component
                 requestCycle.scheduleRequestHandlerAfterCurrent(resultResponse.getHandler());
             } else {
+                // otherwise,
                 // Ajax request => respond with a redirect to be able to stream the Lob to the client
                 ResourceStreamRequestHandler scheduledHandler = (ResourceStreamRequestHandler) resultResponse.getHandler();
                 StreamAfterAjaxResponseBehavior streamingBehavior = new StreamAfterAjaxResponseBehavior(scheduledHandler);
@@ -66,6 +70,7 @@ public enum ActionResultResponseHandlingStrategy {
                 CharSequence callbackUrl = streamingBehavior.getCallbackUrl();
                 target.appendJavaScript("setTimeout(\"window.location.href='" + callbackUrl + "'\", 10);");
             }
+
         }
     },
     OPEN_URL_IN_BROWSER {

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index 2816369..698dcf9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -48,9 +48,9 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
 
     @Override
     public LinkAndLabel newLink(
+            final String linkId,
             final ObjectAdapterMemento adapterMemento,
-            final ObjectAction action,
-            final String linkId) {
+            final ObjectAction action) {
 
         final ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
         

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
index 1adb8e5..ed28333 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
@@ -113,7 +113,7 @@ public final class EntityActionUtil {
 
             @Override
             public LinkAndLabel apply(ObjectAction objectAction) {
-                return linkFactory.newLink(adapterMemento, objectAction, linkId);
+                return linkFactory.newLink(linkId, adapterMemento, objectAction);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 45bb5f7..70f9a70 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -322,8 +322,8 @@ class CssMenuItem implements Serializable {
 
         // build the link
         final LinkAndLabel linkAndLabel = actionLinkFactory.newLink(
-                targetAdapterMemento, objectAction, PageAbstract.ID_MENU_LINK
-                );
+                PageAbstract.ID_MENU_LINK, targetAdapterMemento, objectAction
+        );
         if (linkAndLabel == null) {
             // can only get a null if invisible, so this should not happen given guard above
             return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
index 2aa97ba..d4a971f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
@@ -34,9 +34,8 @@ class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
     
     @Override
     public LinkAndLabel newLink(
-            final ObjectAdapterMemento adapterMemento,
-            final ObjectAction action,
-            final String linkId) {
+            final String linkId, final ObjectAdapterMemento adapterMemento,
+            final ObjectAction action) {
         
         ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index eda9abd..fa2492f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -81,7 +81,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
     public ActionPanel(final String id, final ActionModel actionModel) {
         super(id, actionModel);
         actionModel.setExecutor(this);
-        buildGui(actionModel);
+        buildGui(getActionModel());
     }
 
     /**
@@ -100,24 +100,9 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
 
     private void buildGui(final ActionModel actionModel) {
         if (actionModel.hasParameters()) {
-            buildGuiForParameters();
+            buildGuiForParameters(getActionModel());
         } else {
-
-            boolean succeeded = executeActionAndProcessResults(null, null);
-            if(succeeded) {
-                // nothing to do
-            } else {
-
-                // render the target entity again
-                //
-                // (One way this can occur is if an event subscriber has a defect and throws an exception; in which case
-                // the EventBus' exception handler will automatically veto.  This results in a growl message rather than
-                // an error page, but is probably 'good enough').
-                final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
-
-                ActionResultResponse resultResponse = ActionResultResponseType.OBJECT.interpretResult(this.getActionModel(), targetAdapter, null);
-                resultResponse.getHandlingStrategy().handleResults(this, resultResponse);
-            }
+            buildGuiForNoParameters(actionModel);
         }
     }
 
@@ -130,28 +115,20 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         return this;
     }
 
-    private void buildGuiForParameters() {
+    private void buildGuiForParameters(final ActionModel actionModel) {
 
-        WebMarkupContainer header = new WebMarkupContainer(ID_HEADER) {
-            @Override
-            protected void onConfigure() {
-                super.onConfigure();
-
-                setVisible(showHeader);
-            }
-        };
-        addOrReplace(header);
+        WebMarkupContainer header = addHeader();
 
         ObjectAdapter targetAdapter = null;
         try {
-            targetAdapter = getActionModel().getTargetAdapter();
-            
+            targetAdapter = actionModel.getTargetAdapter();
+
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PARAMETERS, getActionModel());
             getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, new EntityModel(targetAdapter));
 
             final String actionName = getActionModel().getActionMemento().getAction().getName();
             header.add(new Label(ID_ACTION_NAME, Model.of(actionName)));
-            
+
         } catch (final ConcurrencyException ex) {
 
             // second attempt should succeed, because the Oid would have
@@ -168,6 +145,39 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         }
     }
 
+    private WebMarkupContainer addHeader() {
+        WebMarkupContainer header = new WebMarkupContainer(ID_HEADER) {
+            @Override
+            protected void onConfigure() {
+                super.onConfigure();
+
+                setVisible(showHeader);
+            }
+        };
+        addOrReplace(header);
+        return header;
+    }
+
+    private void buildGuiForNoParameters(final ActionModel actionModel) {
+
+        boolean succeeded = executeActionAndProcessResults(null, null);
+        if(succeeded) {
+            // nothing to do
+        } else {
+
+            // render the target entity again
+            //
+            // (One way this can occur is if an event subscriber has a defect and throws an exception; in which case
+            // the EventBus' exception handler will automatically veto.  This results in a growl message rather than
+            // an error page, but is probably 'good enough').
+            final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
+
+            ActionResultResponse resultResponse = ActionResultResponseType.OBJECT.interpretResult(this.getActionModel(), targetAdapter, null);
+            resultResponse.getHandlingStrategy().handleResults(this, resultResponse);
+        }
+    }
+
+
     protected void bookmarkPage(BookmarkableModel<?> model) {
         getBookmarkedPagesModel().bookmarkPage(model);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/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 6a113a0..7004c56 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
@@ -70,9 +70,8 @@ public final class BulkActionsLinkFactory implements ActionLinkFactory {
 
     @Override
     public LinkAndLabel newLink(
-            final ObjectAdapterMemento objectAdapterMemento,
-            final ObjectAction objectAction,
-            final String linkId) {
+            final String linkId, final ObjectAdapterMemento objectAdapterMemento,
+            final ObjectAction objectAction) {
 
         final ActionMemento actionMemento = new ActionMemento(objectAction);
         final AbstractLink link = new Link<Object>(linkId) {

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
index 101f26e..196f061 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
@@ -164,7 +164,7 @@ public class StandaloneCollectionPanel extends PanelAbstract<EntityCollectionMod
         List<LinkAndLabel> links = Lists.transform(bulkActions, new Function<ObjectAction, LinkAndLabel>(){
             @Override
             public LinkAndLabel apply(ObjectAction objectAction) {
-                return linkFactory.newLink(null, objectAction, ID_ADDITIONAL_LINK);
+                return linkFactory.newLink(ID_ADDITIONAL_LINK, null, objectAction);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactory.java
index 6c07221..c3c76b6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactory.java
@@ -27,7 +27,6 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 public interface ActionLinkFactory extends Serializable {
 
     LinkAndLabel newLink(
-            final ObjectAdapterMemento adapter,
-            final ObjectAction noAction,
-            final String linkId);
+            final String linkId, final ObjectAdapterMemento adapter,
+            final ObjectAction noAction);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a67f769/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 e81de3d..1ff6bfc 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
@@ -53,6 +53,9 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
 
         final ActionModel actionModel = ActionModel.create(objectAdapter, action);
 
+        // this returns non-null if the action is no-arg and returns a URL or a Blob or a Clob.  Otherwise can use default handling
+        // TODO: the method looks at the actual compile-time return type; cannot see a way to check at runtime what is returned.
+        // TODO: see https://issues.apache.org/jira/browse/ISIS-1264 for further detail.
         final AjaxDeferredBehaviour ajaxDeferredBehaviour = determineDeferredBehaviour(action, actionModel);
 
         final AbstractLink link = new AjaxLink<Object>(linkId) {