From 785d855ee951e30e7f4345535f38e258c251fc7b Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Fri, 15 Nov 2019 16:40:37 +0100 Subject: [PATCH] Incident #18083 New StorageHub URLs not accessed by the widget --- pom.xml | 2 +- .../portlets/user/wswidget/ItemBuilder.java | 3 +- .../user/wswidget/WorkspaceWidget.java | 34 +++++++++++++------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 4ca5572..b36912c 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ workspace-widget-portlet war workspace-widget-portlet Portlet - 1.3.1-SNAPSHOT + 1.3.2-SNAPSHOT Workspace Widget diff --git a/src/main/java/org/gcube/portlets/user/wswidget/ItemBuilder.java b/src/main/java/org/gcube/portlets/user/wswidget/ItemBuilder.java index 96a7121..6e9bf6f 100644 --- a/src/main/java/org/gcube/portlets/user/wswidget/ItemBuilder.java +++ b/src/main/java/org/gcube/portlets/user/wswidget/ItemBuilder.java @@ -8,6 +8,7 @@ import java.util.Date; import java.util.List; import org.gcube.common.storagehub.model.items.AbstractFileItem; +import org.gcube.common.storagehub.model.items.ExternalLink; import org.gcube.common.storagehub.model.items.ExternalURL; import org.gcube.common.storagehub.model.items.FolderItem; import org.gcube.common.storagehub.model.items.Item; @@ -70,7 +71,7 @@ public class ItemBuilder { } else { //is a file, a Link or an XML MDIcon mdIcon = IconsManager.getDefault(); - if (workspaceItem instanceof ExternalURL) { + if (workspaceItem instanceof ExternalLink || workspaceItem instanceof ExternalURL) { mdIcon = IconsManager.getIconTypeLink(); } else { AbstractFileItem aItem = (AbstractFileItem) workspaceItem; diff --git a/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java b/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java index 0697294..98288bf 100644 --- a/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java +++ b/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java @@ -15,10 +15,13 @@ import javax.servlet.http.HttpServletResponse; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.exceptions.StorageHubException; +import org.gcube.common.storagehub.model.items.ExternalLink; +import org.gcube.common.storagehub.model.items.ExternalURL; import org.gcube.common.storagehub.model.items.Item; import org.gcube.portlets.user.wswidget.shared.AuthorizedUser; import org.gcube.portlets.user.wswidget.shared.Breadcrumb; @@ -59,21 +62,30 @@ public class WorkspaceWidget extends MVCPortlet { StorageHubClient client = new StorageHubClient(); FileContainer fileContainer = null; StreamDescriptor streamDescr = null; + Item item = null; + HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(resourceResponse); try { - fileContainer = client.open(selectedItemId).asFile(); - streamDescr = fileContainer.download(selectedItemId); + ItemContainer itemContainer = client.open(selectedItemId).asItem(); + item = itemContainer.get(); + if (item instanceof ExternalLink) { //if is a type URL we open directly the link (StorageHub Created it) + ExternalLink extLink = (ExternalLink) item; + httpRes.sendRedirect(extLink.getValue().toString()); + } else { + fileContainer = client.open(selectedItemId).asFile(); + streamDescr = fileContainer.download(selectedItemId); + } + if (item instanceof ExternalURL) { //if is a type URL we open directly the link (HL Created it) + Scanner sc = new Scanner( streamDescr.getStream()); + String text = sc.useDelimiter("\\A").next(); + sc.close(); + streamDescr.getStream().close(); + httpRes.sendRedirect(text); + + } } catch (StorageHubException e) { e.printStackTrace(); } - HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(resourceResponse); - if (ITEM_URL_TYPE.compareTo(fileContainer.get().getPrimaryType()) == 0) { //if is a type URL we open drectly the link - Scanner sc = new Scanner( streamDescr.getStream()); - String text = sc.useDelimiter("\\A").next(); - sc.close(); - streamDescr.getStream().close(); - httpRes.sendRedirect(text); - } - else { + if (! (item instanceof ExternalURL || item instanceof ExternalLink)) { HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(resourceRequest); ServletResponseUtil.sendFile(httpReq,httpRes, streamDescr.getFileName(), streamDescr.getStream(), "application/download"); streamDescr.getStream().close();