From 45c2e6f4a16c38e97e2543cb58b32b32d3141670 Mon Sep 17 00:00:00 2001 From: Michael Ritter Date: Tue, 28 Feb 2023 14:58:27 -0700 Subject: [PATCH] DRYD-901: Only restrict fields for core namespace (#317) --- .../services/export/ExportResource.java | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/services/export/service/src/main/java/org/collectionspace/services/export/ExportResource.java b/services/export/service/src/main/java/org/collectionspace/services/export/ExportResource.java index a4c9cdeb8..dcdc5a8fc 100644 --- a/services/export/service/src/main/java/org/collectionspace/services/export/ExportResource.java +++ b/services/export/service/src/main/java/org/collectionspace/services/export/ExportResource.java @@ -30,10 +30,11 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; +import java.util.Collections; import java.util.Iterator; import java.util.List; +import com.google.common.collect.ImmutableMap; import org.apache.commons.lang3.StringUtils; import org.collectionspace.services.client.ExportClient; import org.collectionspace.services.client.PayloadOutputPart; @@ -48,6 +49,7 @@ import org.collectionspace.services.common.context.ServiceContextFactory; import org.collectionspace.services.common.invocable.Field; import org.collectionspace.services.common.invocable.Invocable; import org.collectionspace.services.common.invocable.InvocationContext; +import org.dom4j.Element; import org.dom4j.Node; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,8 +72,9 @@ public class ExportResource extends AbstractCollectionSpaceResourceImpl EXCLUDE_PARTS = Arrays.asList("collectionspace_core", "account_permission"); + private static final ImmutableMap> EXCLUDE_PARTS = ImmutableMap.of( + "collectionspace_core", Arrays.asList("workflowState", "tenantId", "refName"), + "account_permission", Collections.emptyList()); private static final String MIME_TYPE_CSV = "text/csv"; private static final String MIME_TYPE_XML = "application/xml"; @@ -175,11 +178,20 @@ public class ExportResource extends AbstractCollectionSpaceResourceImpl restrictedFields = EXCLUDE_PARTS.get(partName); PayloadOutputPart part = document.getPart(partName); if (part != null) { - document.removePart(part); + if (restrictedFields.isEmpty()) { + document.removePart(part); + } else { + final Element body = part.getElementBody(); + + for (String restrictedField : restrictedFields) { + detach(restrictedField, body); + } + } } } @@ -196,16 +208,8 @@ public class ExportResource extends AbstractCollectionSpaceResourceImpl matches = (List) partElement.selectNodes(xpath); - - for (Node excludeNode : matches) { - if (excludeNode.getNodeType() == Node.ELEMENT_NODE) { - excludeNode.detach(); - } - } + detach(xpath, part.getElementBody()); } } } @@ -251,6 +255,18 @@ public class ExportResource extends AbstractCollectionSpaceResourceImpl matches = (List) element.selectNodes(xpath); + + for (Node excludeNode : matches) { + if (excludeNode.getNodeType() == Node.ELEMENT_NODE) { + excludeNode.detach(); + } + } + } + } + private void markIncluded(org.dom4j.Element element) { org.dom4j.Element parentElement = element.getParent(); -- 2.47.3