From 2035a8d73e284fea2aaf524e2a6a5b32ee1e728a Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Wed, 6 Oct 2010 11:25:18 +0000
Subject: [PATCH] LMS-1793 Added code to force auto resolve.

SVN: 18179
---
 .../server/DatasetDownloadServlet.java        | 53 +++++++++++++------
 .../GenericDssLinkReportingPlugin.java        |  4 +-
 2 files changed, 40 insertions(+), 17 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 ffa93fc865f..3810dcb6df5 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
@@ -59,6 +59,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
     static final String AUTO_RESOLVE_KEY = "autoResolve";
 
+    static final String FORCE_AUTO_RESOLVE_KEY = "forceAutoResolve";
+
     static final String MAIN_DATA_SET_PATH_KEY = "mdsPath";
 
     static final String MAIN_DATA_SET_PATTERN_KEY = "mdsPattern";
@@ -117,9 +119,12 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
         private final String mainDataSetPatternOrNull;
 
+        private final boolean forceAutoResolve;
+
         public RequestParams(String dataSetCode, String pathInfo, String sessionIdOrNull,
                 String urlPrefixWithDataset, String displayMode, boolean autoResolve,
-                String mainDataSetPathOrNull, String mainDataSetPatternOrNull)
+                String mainDataSetPathOrNull, String mainDataSetPatternOrNull,
+                boolean forceAutoResolve)
         {
             this.dataSetCode = dataSetCode;
             this.pathInfo = pathInfo;
@@ -129,6 +134,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             this.autoResolve = autoResolve;
             this.mainDataSetPathOrNull = mainDataSetPathOrNull;
             this.mainDataSetPatternOrNull = mainDataSetPatternOrNull;
+            this.forceAutoResolve = forceAutoResolve;
         }
 
         public boolean isAutoResolve()
@@ -136,6 +142,11 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             return autoResolve;
         }
 
