From ffd6ec7b0432cbde7adf440e72f317bbb9e379ae Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 29 Mar 2017 11:09:12 +0000
Subject: [PATCH] SSDM-4659: AbstractExternalDataProvider refactored

SVN: 37997
---
 .../AbstractExternalDataProvider.java         | 78 ++++++++-----------
 1 file changed, 32 insertions(+), 46 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
index bb73111ac64..4f7713f8dbb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
@@ -145,38 +145,7 @@ public abstract class AbstractExternalDataProvider extends
             {
                 builder.column(CODE).addEntityLink(dataSet, dataSet.getCode());
 
-                LinkDataSet linkDataSet = dataSet.tryGetAsLinkDataSet();
-                if (linkDataSet != null && linkDataSet.getCopies() != null)
-                {
-                    if (linkDataSet.getCopies().size() > 0)
-                    {
-                        String dmsCodes = "";
-                        String dmsLabels = "";
-                        String dmsAddresses = "";
-                        String externalCodes = "";
-                        String paths = "";
-                        String hashes = "";
-
-                        for (IContentCopy copy : linkDataSet.getCopies())
-                        {
-                            dmsCodes += copy.getExternalDMSCode() + ", ";
-                            dmsLabels += copy.getExternalDMSLabel() + ", ";
-                            dmsAddresses += copy.getExternalDMSAddress() + ", ";
-
-                            externalCodes += emptyOnNull(copy.getExternalCode());
-                            paths += emptyOnNull(copy.getPath());
-                            hashes += emptyOnNull(copy.getCommitHash());
-                        }
-
-                        builder.column(EXTERNAL_DMS_CODE).addString(strip(dmsCodes));
-                        builder.column(EXTERNAL_DMS_LABEL).addString(strip(dmsLabels));
-                        builder.column(EXTERNAL_DMS_ADDRESS).addString(strip(dmsAddresses));
-
-                        builder.column(EXTERNAL_CODE).addString(strip(externalCodes));
-                        builder.column(LINK_PATH).addString(strip(paths));
-                        builder.column(LINK_HASH).addString(strip(hashes));
-                    }
-                }
+                addLinkDataSet(builder, dataSet.tryGetAsLinkDataSet());
 
                 builder.column(METAPROJECTS).addString(
                         metaProjectsToString(dataSet.getMetaprojects()));
@@ -259,26 +228,43 @@ public abstract class AbstractExternalDataProvider extends
         return builder.getModel();
     }
 
-    private String emptyOnNull(String value)
+    private void addLinkDataSet(TypedTableModelBuilder<AbstractExternalData> builder, LinkDataSet linkDataSet)
     {
-        if (value == null)
+        if (linkDataSet != null && linkDataSet.getCopies() != null)
         {
-            return "";
-        } else
-        {
-            return value + ", ";
+            if (linkDataSet.getCopies().size() > 0)
+            {
+                CommaSeparatedListBuilder dmsCodes = new CommaSeparatedListBuilder();
+                CommaSeparatedListBuilder dmsLabels = new CommaSeparatedListBuilder();
+                CommaSeparatedListBuilder dmsAddresses = new CommaSeparatedListBuilder();
+                CommaSeparatedListBuilder externalCodes = new CommaSeparatedListBuilder();
+                CommaSeparatedListBuilder paths = new CommaSeparatedListBuilder();
+                CommaSeparatedListBuilder hashes = new CommaSeparatedListBuilder();
+
+                for (IContentCopy copy : linkDataSet.getCopies())
+                {
+                    dmsCodes.append(copy.getExternalDMSCode());
+                    dmsLabels.append(emptyOnNull(copy.getExternalDMSLabel()));
+                    dmsAddresses.append(copy.getExternalDMSAddress());
+                    externalCodes.append(emptyOnNull(copy.getExternalCode()));
+                    paths.append(emptyOnNull(copy.getPath()));
+                    hashes.append(emptyOnNull(copy.getCommitHash()));
+                }
+
+                builder.column(EXTERNAL_DMS_CODE).addString(dmsCodes.toString());
+                builder.column(EXTERNAL_DMS_LABEL).addString(dmsLabels.toString());
+                builder.column(EXTERNAL_DMS_ADDRESS).addString(dmsAddresses.toString());
+
+                builder.column(EXTERNAL_CODE).addString(externalCodes.toString());
+                builder.column(LINK_PATH).addString(paths.toString());
+                builder.column(LINK_HASH).addString(hashes.toString());
+            }
         }
     }
 
-    private String strip(String value)
+    private String emptyOnNull(String value)
     {
-        if (value.length() > 2)
-        {
-            return value.substring(0, value.length() - 2);
-        } else
-        {
-            return value;
-        }
+        return value == null ? "" : value;
     }
 
     private void addProject(TypedTableModelBuilder<AbstractExternalData> builder, Project project)
-- 
GitLab