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:23 UTC
[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).
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) {