+        public boolean isForceAutoResolve()
+        {
+            return forceAutoResolve;
+        }
+
         public String getDataSetCode()
         {
             return dataSetCode;
@@ -215,8 +226,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
     {
         File rootDir = createDataSetRootDirectory(dataSetCode, session);
         RenderingContext context =
-                new RenderingContext(rootDir, requestParams.getURLPrefix(), requestParams
-                        .getPathInfo()
+                new RenderingContext(rootDir, requestParams.getURLPrefix(),
+                        requestParams.getPathInfo()
 
                 );
 
@@ -265,18 +276,24 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
         Boolean autoResolveOrNull = Boolean.valueOf(request.getParameter(AUTO_RESOLVE_KEY));
         boolean autoResolve = autoResolveOrNull != null && autoResolveOrNull;
+        Boolean forceAutoResolveOrNull =
+                Boolean.valueOf(request.getParameter(FORCE_AUTO_RESOLVE_KEY));
+        boolean forceAutoResolve = forceAutoResolveOrNull != null && forceAutoResolveOrNull;
         String mainDataSetPathOrNull = request.getParameter(MAIN_DATA_SET_PATH_KEY);
         String mainDataSetPatternOrNull = request.getParameter(MAIN_DATA_SET_PATTERN_KEY);
-        if (autoResolve == false || StringUtils.isBlank(mainDataSetPathOrNull))
+        boolean shouldSetMainDataSetParamsToNull =
+                autoResolve == false && forceAutoResolve == false;
+        if (shouldSetMainDataSetParamsToNull || StringUtils.isBlank(mainDataSetPathOrNull))
         {
             mainDataSetPathOrNull = null;
         }
-        if (autoResolve == false || StringUtils.isBlank(mainDataSetPatternOrNull))
+        if (shouldSetMainDataSetParamsToNull || StringUtils.isBlank(mainDataSetPatternOrNull))
         {
             mainDataSetPatternOrNull = null;
         }
         return new RequestParams(dataSetCode, pathInfo, sessionIDOrNull, urlPrefixWithDataset,
-                displayMode, autoResolve, mainDataSetPathOrNull, mainDataSetPatternOrNull);
+                displayMode, autoResolve, mainDataSetPathOrNull, mainDataSetPatternOrNull,
+                forceAutoResolve);
     }
 
     private static String getDisplayMode(HttpServletRequest request)
@@ -336,7 +353,11 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
             if (requestParams.isAutoResolve())
             {
                 autoResolve(rendererFactory, response, dataSetCode, renderingContext,
-                        requestParams, session, file, dataSet);
+                        requestParams, session, file, dataSet, false);
+            } else if (requestParams.isForceAutoResolve())
+            {
+                autoResolve(rendererFactory, response, dataSetCode, renderingContext,
+                        requestParams, session, file, dataSet, true);
             } else
             {
                 createPage(rendererFactory, response, dataSet, renderingContext, file);
@@ -350,20 +371,22 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
 
     private void autoResolve(IRendererFactory rendererFactory, HttpServletResponse response,
             String dataSetCode, RenderingContext renderingContext, RequestParams requestParams,
-            HttpSession session, File dir, ExternalData dataSet) throws IOException
+            HttpSession session, File dir, ExternalData dataSet, boolean shouldForce)
+            throws IOException
     {
         assert dir.exists() && dir.isDirectory();
         List<File> mainDataSets =
-                AutoResolveUtils.findSomeMatchingFiles(renderingContext.getRootDir(), requestParams
-                        .tryGetMainDataSetPath(), requestParams.tryGetMainDataSetPattern());
-        if (mainDataSets.size() == 1)
+                AutoResolveUtils.findSomeMatchingFiles(renderingContext.getRootDir(),
+                        requestParams.tryGetMainDataSetPath(),
+                        requestParams.tryGetMainDataSetPattern());
+        if (mainDataSets.size() == 1 || (mainDataSets.size() > 1 && shouldForce))
         {
             String newRelativePath =
                     FileUtilities.getRelativeFile(renderingContext.getRootDir(), new File(
                             mainDataSets.get(0).getPath()));
             RenderingContext newRenderingContext =
-                    new RenderingContext(renderingContext.getRootDir(), renderingContext
-                            .getUrlPrefix(), newRelativePath);
+                    new RenderingContext(renderingContext.getRootDir(),
+                            renderingContext.getUrlPrefix(), newRelativePath);
             autoResolveRedirect(response, newRenderingContext);
         } else if (AutoResolveUtils.continueAutoResolving(requestParams.tryGetMainDataSetPattern(),
                 dir))
@@ -375,8 +398,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
                     StringUtils.isBlank(oldRelativePathOrNull) ? "" : (oldRelativePathOrNull + "/");
             String newRelativePath = pathPrefix + childName;
             RenderingContext newRenderingContext =
-                    new RenderingContext(renderingContext.getRootDir(), renderingContext
-                            .getUrlPrefix(), newRelativePath);
+                    new RenderingContext(renderingContext.getRootDir(),
+                            renderingContext.getUrlPrefix(), newRelativePath);
             autoResolveRedirect(response, newRenderingContext);
         } else
         {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
index 79ec7098768..08f3fb5ca29 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java
@@ -37,7 +37,7 @@ public class GenericDssLinkReportingPlugin extends AbstractDssLinkReportingPlugi
 
     private static final String MAIN_DATA_SET_PATTERN = "mdsPattern";
 
-    private static final String AUTO_RESOLVE = "autoResolve";
+    private static final String FORCE_AUTO_RESOLVE = "forceAutoResolve";
 
     private static final String SESSION_ID = "sessionID";
 
@@ -86,7 +86,7 @@ public class GenericDssLinkReportingPlugin extends AbstractDssLinkReportingPlugi
                 + dataSet.getDatasetCode());
 
         ArrayList<LinkModel.LinkParameter> parameters = new ArrayList<LinkModel.LinkParameter>();
-        parameters.add(new LinkModel.LinkParameter(AUTO_RESOLVE, Boolean.TRUE.toString()));
+        parameters.add(new LinkModel.LinkParameter(FORCE_AUTO_RESOLVE, Boolean.TRUE.toString()));
         if (regexOrNull != null)
         {
             parameters.add(new LinkModel.LinkParameter(MAIN_DATA_SET_PATTERN, regexOrNull));
-- 
GitLab