=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java 2015-03-13 15:48:26 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java 2015-03-26 16:20:03 +0000 @@ -79,6 +79,8 @@ List getByUid( Class clazz, Collection uids ); + List getByUidOrdered( Class clazz, List uids ); + Collection getLikeName( Class clazz, String name ); Collection getLikeShortName( Class clazz, String shortName ); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java 2015-03-13 15:48:26 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java 2015-03-26 16:20:03 +0000 @@ -426,11 +426,11 @@ if ( INDICATOR.equals( type ) ) { - object.getIndicators().addAll( identifiableObjectManager.getByUid( Indicator.class, uids ) ); + object.getIndicators().addAll( identifiableObjectManager.getByUidOrdered( Indicator.class, uids ) ); } else if ( DATAELEMENT.equals( type ) ) { - object.getDataElements().addAll( identifiableObjectManager.getByUid( DataElement.class, uids ) ); + object.getDataElements().addAll( identifiableObjectManager.getByUidOrdered( DataElement.class, uids ) ); } else if ( DATAELEMENT_OPERAND.equals( type ) ) { @@ -438,7 +438,7 @@ } else if ( DATASET.equals( type ) ) { - object.getDataSets().addAll( identifiableObjectManager.getByUid( DataSet.class, uids ) ); + object.getDataSets().addAll( identifiableObjectManager.getByUidOrdered( DataSet.class, uids ) ); } else if ( PERIOD.equals( type ) ) { @@ -522,15 +522,15 @@ } else if ( DATAELEMENT_GROUPSET.equals( type ) ) { - object.getDataElementGroups().addAll( identifiableObjectManager.getByUid( DataElementGroup.class, uids ) ); + object.getDataElementGroups().addAll( identifiableObjectManager.getByUidOrdered( DataElementGroup.class, uids ) ); } else if ( ORGANISATIONUNIT_GROUPSET.equals( type ) ) { - object.getOrganisationUnitGroups().addAll( identifiableObjectManager.getByUid( OrganisationUnitGroup.class, uids ) ); + object.getOrganisationUnitGroups().addAll( identifiableObjectManager.getByUidOrdered( OrganisationUnitGroup.class, uids ) ); } else if ( CATEGORYOPTION_GROUPSET.equals( type ) ) { - object.getCategoryOptionGroups().addAll( identifiableObjectManager.getByUid( CategoryOptionGroup.class, uids ) ); + object.getCategoryOptionGroups().addAll( identifiableObjectManager.getByUidOrdered( CategoryOptionGroup.class, uids ) ); } else if ( TRACKED_ENTITY_ATTRIBUTE.equals( type ) ) { === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 2015-03-13 15:48:26 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 2015-03-26 16:20:03 +0000 @@ -351,6 +351,35 @@ } @Override + @SuppressWarnings( "unchecked" ) + public List getByUidOrdered( Class clazz, List uids ) + { + GenericIdentifiableObjectStore store = (GenericIdentifiableObjectStore) getIdentifiableObjectStore( clazz ); + + if ( store == null ) + { + return new ArrayList<>(); + } + + List list = new ArrayList<>(); + + if ( uids != null ) + { + for ( String uid : uids ) + { + T object = store.getByUid( uid ); + + if ( object != null ) + { + list.add( object ); + } + } + } + + return list; + } + + @Override public int getCount( Class clazz ) { GenericIdentifiableObjectStore store = getIdentifiableObjectStore( clazz ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/IdentifiableObjectManagerTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/IdentifiableObjectManagerTest.java 2015-02-23 13:06:26 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/IdentifiableObjectManagerTest.java 2015-03-26 16:20:03 +0000 @@ -569,4 +569,26 @@ assertTrue( cd.contains( dataElementC ) ); assertTrue( cd.contains( dataElementD ) ); } + + @Test + public void getByUidOrderedTest() + { + DataElement dataElementA = createDataElement( 'A' ); + DataElement dataElementB = createDataElement( 'B' ); + DataElement dataElementC = createDataElement( 'C' ); + DataElement dataElementD = createDataElement( 'D' ); + + identifiableObjectManager.save( dataElementA ); + identifiableObjectManager.save( dataElementB ); + identifiableObjectManager.save( dataElementC ); + identifiableObjectManager.save( dataElementD ); + + List uids = Arrays.asList( dataElementA.getUid(), dataElementC.getUid(), dataElementB.getUid(), dataElementD.getUid() ); + + List expected = new ArrayList<>( Arrays.asList( dataElementA, dataElementC, dataElementB, dataElementD ) ); + + List actual = new ArrayList<>( identifiableObjectManager.getByUidOrdered( DataElement.class, uids ) ); + + assertEquals( expected, actual ); + } }