From cdafb292e2499f203eaae4bf5ecb1105ca1c12d9 Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <andreas.romeyke@slub-dresden.de>
Date: Tue, 1 Aug 2023 17:15:18 +0200
Subject: [PATCH] - added truncated getErrors() to workaround Rosetta Issue
 https://support.proquest.com/500Do0000083LJkIAM, closes
 https://git.slub-dresden.de/digital-preservation/xml_plugin4rosetta/-/issues/19

---
 .../metadata_XmlFormatValidationPlugin.xml    |  2 +-
 .../plugin/XmlFormatValidationPlugin.java     | 19 ++++++++++++++++++-
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/PLUGIN-INF/metadata_XmlFormatValidationPlugin.xml b/PLUGIN-INF/metadata_XmlFormatValidationPlugin.xml
index c5fb78a..945efe0 100644
--- a/PLUGIN-INF/metadata_XmlFormatValidationPlugin.xml
+++ b/PLUGIN-INF/metadata_XmlFormatValidationPlugin.xml
@@ -56,7 +56,7 @@
 		</fr:x_form>
 	</pl:initParameters>
 	<pl:description>SLUB Formatvalidation Plugin for XML</pl:description>
-	<pl:version>0.01</pl:version>
+	<pl:version>0.02</pl:version>
 	<pl:materialType>DIGITAL</pl:materialType>
 	<pl:module>Preservation</pl:module>
 	<pl:generalType>TASK</pl:generalType>
diff --git a/java/org/slub/rosetta/dps/repository/plugin/XmlFormatValidationPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/XmlFormatValidationPlugin.java
index 5a1bfd0..7df1c73 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/XmlFormatValidationPlugin.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/XmlFormatValidationPlugin.java
@@ -36,6 +36,7 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -396,7 +397,23 @@ public class XmlFormatValidationPlugin implements FormatValidationPlugin {
 
     @Override
     public List<String> getErrors() {
-        return resultHandle.getErrors();
+        List<String> truncated = new ArrayList<String>();
+		int chars=0;
+		/* workaround for Rosetta Issue https://support.proquest.com/500Do0000083LJkIAM
+		 * truncate to ensure not more than 2000 chars used, to
+		 */
+		for (String e: resultHandle.getErrors()) {
+			if ( (chars+ e.length()) < 1900 ) {
+				truncated.add( e );
+				chars+=e.length()+1; // +1 for line ending
+			} else {
+				truncated.add ("... (the full error is truncated, because Rosetta limits, see Rosetta log for detailed output)");
+				log.info("truncated errors in getError");
+				break;
+			}
+		}
+		return truncated;
+
     }
 
     @Override
-- 
GitLab