From ef43331cab987ac95e09757b47d00c9987510e31 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 19 Dec 2012 09:08:37 +0000
Subject: [PATCH] PackageBasedIndexedEntityFinder fixed by ignoring test
 classes. This fixes the bug in integration tests.

SVN: 27959
---
 .../cisd/common/reflection/ClassFilterUtils.java      |  6 ++++++
 .../systemsx/cisd/common/reflection/ClassUtils.java   | 11 +++++++----
 .../systemsx/cisd/common/reflection/IClassFilter.java |  8 ++++++++
 .../cisd/common/reflection/ClassUtilsTest.java        |  6 ++++++
 .../db/search/PackageBasedIndexedEntityFinder.java    |  9 ++++++++-
 5 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java b/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
index 0a066e5e45b..a420075db14 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
@@ -57,5 +57,11 @@ public final class ClassFilterUtils
         {
             return true;
         }
+
+        @Override
+        public boolean accept(String fullyQualifiedClassName)
+        {
+            return true;
+        }
     }
 }
diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java b/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
index 99612c6bfb9..025d80e77d3 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
@@ -421,11 +421,14 @@ public final class ClassUtils
             {
                 try
                 {
-                    final Class<?> clazz =
-                            org.apache.commons.lang.ClassUtils.getClass(className, false);
-                    if (classFilter.accept(clazz))
+                    if (classFilter.accept(className))
                     {
-                        classes.add(clazz);
+                        final Class<?> clazz =
+                                org.apache.commons.lang.ClassUtils.getClass(className, false);
+                        if (classFilter.accept(clazz))
+                        {
+                            classes.add(clazz);
+                        }
                     }
                 } catch (final ClassNotFoundException ex)
                 {
diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java b/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
index 387076b43ba..0e39c6a0acf 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
@@ -27,4 +27,12 @@ public interface IClassFilter
      * Tests whether or not the specified <var>clazz</var> should be included.
      */
     public boolean accept(final Class<?> clazz);
+    
+    /**
+     * Returns <code>true</code> if the specified class is accepted. This method is call before
+     * {@link #accept(Class)}. It should return <code>false</code> if the class can not be loaded.
+     * If <code>true</code> is returned also {@link #accept(Class)} will be invoked which will give
+     * the definite answer.
+     */
+    public boolean accept(String fullyQualifiedClassName);
 }
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
index 53210f40871..1d15f8088b7 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
@@ -258,6 +258,12 @@ public final class ClassUtilsTest
                 {
                     return clazz.equals(SuiteSlave.class) == false;
                 }
+
+                @Override
+                public boolean accept(String fullyQualifiedClassName)
+                {
+                    return true;
+                }
             });
         assertTrue(classes.size() > 0);
         assertFalse(classes.contains(Test.class));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
index 9e439256f2d..f14b2c4056b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
@@ -26,7 +26,8 @@ import ch.systemsx.cisd.common.reflection.ClassUtils;
 import ch.systemsx.cisd.common.reflection.IClassFilter;
 
 /**
- * A {@link IIndexedEntityFinder} based on a package name specified in the constructor.
+ * A {@link IIndexedEntityFinder} based on a package name specified in the constructor. Classes
+ * ending with <code>Test</code> will be ignored.
  * <p>
  * This does not work recursively and expects to find all the correctly annotated classes in the
  * given package.
@@ -53,6 +54,12 @@ public final class PackageBasedIndexedEntityFinder implements IIndexedEntityFind
                 // IClassFilter
                 //
 
+                @Override
+                public boolean accept(String fullyQualifiedClassName)
+                {
+                    return fullyQualifiedClassName.endsWith("Test") == false;
+                }
+
                 @Override
                 public final boolean accept(final Class<?> clazz)
                 {
-- 
GitLab