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