=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/preheat/PreheatService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/preheat/PreheatService.java 2016-02-10 06:31:33 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/preheat/PreheatService.java 2016-02-10 07:45:27 +0000 @@ -63,12 +63,20 @@ Map, Set>> collectReferences( Object object ); /** + * Scan object and collect all references (both id object and collections with id objects). + * + * @param objects Object to scan + * @return Maps classes to collections of identifiers + */ + Map, Set>> collectReferences( Collection objects ); + + /** * Scan objects and collect all references (both id object and collections with id objects). * * @param objects Objects to scan * @return Maps classes to collections of identifiers */ - Map, Set>> collectReferences( Collection objects ); + Map, Set>> collectReferences( Map, List> objects ); /** * Checks but does not connect any references, returns check report === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java 2016-02-10 06:31:33 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/preheat/DefaultPreheatService.java 2016-02-10 07:45:27 +0000 @@ -28,7 +28,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.google.common.collect.Sets; +import com.google.common.collect.Lists; import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.query.Query; import org.hisp.dhis.query.QueryService; @@ -145,14 +145,37 @@ } @Override + @SuppressWarnings( "unchecked" ) public Map, Set>> collectReferences( Object object ) { - return collectReferences( Sets.newHashSet( object ) ); + if ( !IdentifiableObject.class.isInstance( object ) ) + { + return new HashMap<>(); + } + + Map, List> map = new HashMap<>(); + map.put( (Class) object.getClass(), Lists.newArrayList( (IdentifiableObject) object ) ); + + return collectReferences( map ); + } + + @Override + public Map, Set>> collectReferences( Collection objects ) + { + if ( objects == null || objects.isEmpty() ) + { + return new HashMap<>(); + } + + Map, List> map = new HashMap<>(); + map.put( objects.iterator().next().getClass(), Lists.newArrayList( objects ) ); + + return collectReferences( map ); } @Override @SuppressWarnings( "unchecked" ) - public Map, Set>> collectReferences( Collection objects ) + public Map, Set>> collectReferences( Map, List> objects ) { Map, Set>> map = new HashMap<>(); @@ -167,54 +190,60 @@ return map; } - Schema schema = schemaService.getDynamicSchema( objects.iterator().next().getClass() ); - List properties = schema.getProperties().stream() - .filter( p -> p.isPersisted() && p.isOwner() && (PropertyType.REFERENCE == p.getPropertyType() || PropertyType.REFERENCE == p.getItemPropertyType()) ) - .collect( Collectors.toList() ); - - properties.forEach( p -> { - for ( Object object : objects ) - { - if ( !p.isCollection() ) - { - Class klass = (Class) p.getKlass(); - - if ( !uidMap.containsKey( klass ) ) uidMap.put( klass, new HashSet<>() ); - if ( !codeMap.containsKey( klass ) ) codeMap.put( klass, new HashSet<>() ); - - Object reference = ReflectionUtils.invokeMethod( object, p.getGetterMethod() ); - - if ( reference != null ) - { - IdentifiableObject identifiableObject = (IdentifiableObject) reference; - - String uid = identifiableObject.getUid(); - String code = identifiableObject.getCode(); - - if ( uid != null ) uidMap.get( klass ).add( uid ); - if ( code != null ) codeMap.get( klass ).add( code ); - } - } - else - { - Class klass = (Class) p.getItemKlass(); - - if ( !uidMap.containsKey( klass ) ) uidMap.put( klass, new HashSet<>() ); - if ( !codeMap.containsKey( klass ) ) codeMap.put( klass, new HashSet<>() ); - - Collection reference = ReflectionUtils.invokeMethod( object, p.getGetterMethod() ); - - for ( IdentifiableObject identifiableObject : reference ) - { - String uid = identifiableObject.getUid(); - String code = identifiableObject.getCode(); - - if ( uid != null ) uidMap.get( klass ).add( uid ); - if ( code != null ) codeMap.get( klass ).add( code ); - } - } - } - } ); + for ( Class objectClass : objects.keySet() ) + { + Schema schema = schemaService.getDynamicSchema( objectClass ); + List properties = schema.getProperties().stream() + .filter( p -> p.isPersisted() && p.isOwner() && (PropertyType.REFERENCE == p.getPropertyType() || PropertyType.REFERENCE == p.getItemPropertyType()) ) + .collect( Collectors.toList() ); + + List identifiableObjects = objects.get( objectClass ); + + properties.forEach( p -> { + for ( Object object : identifiableObjects ) + { + if ( !p.isCollection() ) + { + Class klass = (Class) p.getKlass(); + + if ( !uidMap.containsKey( klass ) ) uidMap.put( klass, new HashSet<>() ); + if ( !codeMap.containsKey( klass ) ) codeMap.put( klass, new HashSet<>() ); + + Object reference = ReflectionUtils.invokeMethod( object, p.getGetterMethod() ); + + if ( reference != null ) + { + IdentifiableObject identifiableObject = (IdentifiableObject) reference; + + String uid = identifiableObject.getUid(); + String code = identifiableObject.getCode(); + + if ( uid != null ) uidMap.get( klass ).add( uid ); + if ( code != null ) codeMap.get( klass ).add( code ); + } + } + else + { + Class klass = (Class) p.getItemKlass(); + + if ( !uidMap.containsKey( klass ) ) uidMap.put( klass, new HashSet<>() ); + if ( !codeMap.containsKey( klass ) ) codeMap.put( klass, new HashSet<>() ); + + Collection reference = ReflectionUtils.invokeMethod( object, p.getGetterMethod() ); + + for ( IdentifiableObject identifiableObject : reference ) + { + String uid = identifiableObject.getUid(); + String code = identifiableObject.getCode(); + + if ( uid != null ) uidMap.get( klass ).add( uid ); + if ( code != null ) codeMap.get( klass ).add( code ); + } + } + } + } ); + + } return map; } === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/preheat/PreheatServiceTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/preheat/PreheatServiceTest.java 2016-02-10 03:08:09 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/preheat/PreheatServiceTest.java 2016-02-10 07:45:27 +0000 @@ -28,6 +28,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.hisp.dhis.DhisSpringTest; import org.hisp.dhis.common.IdentifiableObject; @@ -178,7 +179,7 @@ deg2.addDataElement( de3 ); Map, Set> references = preheatService.collectReferences( - Sets.newHashSet( deg1, deg2 ) ).get( PreheatIdentifier.UID ); + Lists.newArrayList( deg1, deg2 ) ).get( PreheatIdentifier.UID ); assertTrue( references.containsKey( DataElement.class ) ); assertEquals( 3, references.get( DataElement.class ).size() ); @@ -236,7 +237,7 @@ deg2.addDataElement( de3 ); Map, Set> references = preheatService.collectReferences( - Sets.newHashSet( deg1, deg2 ) ).get( PreheatIdentifier.CODE ); + Lists.newArrayList( deg1, deg2 ) ).get( PreheatIdentifier.CODE ); assertTrue( references.containsKey( DataElement.class ) ); assertEquals( 3, references.get( DataElement.class ).size() ); === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java 2016-02-10 06:31:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/DefaultObjectBundleService.java 2016-02-10 07:45:27 +0000 @@ -53,7 +53,7 @@ public ObjectBundle create( ObjectBundleParams params ) { ObjectBundle bundle = new ObjectBundle(); - bundle.putObjects( params.getObjectMap() ); + bundle.putObjects( params.getObjects() ); PreheatParams preheatParams = params.getPreheatParams(); === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleParams.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleParams.java 2016-02-10 06:31:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleParams.java 2016-02-10 07:45:27 +0000 @@ -49,7 +49,7 @@ private PreheatMode preheatMode = PreheatMode.REFERENCE; - private Map, List> objectMap = new HashMap<>(); + private Map, List> objects = new HashMap<>(); public ObjectBundleParams() { @@ -87,26 +87,14 @@ this.preheatMode = preheatMode; } - public Map, List> getObjectMap() - { - return objectMap; - } - - public List getObjects() - { - List objects = new ArrayList<>(); - - for ( Class klass : objectMap.keySet() ) - { - objects.addAll( objectMap.get( klass ) ); - } - + public Map, List> getObjects() + { return objects; } - public void setObjectMap( Map, List> objectMap ) + public void setObjects( Map, List> objects ) { - this.objectMap = objectMap; + this.objects = objects; } public void addObject( Class klass, IdentifiableObject object ) @@ -116,12 +104,12 @@ return; } - if ( !objectMap.containsKey( klass ) ) + if ( !objects.containsKey( klass ) ) { - objectMap.put( klass, new ArrayList<>() ); + objects.put( klass, new ArrayList<>() ); } - objectMap.get( klass ).add( object ); + objects.get( klass ).add( object ); } public void addObject( IdentifiableObject object ) @@ -131,12 +119,12 @@ return; } - if ( !objectMap.containsKey( object.getClass() ) ) + if ( !objects.containsKey( object.getClass() ) ) { - objectMap.put( object.getClass(), new ArrayList<>() ); + objects.put( object.getClass(), new ArrayList<>() ); } - objectMap.get( object.getClass() ).add( object ); + objects.get( object.getClass() ).add( object ); } public PreheatParams getPreheatParams() === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java 2016-02-10 06:31:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceTest.java 2016-02-10 07:45:27 +0000 @@ -38,7 +38,6 @@ import org.hisp.dhis.render.RenderFormat; import org.hisp.dhis.render.RenderService; import org.hisp.dhis.user.User; -import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; @@ -117,7 +116,6 @@ } @Test - @Ignore public void testPreheatValidations() throws IOException { Map, List> metadata = renderService.fromMetadata( @@ -125,12 +123,11 @@ ObjectBundleParams params = new ObjectBundleParams(); params.setObjectBundleMode( ObjectBundleMode.VALIDATE ); - params.setObjectMap( metadata ); + params.setObjects( metadata ); ObjectBundle bundle = objectBundleService.create( params ); ObjectBundleValidation validate = objectBundleService.validate( bundle ); - - // assertFalse( validate.getPreheatValidations().isEmpty() ); + assertFalse( validate.getPreheatValidations().isEmpty() ); } private void defaultSetup()