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 2013/06/26 08:55:47 UTC
git commit: ISIS-445: actions can return Blob or Clob
Updated Branches:
refs/heads/master 050e9e32f -> 59c5479b0
ISIS-445: actions can return Blob or Clob
- will be downloaded
- the veil is suppressed (otherwise is never cleared)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/59c5479b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/59c5479b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/59c5479b
Branch: refs/heads/master
Commit: 59c5479b059cc5d4c714d8a979b2b1a37eee210c
Parents: 050e9e3
Author: Dan Haywood <da...@apache.org>
Authored: Wed Jun 26 07:55:26 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Jun 26 07:55:26 2013 +0100
----------------------------------------------------------------------
.../viewer/wicket/model/links/LinkAndLabel.java | 8 +++-
.../additionallinks/AdditionalLinksPanel.java | 5 +++
.../cssmenu/AppActionsCssMenuLinkFactory.java | 4 +-
.../ajaxtable/BulkActionsLinkFactory.java | 3 +-
.../entity/EntityActionLinkFactory.java | 4 +-
.../components/value/StandaloneValuePanel.java | 34 +++++++++++++---
.../components/widgets/cssmenu/CssMenuItem.java | 41 ++++++++++++++++++--
.../ui/pages/jquery.isis.wicket.viewer.js | 6 +--
8 files changed, 88 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index e037774..9aca2ea 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -29,11 +29,13 @@ public class LinkAndLabel implements Serializable {
private final AbstractLink link;
private final String label;
private final String disabledReasonIfAny;
+ private final boolean blobOrClob;
- public LinkAndLabel(final AbstractLink link, final String label, String disabledReasonIfAny) {
+ public LinkAndLabel(final AbstractLink link, final String label, String disabledReasonIfAny, boolean blobOrClob) {
this.link = link;
this.label = label;
this.disabledReasonIfAny = disabledReasonIfAny;
+ this.blobOrClob = blobOrClob;
}
public AbstractLink getLink() {
@@ -47,4 +49,8 @@ public class LinkAndLabel implements Serializable {
public String getDisabledReasonIfAny() {
return disabledReasonIfAny;
}
+
+ public boolean isBlobOrClob() {
+ return blobOrClob;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
index 259b9a6..434b6b1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
@@ -21,12 +21,14 @@ package org.apache.isis.viewer.wicket.ui.components.additionallinks;
import java.util.List;
+import org.apache.wicket.AttributeModifier;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
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.wicket.model.Model;
import org.apache.isis.core.commons.lang.StringUtils;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -74,6 +76,9 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
if(disabledReasonIfAny != null) {
viewTitleLabel.add(new AttributeAppender("title", disabledReasonIfAny));
}
+ if(linkAndLabel.isBlobOrClob()) {
+ link.add(new AttributeModifier("class", Model.of("noVeil")));
+ }
viewTitleLabel.add(new CssClassAppender(StringUtils.toLowerDashed(linkAndLabel.getLabel())));
link.addOrReplace(viewTitleLabel);
item.addOrReplace(link);
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
index 8e3964b..d6df1a5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
@@ -31,6 +31,7 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.PageType;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
@@ -49,7 +50,8 @@ class AppActionsCssMenuLinkFactory implements CssMenuLinkFactory {
final AbstractLink link = Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
final String actionLabel = ObjectActions.nameFor(action);
- return new LinkAndLabel(link, actionLabel, null);
+ boolean blobOrClob = CssMenuItem.returnsBlobOrClob(action);
+ return new LinkAndLabel(link, actionLabel, null, blobOrClob);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
index 53aafb5..e2481de 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java
@@ -35,6 +35,7 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
@@ -100,6 +101,6 @@ final class BulkActionsLinkFactory implements CssMenuLinkFactory {
};
link.add(new JGrowlBehaviour());
- return new LinkAndLabel(link, objectAction.getName(), null);
+ return new LinkAndLabel(link, objectAction.getName(), null, false);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
index 2d5f70a..14714e3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
@@ -43,6 +43,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
@@ -81,7 +82,8 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
link.setEnabled(false);
}
- return new LinkAndLabel(link, label, disabledReasonIfAny);
+ boolean blobOrClob = CssMenuItem.returnsBlobOrClob(action);
+ return new LinkAndLabel(link, label, disabledReasonIfAny, blobOrClob);
}
private AbstractLink createLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, final ObjectAdapter adapter) {
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index 19fb147..a0748de 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -20,7 +20,14 @@
package org.apache.isis.viewer.wicket.ui.components.value;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.applib.value.Clob;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.wicket.model.models.ValueModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -37,12 +44,27 @@ public class StandaloneValuePanel extends PanelAbstract<ValueModel> {
public StandaloneValuePanel(final String id, final ValueModel valueModel) {
super(id, valueModel);
- buildGui();
- }
-
- private void buildGui() {
- ObjectAdapter objectAdapter = getModel().getObject();
- add(new Label(ID_STANDALONE_VALUE, objectAdapter.titleString()));
+ final ObjectAdapter objectAdapter = getModel().getObject();
+ final Object value = objectAdapter.getObject();
+ final String label;
+
+ if(value instanceof Clob) {
+ final Clob clob = (Clob) value;
+ ResourceStreamRequestHandler handler =
+ new ResourceStreamRequestHandler(new StringResourceStream(clob.getChars(), clob.getMimeType().toString()), clob.getName());
+ handler.setContentDisposition(ContentDisposition.ATTACHMENT);
+ getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+ label = "Downloading: " + clob.getName();
+ } else if(value instanceof Blob) {
+ final Blob blob = (Blob) value;
+ ResourceRequestHandler handler =
+ new ResourceRequestHandler(new ByteArrayResource(blob.getMimeType().toString(), blob.getBytes(), blob.getName()), null);
+ getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+ label = "Downloading: " + blob.getName();
+ } else {
+ label = objectAdapter.titleString(null);
+ }
+ add(new Label(ID_STANDALONE_VALUE, label));
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
index e2c1a3c..4f6417b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
@@ -27,7 +27,6 @@ import java.util.List;
import com.google.common.collect.Lists;
-import org.apache.wicket.Application;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
@@ -38,12 +37,14 @@ import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.model.Model;
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.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
import org.apache.isis.core.commons.ensure.Ensure;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -87,6 +88,12 @@ public class CssMenuItem implements Serializable {
return this;
}
+
+ public Builder returnsBlobOrClob(boolean blobOrClob) {
+ cssMenuItem.setReturnsBlobOrClob(blobOrClob);
+ return this;
+ }
+
/**
* Access the {@link CssMenuItem} before it is attached to its parent.
*
@@ -114,13 +121,14 @@ public class CssMenuItem implements Serializable {
private AbstractLink link;
private boolean enabled = true; // unless disabled
-
private String disabledReason;
+ private boolean blobOrClob = false; // unless set otherwise
static final String ID_MENU_LABEL = "menuLabel";
static final String ID_SUB_MENU_ITEMS = "subMenuItems";
+
/**
* Factory method returning {@link Builder builder}.
*/
@@ -172,6 +180,11 @@ public class CssMenuItem implements Serializable {
this.enabled = enabled;
}
+ public void setReturnsBlobOrClob(boolean blobOrClob) {
+ this.blobOrClob = blobOrClob;
+ }
+
+
/**
* Only populated if not {@link #isEnabled() enabled}.
*/
@@ -223,10 +236,26 @@ public class CssMenuItem implements Serializable {
// check whether enabled
final Consent usability = objectAction.isUsable(session, adapter, where);
final String reasonDisabledIfAny = usability.getReason();
+
+ // check if returns blob or clob (if so, then add CSS to suppress veil)
+ boolean blobOrClob = returnsBlobOrClob(objectAction);
- return newSubMenuItem(actionLabel).link(link).enabled(reasonDisabledIfAny);
+ return newSubMenuItem(actionLabel).link(link).enabled(reasonDisabledIfAny).returnsBlobOrClob(blobOrClob);
}
+ public static boolean returnsBlobOrClob(final ObjectAction objectAction) {
+ boolean blobOrClob = false;
+ final ObjectSpecification returnType = objectAction.getReturnType();
+ if(returnType != null) {
+ Class<?> cls = returnType.getCorrespondingClass();
+ if (Blob.class.isAssignableFrom(cls) || Clob.class.isAssignableFrom(cls)) {
+ blobOrClob = true;
+ }
+ }
+ return blobOrClob;
+ }
+
+
/**
* Creates a {@link Builder} for a submenu item where the provided {@link CssMenuLinkFactory} is able to provide the target adapter.
*/
@@ -260,6 +289,10 @@ public class CssMenuItem implements Serializable {
// show link...
markupContainer.add(link);
link.add(label);
+
+ if(this.blobOrClob) {
+ link.add(new AttributeModifier("class", Model.of("noVeil")));
+ }
// .. and hide label
Components.permanentlyHide(markupContainer, CssMenuItem.ID_MENU_LABEL);
return link;
http://git-wip-us.apache.org/repos/asf/isis/blob/59c5479b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index 50ffffc..ce6e0e6 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -21,7 +21,7 @@ $(document).ready(function() {
$('#veil').show();
};
- $('.buttons .okButton').click(showVeil);
- $('.buttons .ok').click(showVeil);
- $('.cssSubMenuItemsPanel .cssSubMenuItem a').click(showVeil);
+ $('.buttons .okButton:not(.noVeil)').click(showVeil);
+ $('.buttons .ok:not(.noVeil)').click(showVeil);
+ $('.cssSubMenuItemsPanel .cssSubMenuItem a:not(.noVeil)').click(showVeil);
});