From f0e6d9604a37ddad0dc57018dd1710adc011b697 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Tue, 15 Jul 2008 08:21:52 +0000
Subject: [PATCH] fix: - better error handling when store item filters throw
 exceptions

SVN: 7237
---
 .../cisd/datamover/FileScannedStore.java      | 33 +++++++++++++++----
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java b/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
index cace1e6369d..4a7764b0dbd 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
@@ -17,8 +17,11 @@ package ch.systemsx.cisd.datamover;
 
 import java.util.Vector;
 
+import org.apache.commons.lang.StringUtils;
+
 import ch.systemsx.cisd.common.Constants;
 import ch.systemsx.cisd.common.logging.ISimpleLogger;
+import ch.systemsx.cisd.common.logging.LogLevel;
 import ch.systemsx.cisd.common.utilities.StoreItem;
 import ch.systemsx.cisd.common.utilities.DirectoryScanningTimerTask.IScannedStore;
 import ch.systemsx.cisd.datamover.filesystem.intf.BooleanStatus;
@@ -80,17 +83,35 @@ final class FileScannedStore implements IScannedStore
         return items;
     }
 
-    public final StoreItem[] filterReadyToProcess(final StoreItem[] items)
+    public final StoreItem[] filterReadyToProcess(final StoreItem[] items,
+            ISimpleLogger loggerOrNull)
     {
-        final Vector<StoreItem> result = new Vector<StoreItem>();
-        for (final StoreItem item : items)
+        StoreItem currentItem = null;
+        try
         {
-            if (isReadyToProcess(item))
+            final Vector<StoreItem> result = new Vector<StoreItem>();
+            for (final StoreItem item : items)
             {
-                result.add(item);
+                currentItem = item;
+                if (isReadyToProcess(item))
+                {
+                    result.add(item);
+                }
             }
+            return result.toArray(StoreItem.EMPTY_ARRAY);
+        } catch (final RuntimeException ex)
+        {
+            if (loggerOrNull != null)
+            {
+                loggerOrNull.log(LogLevel.ERROR, String.format(
+                        "Failed to filter store items for processing: "
+                                + "filter '%s' threw exception %s (message: \"%s\") on item '%s'",
+                        StringUtils.defaultIfEmpty(storeItemFilter.getClass().getSimpleName(),
+                                "UNKNOWN"), ex.getClass().getSimpleName(), StringUtils
+                                .defaultIfEmpty(ex.getMessage(), "-"), currentItem));
+            }
+            return null;
         }
-        return result.toArray(StoreItem.EMPTY_ARRAY);
     }
 
     //
-- 
GitLab