diff --git a/common/source/java/ch/systemsx/cisd/common/annotation/Mandatory.java b/common/source/java/ch/systemsx/cisd/common/annotation/Mandatory.java index 286a9b7a8bf56e568f32a1ec1365deac475b147f..0cbeaf0d3cd5b2874bd488a64b05d4fdfb453155 100644 --- a/common/source/java/ch/systemsx/cisd/common/annotation/Mandatory.java +++ b/common/source/java/ch/systemsx/cisd/common/annotation/Mandatory.java @@ -28,9 +28,9 @@ import java.lang.annotation.Target; * @author Christian Ribeaud */ @Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) +@Target(ElementType.FIELD) @Inherited public @interface Mandatory { - public String[] value(); + } diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ClassUtils.java b/common/source/java/ch/systemsx/cisd/common/utilities/ClassUtils.java index 3d152769a6258c0708b496cc826d837836bb0ae6..e55f846ee226a982db75e1975e41f90e75814aee 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/ClassUtils.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/ClassUtils.java @@ -24,8 +24,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.apache.commons.lang.ArrayUtils; - import ch.systemsx.cisd.common.annotation.Mandatory; import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; @@ -44,20 +42,17 @@ public final class ClassUtils /** * For given <code>Class</code> returns a list of fields that are annotated with {@link Mandatory}. */ - public final static List<Field> getMandatoryFields(Class<?> clazz) + public final static List<Field> getMandatoryFields(Class clazz) { - final Mandatory mandatory = clazz.getAnnotation(Mandatory.class); - return getFields(clazz, null, mandatory == null ? null : mandatory.value()); + return getMandatoryFields(clazz, null); } - + /** - * For given <code>Class</code> (and eventually its superclasses) return a list of <code>Field</code> objects - * that matches the ones defined in <code>strFields</code>. + * For given <code>Class</code> returns a list of fields that are annotated with {@link Mandatory}. * * @param fields if <code>null</code>, then a new <code>List</code> is created. - * @return never <code>null</code> but could return an empty <code>List</code>. */ - public final static List<Field> getFields(Class<?> clazz, List<Field> fields, String... strFields) + private final static List<Field> getMandatoryFields(Class clazz, List<Field> fields) { List<Field> list = fields; if (list == null) @@ -66,7 +61,7 @@ public final class ClassUtils } for (Field field : clazz.getDeclaredFields()) { - if (ArrayUtils.indexOf(strFields, field.getName()) > -1) + if (field.getAnnotation(Mandatory.class) != null) { list.add(field); } @@ -74,7 +69,7 @@ public final class ClassUtils Class superclass = clazz.getSuperclass(); if (superclass != null) { - return getFields(superclass, list, strFields); + return getMandatoryFields(superclass, list); } return list; } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ClassUtilsTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ClassUtilsTest.java index a36999f2b7161efb251468f4645829ed81ac67ee..ebaa9f1cd0662aaebbbc83a31cbfc54ec8f7d054 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ClassUtilsTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ClassUtilsTest.java @@ -16,15 +16,10 @@ package ch.systemsx.cisd.common.utilities; -import static org.testng.AssertJUnit.*; - -import java.lang.reflect.Field; -import java.util.List; +import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; -import ch.systemsx.cisd.common.annotation.Mandatory; - /** * Test cases for the {@link ClassUtils} class. * @@ -33,50 +28,17 @@ import ch.systemsx.cisd.common.annotation.Mandatory; public final class ClassUtilsTest { + /** + * Test method for {@link ch.systemsx.cisd.common.utilities.ClassUtils#getCurrentMethod()}. + */ @Test public final void testGetCurrentMethod() { assertEquals("testGetCurrentMethod", ClassUtils.getCurrentMethod().getName()); // Border cases - assertEquals(new SameMethodName().getMethodName(), new SameMethodName().getMethodName(new Object(), - new Object())); - } - - @Test - public final void testGetFields() - { - List<Field> fields = ClassUtils.getFields(A.class, null, "otherField"); - assertNotNull(fields); - assert fields.size() == 0; - // A - fields = ClassUtils.getFields(A.class, null, "someField"); - assertNotNull(fields); - assert fields.size() == 1; - // B - fields = ClassUtils.getFields(B.class, null, "someField"); - assertNotNull(fields); - assert fields.size() == 1; - // C - fields = ClassUtils.getFields(C.class, null, "someField"); - assertNotNull(fields); - assert fields.size() == 1; + assertEquals(new SameMethodName().getMethodName(), new SameMethodName().getMethodName(new Object(), new Object())); } - @Test - public final void testGetMandatoryFields() - { - List<Field> fields = ClassUtils.getMandatoryFields(A.class); - assertNotNull(fields); - assert fields.size() == 0; - fields = ClassUtils.getMandatoryFields(C.class); - assertNotNull(fields); - assert fields.size() == 2; - } - - // - // Helper classes - // - private final static class SameMethodName { @@ -93,24 +55,4 @@ public final class ClassUtilsTest } } - @SuppressWarnings("unused") - private static class A - { - private Object someField; - - private Object mandatoryField; - } - - private static class B extends A - { - - } - - @Mandatory( - { "mandatoryField", "otherMandatoryField", "notPresentField" }) - private final static class C extends B - { - @SuppressWarnings("unused") - private Object otherMandatoryField; - } }