=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java 2015-09-28 03:22:02 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java 2015-09-29 05:27:58 +0000 @@ -367,125 +367,6 @@ // HELPERS // ------------------------------------------------------------------------- - private List checkTrackedEntity( TrackedEntityInstance trackedEntityInstance ) - { - List importConflicts = new ArrayList<>(); - - if ( trackedEntityInstance.getTrackedEntity() == null ) - { - importConflicts.add( new ImportConflict( "TrackedEntityInstance.trackedEntity", "Missing required property trackedEntity" ) ); - return importConflicts; - } - - TrackedEntity trackedEntity = getTrackedEntity( trackedEntityInstance.getTrackedEntity() ); - - if ( trackedEntity == null ) - { - importConflicts.add( new ImportConflict( "TrackedEntityInstance.trackedEntity", "Invalid trackedEntity" + - trackedEntityInstance.getTrackedEntity() ) ); - } - - return importConflicts; - } - - private List checkAttributes( TrackedEntityInstance trackedEntityInstance ) - { - List importConflicts = new ArrayList<>(); - - for ( Attribute attribute : trackedEntityInstance.getAttributes() ) - { - TrackedEntityAttribute entityAttribute = manager.get( TrackedEntityAttribute.class, attribute.getAttribute() ); - - if ( entityAttribute == null ) - { - importConflicts.add( new ImportConflict( "Attribute.attribute", "Invalid attribute " + attribute.getAttribute() ) ); - continue; - } - - if ( entityAttribute.isUnique() ) - { - OrganisationUnit organisationUnit = manager.get( OrganisationUnit.class, trackedEntityInstance.getOrgUnit() ); - org.hisp.dhis.trackedentity.TrackedEntityInstance tei = teiService.getTrackedEntityInstance( trackedEntityInstance.getTrackedEntityInstance() ); - - importConflicts.addAll( - checkScope( tei, entityAttribute, attribute.getValue(), organisationUnit ) - ); - } - - importConflicts.addAll( validateAttributeType( attribute ) ); - } - - return importConflicts; - } - - private List checkScope( org.hisp.dhis.trackedentity.TrackedEntityInstance tei, TrackedEntityAttribute attribute, String value, OrganisationUnit organisationUnit ) - { - List importConflicts = new ArrayList<>(); - - if ( attribute == null || value == null ) - { - return importConflicts; - } - - TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams(); - - QueryItem queryItem = new QueryItem( attribute, QueryOperator.EQ, value, attribute.getValueType(), attribute.getAggregationType(), attribute.getOptionSet() ); - params.addAttribute( queryItem ); - - if ( attribute.getOrgunitScope() ) - { - params.getOrganisationUnits().add( organisationUnit ); - } - else - { - params.setOrganisationUnitMode( OrganisationUnitSelectionMode.ALL ); - } - - Grid instances = teiService.getTrackedEntityInstancesGrid( params ); - - if ( instances.getHeight() == 0 || (tei != null && instances.getHeight() == 1 && instances.getRow( 0 ).contains( tei.getUid() )) ) - { - return importConflicts; - } - - importConflicts.add( new ImportConflict( "Attribute.value", "Non-unique attribute value '" + value + "' for attribute " + attribute.getUid() ) ); - - return importConflicts; - } - - private List checkRelationships( TrackedEntityInstance trackedEntityInstance ) - { - List importConflicts = new ArrayList<>(); - - for ( org.hisp.dhis.dxf2.events.trackedentity.Relationship relationship : trackedEntityInstance.getRelationships() ) - { - RelationshipType relationshipType = manager.get( RelationshipType.class, relationship.getRelationship() ); - - if ( relationshipType == null ) - { - importConflicts.add( new ImportConflict( "Relationship.type", "Invalid type " + relationship.getRelationship() ) ); - } - - org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstanceA = manager.get( org.hisp.dhis.trackedentity.TrackedEntityInstance.class, relationship.getTrackedEntityInstanceA() ); - - if ( entityInstanceA == null ) - { - importConflicts.add( new ImportConflict( "Relationship.trackedEntityInstance", "Invalid trackedEntityInstance " - + relationship.getTrackedEntityInstanceA() ) ); - } - - org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstanceB = manager.get( org.hisp.dhis.trackedentity.TrackedEntityInstance.class, relationship.getTrackedEntityInstanceB() ); - - if ( entityInstanceB == null ) - { - importConflicts.add( new ImportConflict( "Relationship.trackedEntityInstance", "Invalid trackedEntityInstance " - + relationship.getTrackedEntityInstanceB() ) ); - } - } - - return importConflicts; - } - private void updateAttributeValues( TrackedEntityInstance trackedEntityInstance, org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstance ) { for ( Attribute attribute : trackedEntityInstance.getAttributes() ) @@ -535,6 +416,24 @@ teiService.updateTrackedEntityInstance( entityInstance ); } + private OrganisationUnit getOrganisationUnit( String id ) + { + return organisationUnitCache.get( id, new IdentifiableObjectSearchCallable<>( manager, OrganisationUnit.class, id ) ); + } + + private TrackedEntity getTrackedEntity( String id ) + { + return trackedEntityCache.get( id, new IdentifiableObjectSearchCallable<>( manager, TrackedEntity.class, id ) ); + } + + private TrackedEntityAttribute getTrackedEntityAttribute( String id ) + { + return trackedEntityAttributeCache.get( id, new IdentifiableObjectSearchCallable<>( manager, TrackedEntityAttribute.class, id ) ); + } + + //-------------------------------------------------------------------------- + // VALIDATION + //-------------------------------------------------------------------------- private List validateAttributeType( Attribute attribute ) { @@ -589,18 +488,119 @@ return importConflicts; } - private OrganisationUnit getOrganisationUnit( String id ) - { - return organisationUnitCache.get( id, new IdentifiableObjectSearchCallable<>( manager, OrganisationUnit.class, id ) ); - } - - private TrackedEntity getTrackedEntity( String id ) - { - return trackedEntityCache.get( id, new IdentifiableObjectSearchCallable<>( manager, TrackedEntity.class, id ) ); - } - - private TrackedEntityAttribute getTrackedEntityAttribute( String id ) - { - return trackedEntityAttributeCache.get( id, new IdentifiableObjectSearchCallable<>( manager, TrackedEntityAttribute.class, id ) ); + private List checkRelationships( TrackedEntityInstance trackedEntityInstance ) + { + List importConflicts = new ArrayList<>(); + + for ( org.hisp.dhis.dxf2.events.trackedentity.Relationship relationship : trackedEntityInstance.getRelationships() ) + { + RelationshipType relationshipType = manager.get( RelationshipType.class, relationship.getRelationship() ); + + if ( relationshipType == null ) + { + importConflicts.add( new ImportConflict( "Relationship.type", "Invalid type " + relationship.getRelationship() ) ); + } + + org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstanceA = manager.get( org.hisp.dhis.trackedentity.TrackedEntityInstance.class, relationship.getTrackedEntityInstanceA() ); + + if ( entityInstanceA == null ) + { + importConflicts.add( new ImportConflict( "Relationship.trackedEntityInstance", "Invalid trackedEntityInstance " + + relationship.getTrackedEntityInstanceA() ) ); + } + + org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstanceB = manager.get( org.hisp.dhis.trackedentity.TrackedEntityInstance.class, relationship.getTrackedEntityInstanceB() ); + + if ( entityInstanceB == null ) + { + importConflicts.add( new ImportConflict( "Relationship.trackedEntityInstance", "Invalid trackedEntityInstance " + + relationship.getTrackedEntityInstanceB() ) ); + } + } + + return importConflicts; + } + + private List checkScope( org.hisp.dhis.trackedentity.TrackedEntityInstance tei, TrackedEntityAttribute attribute, String value, OrganisationUnit organisationUnit ) + { + List importConflicts = new ArrayList<>(); + + if ( attribute == null || value == null ) + { + return importConflicts; + } + + TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams(); + + QueryItem queryItem = new QueryItem( attribute, QueryOperator.EQ, value, attribute.getValueType(), attribute.getAggregationType(), attribute.getOptionSet() ); + params.addAttribute( queryItem ); + + if ( attribute.getOrgunitScope() ) + { + params.getOrganisationUnits().add( organisationUnit ); + } + else + { + params.setOrganisationUnitMode( OrganisationUnitSelectionMode.ALL ); + } + + Grid instances = teiService.getTrackedEntityInstancesGrid( params ); + + if ( instances.getHeight() == 0 || (tei != null && instances.getHeight() == 1 && instances.getRow( 0 ).contains( tei.getUid() )) ) + { + return importConflicts; + } + + importConflicts.add( new ImportConflict( "Attribute.value", "Non-unique attribute value '" + value + "' for attribute " + attribute.getUid() ) ); + + return importConflicts; + } + + private List checkAttributes( TrackedEntityInstance trackedEntityInstance ) + { + List importConflicts = new ArrayList<>(); + + for ( Attribute attribute : trackedEntityInstance.getAttributes() ) + { + TrackedEntityAttribute entityAttribute = getTrackedEntityAttribute( attribute.getAttribute() ); + + if ( entityAttribute == null ) + { + importConflicts.add( new ImportConflict( "Attribute.attribute", "Invalid attribute " + attribute.getAttribute() ) ); + continue; + } + + if ( entityAttribute.isUnique() ) + { + OrganisationUnit organisationUnit = getOrganisationUnit( trackedEntityInstance.getOrgUnit() ); + org.hisp.dhis.trackedentity.TrackedEntityInstance tei = teiService.getTrackedEntityInstance( trackedEntityInstance.getTrackedEntityInstance() ); + importConflicts.addAll( checkScope( tei, entityAttribute, attribute.getValue(), organisationUnit ) ); + } + + importConflicts.addAll( validateAttributeType( attribute ) ); + } + + return importConflicts; + } + + private List checkTrackedEntity( TrackedEntityInstance trackedEntityInstance ) + { + List importConflicts = new ArrayList<>(); + + if ( trackedEntityInstance.getTrackedEntity() == null ) + { + importConflicts.add( new ImportConflict( "TrackedEntityInstance.trackedEntity", "Missing required property trackedEntity" ) ); + return importConflicts; + } + + TrackedEntity trackedEntity = getTrackedEntity( trackedEntityInstance.getTrackedEntity() ); + + if ( trackedEntity == null ) + { + importConflicts.add( new ImportConflict( "TrackedEntityInstance.trackedEntity", "Invalid trackedEntity" + + trackedEntityInstance.getTrackedEntity() ) ); + } + + return importConflicts; } }