From 29eb19cba6af0512ea995c77e3d4c9c012e19e86 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Wed, 18 May 2016 11:37:38 +0000
Subject: [PATCH] SSDM-3607 : Browsing the file metadata of archived datasets,
 disable links

SVN: 36544
---
 .../server/DatasetDownloadServlet.java        | 37 +++++++++++++------
 .../generic/server/IDirectoryRenderer.java    |  6 +--
 .../server/PlainTextRendererFactory.java      |  6 +--
 .../server/SimpleHTMLDirectoryRenderer.java   | 36 ++++++++++++------
 .../client/application/util/DataSetUtils.java |  5 ++-
 .../application/dataset/DataViewSection.java  |  8 ++--
 6 files changed, 64 insertions(+), 34 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
index 542fef02f42..c93befb163b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
@@ -66,6 +66,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
     static final String MAIN_DATA_SET_PATTERN_KEY = "mdsPattern";
 
+    static final String DISABLE_LINKS = "disableLinks";
+
     private static String DOWNLOAD_URL;
 
     static void setDownloadUrl(String downloadUrl)
@@ -109,10 +111,12 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
         private final boolean forceAutoResolve;
 
+        private final boolean disableLinks;
+
         public RequestParams(String dataSetCode, String pathInfo, String sessionIdOrNull,
                 String urlPrefixWithDataset, String displayMode, boolean autoResolve,
                 String mainDataSetPathOrNull, String mainDataSetPatternOrNull,
-                boolean forceAutoResolve)
+                boolean forceAutoResolve, boolean disableLinks)
         {
             this.dataSetCode = dataSetCode;
             this.pathInfo = pathInfo;
@@ -123,6 +127,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             this.mainDataSetPathOrNull = mainDataSetPathOrNull;
             this.mainDataSetPatternOrNull = mainDataSetPatternOrNull;
             this.forceAutoResolve = forceAutoResolve;
+            this.disableLinks = disableLinks;
         }
 
         public boolean isAutoResolve()
@@ -169,6 +174,12 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
         {
             return mainDataSetPatternOrNull;
         }
+
+        public boolean isDisableLinks()
+        {
+            return disableLinks;
+        }
+
     }
 
     @Override
@@ -298,6 +309,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
         String mainDataSetPatternOrNull = request.getParameter(MAIN_DATA_SET_PATTERN_KEY);
         boolean shouldSetMainDataSetParamsToNull =
                 autoResolve == false && forceAutoResolve == false;
+        Boolean disableLinks = Boolean.valueOf(request.getParameter(DISABLE_LINKS));
+
         if (shouldSetMainDataSetParamsToNull || StringUtils.isBlank(mainDataSetPathOrNull))
         {
             mainDataSetPathOrNull = null;
@@ -308,7 +321,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
         }
         return new RequestParams(dataSetCode, pathInfo, sessionIDOrNull, urlPrefixWithDataset,
                 displayMode, autoResolve, mainDataSetPathOrNull, mainDataSetPatternOrNull,
-                forceAutoResolve);
+                forceAutoResolve, disableLinks);
     }
 
     private static String getDisplayMode(HttpServletRequest request)
