From 43f59d7e53fe436429ff822c9a099d79b2a4350f Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Wed, 28 Nov 2018 08:36:14 +0100
Subject: [PATCH] AtomicEntityOperationDetails.toString() improved: removing
 null or empty collections entries and shows only the first 100 items of a
 collection

---
 .../dto/AtomicEntityOperationDetails.java     | 58 +++++++++++++------
 .../dto/AtomicEntityOperationDetailsTest.java | 30 ++++++----
 2 files changed, 59 insertions(+), 29 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
index 3a539b0deec..237b95f7c65 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -25,6 +26,7 @@ import java.util.TreeMap;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
 
+import ch.systemsx.cisd.common.collection.CollectionUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial;
@@ -257,24 +259,46 @@ public class AtomicEntityOperationDetails implements Serializable
     public String toString()
     {
         ToStringBuilder sb = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
-        sb.append("registrationIdOrNull", registrationIdOrNull);
-        sb.append("userIdOrNull", userIdOrNull);
-        sb.append("spaceRegistrations", spaceRegistrations);
-        sb.append("projectRegistrations", projectRegistrations);
-        sb.append("projectUpdates", projectUpdates);
-        sb.append("experimentUpdates", experimentUpdates);
-        sb.append("experimentRegistrations", experimentRegistrations);
-        sb.append("sampleUpdates", sampleUpdates);
-        sb.append("sampleRegistrations", sampleRegistrations);
-        sb.append("materialRegistrations", materialRegistrations);
-        sb.append("dataSetRegistrations", dataSetRegistrations);
-        sb.append("dataSetUpdates", dataSetUpdates);
-        sb.append("metaprojectRegistrations", metaprojectRegistrations);
-        sb.append("metaprojectUpdates", metaprojectUpdates);
-        sb.append("vocabularyUpdates", vocabularyUpdates);
-        sb.append("spaceRoleAssignments", spaceRoleAssignments);
-        sb.append("spaceRoleRevocations", spaceRoleRevocations);
+        appendTo(sb, "registrationIdOrNull", registrationIdOrNull);
+        appendTo(sb, "userIdOrNull", userIdOrNull);
+        appendTo(sb, "spaceRegistrations", spaceRegistrations);
+        appendTo(sb, "projectRegistrations", projectRegistrations);
+        appendTo(sb, "projectUpdates", projectUpdates);
+        appendTo(sb, "experimentUpdates", experimentUpdates);
+        appendTo(sb, "experimentRegistrations", experimentRegistrations);
+        appendTo(sb, "sampleUpdates", sampleUpdates);
+        appendTo(sb, "sampleRegistrations", sampleRegistrations);
+        appendTo(sb, "materialRegistrations", materialRegistrations);
+        appendTo(sb, "dataSetRegistrations", dataSetRegistrations);
+        appendTo(sb, "dataSetUpdates", dataSetUpdates);
+        appendTo(sb, "metaprojectRegistrations", metaprojectRegistrations);
+        appendTo(sb, "metaprojectUpdates", metaprojectUpdates);
+        appendTo(sb, "vocabularyUpdates", vocabularyUpdates);
+        appendTo(sb, "spaceRoleAssignments", spaceRoleAssignments);
+        appendTo(sb, "spaceRoleRevocations", spaceRoleRevocations);
         return sb.toString();
     }
+    
+    private void appendTo(ToStringBuilder builder, String name, Object object)
+    {
+        if (object == null)
+        {
+            return;
+        }
+        if (object instanceof Map<?, ?>)
+        {
+            object = ((Map<?, ?>) object).entrySet();
+        }
+        if (object instanceof Collection<?> == false)
+        {
+            builder.append(name, object);
+        }
+        Collection<?> collection = (Collection<?>) object;
+        if (collection.isEmpty())
+        {
+            return;
+        }
+        builder.append(name, CollectionUtils.abbreviate(collection, 100));
+    }
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
index 138604865a7..d0e17af17d2 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java
@@ -46,9 +46,12 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit
     @Test
     public void testToString()
     {
+        // Given
         ArrayList<NewSpace> spaceRegistrations = new ArrayList<NewSpace>();
-        spaceRegistrations.add(new NewSpace("SPACE1", "description", "adminUser1"));
-        spaceRegistrations.add(new NewSpace("SPACE2", "description", "adminUser2"));
+        for (int i = 0; i < 110; i++)
+        {
+            spaceRegistrations.add(new NewSpace("S" + i, "description", "adminUser" + i));
+        }
 
         Map<String, List<NewMaterial>> materialRegistrations =
                 new HashMap<String, List<NewMaterial>>();
@@ -111,22 +114,25 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit
                         dataSetRegistrations, dataSetUpdates, metaprojectRegistrations,
                         metaprojectUpdates, vocabularyUpdates);
 
+        // When
+        String detailsAsString = details.toString();
+
+        // Then
         assertEquals(
-                "AtomicEntityOperationDetails[registrationIdOrNull=<null>"
-                        + ",userIdOrNull=<null>"
-                        + ",spaceRegistrations=[SPACE1, SPACE2]"
+                "AtomicEntityOperationDetails[spaceRegistrations=[S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, "
+                        + "S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29, "
+                        + "S30, S31, S32, S33, S34, S35, S36, S37, S38, S39, S40, S41, S42, S43, S44, S45, S46, S47, "
+                        + "S48, S49, S50, S51, S52, S53, S54, S55, S56, S57, S58, S59, S60, S61, S62, S63, S64, S65, "
+                        + "S66, S67, S68, S69, S70, S71, S72, S73, S74, S75, S76, S77, S78, S79, S80, S81, S82, S83, "
+                        + "S84, S85, S86, S87, S88, S89, S90, S91, S92, S93, S94, S95, S96, S97, S98, S99, ... (10 left)]"
                         + ",projectRegistrations=[/SPACE/P1, /SPACE/P2]"
-                        + ",projectUpdates=[]"
-                        + ",experimentUpdates=[]"
                         + ",experimentRegistrations=[/SPACE/PROJECT/EXP-ID1, /SPACE/PROJECT/EXP-ID2]"
-                        + ",sampleUpdates=[]"
                         + ",sampleRegistrations=[/SPACE/SAMPLE-ID1, /SPACE/SAMPLE-ID2]"
-                        + ",materialRegistrations={material-type-1=[material-one, material-two], material-type-2=[material-three]}"
+                        + ",materialRegistrations=[material-type-1=[material-one, material-two], material-type-2=[material-three]]"
                         + ",dataSetRegistrations=[NewExternalData[code=DATA-SET-CODE,type=<null>,kind=<null>,fileFormat=<null>,properties=[]]]"
                         + ",dataSetUpdates=[1]"
-                        + ",metaprojectRegistrations=[NewMetaproject[name=TEST-AEOD-TAG,description=short description,ownerId=test]]"
-                        + ",metaprojectUpdates=[]" + ",vocabularyUpdates=[]"
-                        + ",spaceRoleAssignments=[]" + ",spaceRoleRevocations=[]]", details.toString());
+                        + ",metaprojectRegistrations=[NewMetaproject[name=TEST-AEOD-TAG,description=short description,ownerId=test]]]",
+                detailsAsString);
 
     }
 }
-- 
GitLab