From 96852ede9b04817974ca3283ced2c9332fff9cea Mon Sep 17 00:00:00 2001
From: vkovtun <vkovtun@ethz.ch>
Date: Wed, 22 Nov 2023 16:57:24 +0100
Subject: [PATCH] BIS-772: Working on PDF export. Added attributes filtering
 for HTML export for spaces.

---
 .../v3/executor/exporter/ExportExecutor.java  |  26 ++++++++++++++----
 .../systemtest/asapi/v3/ExportData.java       |  10 +++++++
 .../export-space-filtered-fields-html.zip     | Bin 0 -> 493 bytes
 3 files changed, 30 insertions(+), 6 deletions(-)
 create mode 100644 server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/test_files/export/export-space-filtered-fields-html.zip

diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/exporter/ExportExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/exporter/ExportExecutor.java
index 63286f51fe4..76cc929272c 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/exporter/ExportExecutor.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/exporter/ExportExecutor.java
@@ -85,6 +85,7 @@ import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.ICodeHolder;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IDescriptionHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityTypeHolder;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IIdentifierHolder;
@@ -929,10 +930,23 @@ public class ExportExecutor implements IExportExecutor
         }
 
         // TODO: what to do when typeObj is null?
-        final List<Map<String, String>> selectedExportFields =
-                entityTypeExportFieldsMap == null || entityTypeExportFieldsMap.isEmpty() || typeObj == null
-                        ? null
-                        : entityTypeExportFieldsMap.get(typeObj.getCode());
+        final List<Map<String, String>> selectedExportFields;
+        if (entityTypeExportFieldsMap == null || entityTypeExportFieldsMap.isEmpty())
+        {
+            selectedExportFields = null;
+        } else if (typeObj != null)
+        {
+            selectedExportFields = entityTypeExportFieldsMap.get(typeObj.getCode());
+        } else if (entityObj instanceof Space)
+        {
+            selectedExportFields = entityTypeExportFieldsMap.get(SPACE.name());
+        } else if (entityObj instanceof Project)
+        {
+            selectedExportFields = entityTypeExportFieldsMap.get(PROJECT.name());
+        } else
+        {
+            selectedExportFields = null;
+        }
 
         final Set<String> selectedExportAttributes = selectedExportFields != null
                 ? selectedExportFields.stream().filter(map -> Objects.equals(map.get(FIELD_TYPE_KEY), ATTRIBUTE.name()))
@@ -995,9 +1009,9 @@ public class ExportExecutor implements IExportExecutor
             }
         }
 
-        if (entityObj instanceof Project && allowsValue(selectedExportAttributes, Attribute.DESCRIPTION.name()))
+        if (entityObj instanceof IDescriptionHolder && allowsValue(selectedExportAttributes, Attribute.DESCRIPTION.name()))
         {
-            final String description = ((Project) entityObj).getDescription();
+            final String description = ((IDescriptionHolder) entityObj).getDescription();
             if (description != null)
             {
                 documentBuilder.addHeader("Description");
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExportData.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExportData.java
index fc444435681..467d30a01ef 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExportData.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExportData.java
@@ -352,6 +352,16 @@ public class ExportData
             },
 
             // HTML: Selected fields
+            {
+                    // Space: TEST-SPACE
+                    "export-space-filtered-fields-html.zip",
+                    EnumSet.of(ExportFormat.HTML),
+                    List.of(new ExportablePermId(ExportableKind.SPACE, new SpacePermId("TEST-SPACE"))),
+                    new SelectedFields(List.of(CODE, PERM_ID, MODIFICATION_DATE), List.of()),
+                    XlsTextFormat.PLAIN,
+                    true, // withReferredTypes
+                    false // withImportCompatibility
+            },
             {
                     // Sample: /TEST-SPACE/TEST-PROJECT/FV-TEST
                     "export-sample-filtered-fields-html.zip",
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/test_files/export/export-space-filtered-fields-html.zip b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/test_files/export/export-space-filtered-fields-html.zip
new file mode 100644
index 0000000000000000000000000000000000000000..4633bed1615a5c35ac117c184939b66872931f91
GIT binary patch
literal 493
zcmWIWW@Zs#;Nak3uxTy}X8-~w5CH@%KwOZLrq9d};LXkf5`oDCfb{@1F<fpb3pXsN
zefu9MyNi*5K^Uqh#5FiXH#or2*;Oy2BsZsb!a=`g2Z6Ttc1KUhwzbY+h%^sWn0P~L
zqUkHa2rZRX)e_-Xx2>1@-de%#zuEY|`TsL~`~Bu6|D3q|!mK*(pRfOFbsyX$c>j-t
z;Y7|o_9wn_&3NpTxNMzS$IHpAVcBOS6wiHrb7tS-<^EIjci8XP;C%aK=KE=K?vkmU
z+WUBJe!rbq{=1!#`|yVw?m8c~X-<8xgT+gG?LLj5xtue_F6n*RZJ|0>cJ;gyA;vTE
zE?-^x@(aVw4Hs3ayKT7QI*;cC2o|h4QD!r>d*hnf#a<z6LO)O5B~#J(?CcfiX@4fi
zWtZO5(>%LgbKYw<v*c~n%y|+U6_U<;Wctq`uq&ovpNqKA{Qz%9CJ_eQp$rOJ1OSCO
lOb4zohN)iCXaZz{bfATJfHx}}ND&hd76a)NVB|0`001mHq__Y8

literal 0
HcmV?d00001

-- 
GitLab