=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/DefaultQueryParser.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/DefaultQueryParser.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/DefaultQueryParser.java 2016-01-08 16:26:00 +0000 @@ -194,11 +194,11 @@ } case "in": { - return Restrictions.in( path, QueryUtils.getValue( Collection.class, arg ) ); + return Restrictions.in( path, QueryUtils.getValue( Collection.class, property.getKlass(), arg ) ); } case "!in": { - return Restrictions.notIn( path, QueryUtils.getValue( Collection.class, arg ) ); + return Restrictions.notIn( path, QueryUtils.getValue( Collection.class, property.getKlass(), arg ) ); } case "null": { === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryUtils.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryUtils.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryUtils.java 2016-01-08 16:26:00 +0000 @@ -33,8 +33,10 @@ import com.google.common.collect.Lists; import org.hisp.dhis.system.util.DateUtils; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.List; /** * @author Morten Olav Hansen @@ -44,6 +46,12 @@ @SuppressWarnings( { "rawtypes", "unchecked" } ) static public T getValue( Class klass, Object objectValue ) { + return getValue( klass, null, objectValue ); + } + + @SuppressWarnings( { "rawtypes", "unchecked" } ) + static public T getValue( Class klass, Class secondaryKlass, Object objectValue ) + { if ( klass.isInstance( objectValue ) ) { return (T) objectValue; @@ -117,7 +125,26 @@ } String[] split = value.substring( 1, value.length() - 1 ).split( "," ); - return (T) Lists.newArrayList( split ); + List items = Lists.newArrayList( split ); + + if ( secondaryKlass != null ) + { + List convertedList = new ArrayList<>(); + + for ( String item : items ) + { + Object convertedValue = getValue( secondaryKlass, null, item ); + + if ( convertedValue != null ) + { + convertedList.add( convertedValue ); + } + } + + return (T) convertedList; + } + + return (T) items; } return null; === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/InOperator.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/InOperator.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/InOperator.java 2016-01-08 16:26:00 +0000 @@ -50,7 +50,7 @@ @Override public Criterion getHibernateCriterion( Property property ) { - return Restrictions.in( property.getFieldName(), getValue( Collection.class, args.get( 0 ) ) ); + return Restrictions.in( property.getFieldName(), getValue( Collection.class, property.getKlass(), args.get( 0 ) ) ); } @Override @@ -115,9 +115,10 @@ } else if ( type.isEnum() ) { + String s1 = String.valueOf( item ); String s2 = String.valueOf( object ); - return item != null && s2.equals( item ); + return s1 != null && s2.equals( s1 ); } return false; === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/Operator.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/Operator.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/operators/Operator.java 2016-01-08 16:26:00 +0000 @@ -73,9 +73,14 @@ return args; } + protected T getValue( Class klass, Class secondaryClass, int idx ) + { + return QueryUtils.getValue( klass, secondaryClass, args.get( idx ) ); + } + protected T getValue( Class klass, int idx ) { - return QueryUtils.getValue( klass, args.get( idx ) ); + return QueryUtils.getValue( klass, null, args.get( idx ) ); } protected T getValue( Class klass ) @@ -83,6 +88,11 @@ return getValue( klass, 0 ); } + protected T getValue( Class klass, Class secondaryClass, Object value ) + { + return QueryUtils.getValue( klass, secondaryClass, value ); + } + protected T getValue( Class klass, Object value ) { return QueryUtils.getValue( klass, value );