=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PredicateUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PredicateUtils.java 2012-06-04 13:02:01 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PredicateUtils.java 2012-06-06 14:32:25 +0000 @@ -42,6 +42,10 @@ */ public class PredicateUtils { + public static Predicate alwaysTrue = new StaticReply( true ); + + public static Predicate alwaysFalse = new StaticReply( false ); + public static Predicate idObjects = new ObjectWithTypePredicate( IdentifiableObject.class ); public static Predicate collections = new CollectionPredicate(); @@ -52,6 +56,23 @@ public static Predicate idObjectCollectionsWithScanned = new CollectionWithTypeAndAnnotationPredicate( IdentifiableObject.class, Scanned.class ); + public static class StaticReply + implements Predicate + { + private boolean value = false; + + public StaticReply( boolean value ) + { + this.value = value; + } + + @Override + public boolean evaluate( Field object ) + { + return value; + } + } + public static class CollectionPredicate implements Predicate { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/WebUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/WebUtils.java 2012-05-30 09:38:06 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/WebUtils.java 2012-06-06 14:32:25 +0000 @@ -44,6 +44,8 @@ import java.util.Collection; import java.util.List; +import static org.hisp.dhis.system.util.PredicateUtils.alwaysTrue; + /** * @author Morten Olav Hansen */ @@ -55,7 +57,7 @@ public static void generateLinks( WebMetaData metaData ) { Class baseType = null; - List fields = ReflectionUtils.getAllFields( metaData.getClass() ); + Collection fields = ReflectionUtils.collectFields( metaData.getClass(), alwaysTrue ); for ( Field field : fields ) { @@ -110,26 +112,32 @@ { identifiableObject.setLink( getPathWithUid( identifiableObject ) ); - List fields = ReflectionUtils.getAllFields( identifiableObject.getClass() ); + Collection fields = ReflectionUtils.collectFields( identifiableObject.getClass(), alwaysTrue ); for ( Field field : fields ) { if ( IdentifiableObject.class.isAssignableFrom( field.getType() ) ) { - IdentifiableObject object = ReflectionUtils.getFieldObject( field, identifiableObject ); + Object object = ReflectionUtils.getFieldObject( field, identifiableObject ); if ( object != null ) { - object.setLink( getPathWithUid( object ) ); + IdentifiableObject idObject = (IdentifiableObject) object; + idObject.setLink( getPathWithUid( idObject ) ); } } else if ( ReflectionUtils.isCollection( field.getName(), identifiableObject, IdentifiableObject.class ) ) { - Collection objects = (Collection) ReflectionUtils.getFieldObject( field, identifiableObject ); + Object collection = ReflectionUtils.getFieldObject( field, identifiableObject ); - for ( IdentifiableObject object : objects ) + if ( collection != null ) { - object.setLink( getPathWithUid( object ) ); + Collection objects = (Collection) collection; + + for ( IdentifiableObject object : objects ) + { + object.setLink( getPathWithUid( object ) ); + } } } }