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