@@ -374,7 +387,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
                         requestParams, session, node, true);
             } else
             {
-                createPage(rendererFactory, response, dataSetCode, renderingContext, node);
+                createPage(rendererFactory, response, dataSetCode, renderingContext, node, requestParams.isDisableLinks());
             }
         } else
         {
@@ -397,7 +410,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             String newRelativePath = mainDataSets.get(0).getRelativePath();
             RenderingContext newRenderingContext =
                     new RenderingContext(renderingContext, newRelativePath);
-            autoResolveRedirect(response, newRenderingContext);
+            autoResolveRedirect(response, newRenderingContext, requestParams.isDisableLinks());
         } else if (AutoResolveUtils.continueAutoResolving(requestParams.tryGetMainDataSetPattern(),
                 dirNode))
         {
@@ -408,22 +421,22 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             String newRelativePath = pathPrefix + childName;
             RenderingContext newRenderingContext =
                     new RenderingContext(renderingContext, newRelativePath);
-            autoResolveRedirect(response, newRenderingContext);
+            autoResolveRedirect(response, newRenderingContext, requestParams.isDisableLinks());
         } else
         {
-            createPage(rendererFactory, response, dataSetCode, renderingContext, dirNode);
+            createPage(rendererFactory, response, dataSetCode, renderingContext, dirNode, requestParams.isDisableLinks());
         }
     }
 
     private static void autoResolveRedirect(HttpServletResponse response,
-            RenderingContext newContext) throws IOException
+            RenderingContext newContext, Boolean disableLinks) throws IOException
     {
         String urlPrefix = newContext.getUrlPrefix();
         String relativePath = newContext.getRelativePath();
         String sessionIdOrNull = newContext.getSessionIdOrNull();
         final String newLocation =
                 DOWNLOAD_URL + urlPrefix + "/" + relativePath
-                        + Utils.createUrlParameterForSessionId("?", sessionIdOrNull);
+                        + Utils.createUrlParameterForSessionId("?", sessionIdOrNull) + "&disableLinks=" + disableLinks;
         if (operationLog.isInfoEnabled())
         {
             operationLog.info(String.format("Auto resolve redirect: '%s', context: %s",
@@ -433,7 +446,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
     }
 
     private void createPage(IRendererFactory rendererFactory, HttpServletResponse response,
-            String dataSetCode, RenderingContext renderingContext, IHierarchicalContentNode dirNode)
+            String dataSetCode, RenderingContext renderingContext, IHierarchicalContentNode dirNode, Boolean disableLinks)
             throws IOException
     {
         assert dirNode.isDirectory();
@@ -455,7 +468,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             String relativeParentPath = renderingContext.getRelativeParentPath();
             if (relativeParentPath != null)
             {
-                directoryRenderer.printLinkToParentDirectory(relativeParentPath);
+                directoryRenderer.printLinkToParentDirectory(relativeParentPath, disableLinks);
             }
             List<IHierarchicalContentNode> children = dirNode.getChildNodes();
             HierarchicalContentUtils.sortNodes(children);
@@ -466,14 +479,14 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
                 String normalizedRelativePath = relativePath.replace('\\', '/');
                 if (childNode.isDirectory())
                 {
-                    directoryRenderer.printDirectory(name, normalizedRelativePath, childNode.getFileLength());
+                    directoryRenderer.printDirectory(name, normalizedRelativePath, childNode.getFileLength(), disableLinks);
                 } else
                 {
                     Integer checksumOrNull =
                             childNode.isChecksumCRC32Precalculated() ? childNode.getChecksumCRC32()
                                     : null;
                     directoryRenderer.printFile(name, normalizedRelativePath,
-                            childNode.getFileLength(), checksumOrNull);
+                            childNode.getFileLength(), checksumOrNull, disableLinks);
                 }
             }
             directoryRenderer.printFooter();
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDirectoryRenderer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDirectoryRenderer.java
index daf632be138..ce5ce17c2a8 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDirectoryRenderer.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDirectoryRenderer.java
@@ -25,11 +25,11 @@ public interface IDirectoryRenderer extends IWriterInjector
 {
     public void printHeader();
 
-    public void printLinkToParentDirectory(String relativePath);
+    public void printLinkToParentDirectory(String relativePath, Boolean disableLinks);
 
-    public void printDirectory(String name, String relativePath, long size);
+    public void printDirectory(String name, String relativePath, long size, Boolean disableLinks);
 
-    public void printFile(String name, String relativePath, long size, Integer checksumOrNull);
+    public void printFile(String name, String relativePath, long size, Integer checksumOrNull, Boolean disableLinks);
 
     public void printFooter();
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java
index 6078d80c69a..eb742c2f2c4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java
@@ -65,13 +65,13 @@ public class PlainTextRendererFactory implements IRendererFactory
         private PrintWriter writer;
 
         @Override
-        public void printDirectory(String name, String relativePath, long size)
+        public void printDirectory(String name, String relativePath, long size, Boolean disableLinks)
         {
             writer.format("%s\t%s\n", name, DirectoryRendererUtil.renderFileSize(size));
         }
 
         @Override
-        public void printFile(String name, String relativePath, long size, Integer checksumOrNull)
+        public void printFile(String name, String relativePath, long size, Integer checksumOrNull, final Boolean disableLinks)
         {
             writer.format("%s\t%s\t%s\n", name, DirectoryRendererUtil.renderFileSize(size),
                     DirectoryRendererUtil.renderCRC32Checksum(checksumOrNull));
@@ -89,7 +89,7 @@ public class PlainTextRendererFactory implements IRendererFactory
         }
 
         @Override
-        public void printLinkToParentDirectory(String relativePath)
+        public void printLinkToParentDirectory(String relativePath, Boolean disableLinks)
         {
         }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLDirectoryRenderer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLDirectoryRenderer.java
index 3a0a543d985..5708a22159d 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLDirectoryRenderer.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLDirectoryRenderer.java
@@ -47,7 +47,11 @@ final class SimpleHTMLDirectoryRenderer implements IDirectoryRenderer
 
     private static final Template ROW_TEMPLATE =
             new Template(
-                    "<tr><td class='td_file'><a href='${path}?mode=simpleHtml${sessionId}'>${name}</td><td>${size}</td><td>${checksum}</td></tr>");
+                    "<tr><td class='td_file'><a href='${path}?disableLinks=${disableLinks}&mode=simpleHtml${sessionId}'>${name}</td><td>${size}</td><td>${checksum}</td></tr>");
+
+    private static final Template ROW_TEMPLATE_NO_LINK =
+            new Template(
+                    "<tr><td class='td_file'>${name}</td><td>${size}</td><td>${checksum}</td></tr>");
 
     private static final Template HEADER_TEMPLATE = new Template("<html><head>" + CSS
             + "</head><body>" + "<table> " + "${folder}" + "");
@@ -92,34 +96,44 @@ final class SimpleHTMLDirectoryRenderer implements IDirectoryRenderer
     }
 
     @Override
