=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java 2015-10-01 07:51:29 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java 2015-10-20 06:46:47 +0000 @@ -208,6 +208,14 @@ TrackedEntityInstance getTrackedEntityInstance( String uid ); /** + * Checks for the existence of a TEI by UID + * + * @param uid PSI UID to check for + * @return true/false depending on result + */ + boolean trackedEntityInstanceExists(String uid); + + /** * Register a new entityInstance * * @param entityInstance TrackedEntityInstance === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java 2015-09-22 05:03:02 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java 2015-10-20 06:46:47 +0000 @@ -60,4 +60,12 @@ * @return */ String validate( TrackedEntityInstance instance, TrackedEntityAttributeValue attributeValue, Program program ); + + /** + * Checks for the existence of a TEI by UID + * + * @param uid PSI UID to check for + * @return true/false depending on result + */ + boolean exists( String uid ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java 2015-09-30 08:37:01 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java 2015-10-20 06:46:47 +0000 @@ -596,6 +596,12 @@ } @Override + public boolean trackedEntityInstanceExists( String uid ) + { + return trackedEntityInstanceStore.exists( uid ); + } + + @Override public void updateTrackedEntityInstance( TrackedEntityInstance instance, String representativeId, Integer relationshipTypeId, List valuesForSave, List valuesForUpdate, Collection valuesForDelete ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java 2015-10-13 04:36:43 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java 2015-10-20 06:46:47 +0000 @@ -542,4 +542,11 @@ return null; } + + @Override + public boolean exists( String uid ) + { + Integer result = jdbcTemplate.queryForObject( "select count(*) from trackedentityinstance where uid=?", Integer.class, uid ); + return result != null && result > 0; + } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java 2015-10-09 15:33:21 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java 2015-10-20 06:46:47 +0000 @@ -28,14 +28,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.util.Date; -import java.util.List; - import org.hisp.dhis.DhisSpringTest; import org.hisp.dhis.analytics.AggregationType; import org.hisp.dhis.common.IdentifiableObjectManager; @@ -52,6 +44,11 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.*; + /** * @author Lars Helge Overland */ @@ -69,7 +66,7 @@ @Autowired private TrackedEntityAttributeValueService attributeValueService; - + @Autowired private ProgramInstanceService programInstanceService; @@ -82,14 +79,14 @@ private TrackedEntityAttribute atA; private TrackedEntityAttribute atB; - + private OrganisationUnit ouA; private OrganisationUnit ouB; private OrganisationUnit ouC; - + private Program prA; private Program prB; - + @Override public void setUpTest() { @@ -103,17 +100,17 @@ ouA = createOrganisationUnit( 'A' ); ouB = createOrganisationUnit( 'B', ouA ); ouC = createOrganisationUnit( 'C', ouB ); - + organisationUnitService.addOrganisationUnit( ouA ); organisationUnitService.addOrganisationUnit( ouB ); organisationUnitService.addOrganisationUnit( ouC ); prA = createProgram( 'A', null, null ); prB = createProgram( 'B', null, null ); - + idObjectManager.save( prA ); - idObjectManager.save( prB ); - + idObjectManager.save( prB ); + teiA = createTrackedEntityInstance( 'A', ouA ); teiB = createTrackedEntityInstance( 'B', ouB ); teiC = createTrackedEntityInstance( 'C', ouB ); @@ -123,6 +120,18 @@ } @Test + public void testTrackedEntityInstanceExists() + { + teiStore.save( teiA ); + teiStore.save( teiB ); + + assertTrue( teiStore.exists( teiA.getUid() ) ); + assertTrue( teiStore.exists( teiB.getUid() ) ); + assertFalse( teiStore.exists( "aaaabbbbccc" ) ); + assertFalse( teiStore.exists( null ) ); + } + + @Test public void testAddGet() { int idA = teiStore.save( teiA ); @@ -170,7 +179,7 @@ assertTrue( equals( teiStore.getAll(), teiA, teiB ) ); } - + @Test public void testQuery() { @@ -180,45 +189,45 @@ teiStore.save( teiD ); teiStore.save( teiE ); teiStore.save( teiF ); - + attributeValueService.addTrackedEntityAttributeValue( new TrackedEntityAttributeValue( atA, teiD, "Male" ) ); attributeValueService.addTrackedEntityAttributeValue( new TrackedEntityAttributeValue( atA, teiE, "Male" ) ); attributeValueService.addTrackedEntityAttributeValue( new TrackedEntityAttributeValue( atA, teiF, "Female" ) ); - + programInstanceService.enrollTrackedEntityInstance( teiB, prA, new Date(), new Date(), ouB ); programInstanceService.enrollTrackedEntityInstance( teiE, prA, new Date(), new Date(), ouB ); - + // Get all - + TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams(); - + List teis = teiStore.getTrackedEntityInstances( params ); - + assertEquals( 6, teis.size() ); - + // Filter by attribute - + params = new TrackedEntityInstanceQueryParams(); params.addFilter( new QueryItem( atA, QueryOperator.EQ, "Male", ValueType.TEXT, AggregationType.NONE, null ) ); - + teis = teiStore.getTrackedEntityInstances( params ); assertEquals( 2, teis.size() ); assertTrue( teis.contains( teiD ) ); assertTrue( teis.contains( teiE ) ); - + // Filter by attribute params = new TrackedEntityInstanceQueryParams(); params.addFilter( new QueryItem( atA, QueryOperator.EQ, "Female", ValueType.TEXT, AggregationType.NONE, null ) ); - + teis = teiStore.getTrackedEntityInstances( params ); assertEquals( 1, teis.size() ); assertTrue( teis.contains( teiF ) ); - + // Filter by selected org units - + params = new TrackedEntityInstanceQueryParams(); params.addOrganisationUnit( ouB ); params.setOrganisationUnitMode( OrganisationUnitSelectionMode.SELECTED ); @@ -230,7 +239,7 @@ assertTrue( teis.contains( teiC ) ); // Filter by descendants org units - + params = new TrackedEntityInstanceQueryParams(); params.addOrganisationUnit( ouB ); params.setOrganisationUnitMode( OrganisationUnitSelectionMode.DESCENDANTS ); @@ -243,7 +252,7 @@ assertTrue( teis.contains( teiD ) ); assertTrue( teis.contains( teiE ) ); assertTrue( teis.contains( teiF ) ); - + // Filter by program enrollment params = new TrackedEntityInstanceQueryParams(); === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/JacksonTrackedEntityInstanceService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/JacksonTrackedEntityInstanceService.java 2015-09-13 21:54:23 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/JacksonTrackedEntityInstanceService.java 2015-10-20 06:46:47 +0000 @@ -28,12 +28,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; - +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.hisp.dhis.dxf2.importsummary.ImportSummaries; import org.hisp.dhis.dxf2.importsummary.ImportSummary; import org.hisp.dhis.importexport.ImportStrategy; @@ -41,9 +38,11 @@ import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; /** * @author Morten Olav Hansen @@ -158,7 +157,7 @@ } else { - if ( teiService.getTrackedEntityInstance( trackedEntityInstance.getTrackedEntityInstance() ) == null ) + if ( !teiService.trackedEntityInstanceExists( trackedEntityInstance.getTrackedEntityInstance() ) ) { create.getTrackedEntityInstances().add( trackedEntityInstance ); }