-    public void printLinkToParentDirectory(final String aRelativePath)
+    public void printLinkToParentDirectory(final String aRelativePath, final Boolean disableLinks)
     {
-        printRow("..", aRelativePath, "", "");
+        printRow("..", aRelativePath, "", "", true, disableLinks);
     }
 
     @Override
-    public void printDirectory(final String name, final String aRelativePath, final long size)
+    public void printDirectory(final String name, final String aRelativePath, final long size, final Boolean disableLinks)
     {
-        printRow(name, aRelativePath, DirectoryRendererUtil.renderFileSize(size), "");
+        printRow(name, aRelativePath, DirectoryRendererUtil.renderFileSize(size), "", true, disableLinks);
     }
 
     @Override
     public void printFile(final String name, final String aRelativePath, final long size,
-            final Integer checksumOrNull)
+            final Integer checksumOrNull, final Boolean disableLinks)
     {
         printRow(name, aRelativePath, DirectoryRendererUtil.renderFileSize(size),
-                DirectoryRendererUtil.renderCRC32Checksum(checksumOrNull));
+                DirectoryRendererUtil.renderCRC32Checksum(checksumOrNull), false, disableLinks);
     }
 
     private void printRow(final String name, final String aRelativePath, final String fileSize,
-            final String checksum)
+            final String checksum, final Boolean isDirectory, final Boolean disableLinks)
     {
-        final Template template = ROW_TEMPLATE.createFreshCopy();
-        template.bind("path", urlPrefix + encodeURL(aRelativePath));
+        Template template = null;
+        if (!isDirectory && disableLinks)
+        {
+            template = ROW_TEMPLATE_NO_LINK.createFreshCopy();
+        } else
+        {
+            template = ROW_TEMPLATE.createFreshCopy();
+            template.bind("path", urlPrefix + encodeURL(aRelativePath));
+            template.bind("sessionId", Utils.createUrlParameterForSessionId("&", sessionIdOrNull));
+            template.bind("disableLinks", disableLinks.toString());
+        }
+
         template.bind("name", name);
         template.bind("size", fileSize);
         template.bind("checksum", checksum);
-        template.bind("sessionId", Utils.createUrlParameterForSessionId("&", sessionIdOrNull));
+
         writer.println(template.createText());
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java
index fa9381e424d..18af6508026 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java
@@ -35,14 +35,17 @@ public class DataSetUtils
 
     private static final String MODE = "mode";
 
+    private static final String DISABLE_LINKS = "disableLinks";
+
     public static String createDataViewUrl(AbstractExternalData dataSet, GenericViewModel model,
-            String modeOrNull, boolean autoResolve)
+            String modeOrNull, boolean autoResolve, boolean disableLinks)
     {
         URLMethodWithParameters methodWithParameters =
                 new URLMethodWithParameters(dataSet.getDataStore().getDownloadUrl() + "/"
                         + dataSet.getCode());
         String sessionID = model.getSessionContext().getSessionID();
         methodWithParameters.addParameter(GenericSharedConstants.SESSION_ID_PARAMETER, sessionID);
+        methodWithParameters.addParameter(DISABLE_LINKS, disableLinks);
         if (modeOrNull != null)
         {
             methodWithParameters.addParameter(MODE, modeOrNull);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java
index 14046d59ce8..d6a672024c8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java
@@ -128,10 +128,10 @@ public class DataViewSection extends TabContent
 
                         if (service.getLabel().equals(FILES_SMART_VIEW))
                         {
-                            showDataSetFilesView(true);
+                            showDataSetFilesView(true, !dataset.isAvailable());
                         } else if (service.getLabel().equals(FILES_HOME_VIEW))
                         {
-                            showDataSetFilesView(false);
+                            showDataSetFilesView(false, !dataset.isAvailable());
                         } else
                         {
                             ReportingPluginType reportingPluginTypeOrNull =
@@ -196,10 +196,10 @@ public class DataViewSection extends TabContent
                             service, criteria, action);
                 }
 
-                private void showDataSetFilesView(boolean autoResolve)
+                private void showDataSetFilesView(boolean autoResolve, boolean disableLinks)
                 {
                     showDssUrl(DataSetUtils.createDataViewUrl(dataset, viewContext.getModel(),
-                            "simpleHtml", autoResolve));
+                            "simpleHtml", autoResolve, disableLinks));
                 }
 
                 private void showDssUrl(String url)
-- 
GitLab