@Override public List<TrackedEntityDataValue> getTrackedEntityDataValuesForSynchronization( ProgramStageInstance programStageInstance ) { List<TrackedEntityDataValue> dataValues = new ArrayList<>(); String sql = "SELECT tedv.* FROM trackedentitydatavalue tedv " + "LEFT JOIN programstageinstance psi on tedv.programstageinstanceid = psi.programstageinstanceid " + "LEFT JOIN programstagedataelement psde ON tedv.dataelementid = psde.dataelementid AND psi.programstageid = psde.programstageid " + "WHERE tedv.programstageinstanceid = " + programStageInstance.getId() + " AND psde.skipsynchronization = false"; SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql ); while ( rowSet.next() ) { TrackedEntityDataValue tedv = new TrackedEntityDataValue(); tedv.setCreated( rowSet.getDate( "created" ) ); tedv.setLastUpdated( rowSet.getDate( "lastupdated" ) ); tedv.setProgramStageInstance( programStageInstance ); tedv.setValue( rowSet.getString( "value" ) ); tedv.setStoredBy( rowSet.getString( "storedby" ) ); tedv.setProvidedElsewhere( rowSet.getBoolean( "providedelsewhere" ) ); tedv.setDataElement( dataElementStore.get( rowSet.getInt( "dataelementid" ) ) ); dataValues.add( tedv ); } return dataValues; }
final String ouName = rowSet.getString( 3 ); final String highestApproved = rowSet.getString( 4 ); final boolean readyBelow = rowSet.getBoolean( 5 ); boolean approvedAbove = rowSet.getBoolean( 6 );
Date lastUpdated = rowSet.getDate( 9 ); String comment = rowSet.getString( 10 ); boolean followup = rowSet.getBoolean( 11 );
eventRow.setTrackedEntityInstanceOrgUnitName( rowSet.getString( "tei_ou_name" ) ); eventRow.setTrackedEntityInstanceCreated( rowSet.getString( "tei_created" ) ); eventRow.setTrackedEntityInstanceInactive( rowSet.getBoolean( "tei_inactive" ) ); eventRow.setDeleted( rowSet.getBoolean( "psi_deleted" ) ); eventRow.setFollowup( rowSet.getBoolean( "pi_followup" ) ); dataValue.setLastUpdated( DateUtils.getIso8601NoTz( rowSet.getDate( "pdv_lastupdated" ) ) ); dataValue.setValue( rowSet.getString( "pdv_value" ) ); dataValue.setProvidedElsewhere( rowSet.getBoolean( "pdv_providedelsewhere" ) ); dataValue.setDataElement( IdSchemes.getValue( rowSet.getString( "de_uid" ), rowSet.getString( "de_code" ), idSchemes.getDataElementIdScheme() ) );
event.setOrgUnit( IdSchemes.getValue( rowSet.getString( "ou_uid" ), rowSet.getString( "ou_code" ), idSchemes.getOrgUnitIdScheme() ) ); event.setDeleted( rowSet.getBoolean( "psi_deleted" ) ); event.setEnrollmentStatus( EnrollmentStatus .fromProgramStatus( ProgramStatus.valueOf( rowSet.getString( "pi_status" ) ) ) ); event.setFollowup( rowSet.getBoolean( "pi_followup" ) ); dataValue.setLastUpdated( DateUtils.getIso8601NoTz( rowSet.getDate( "pdv_lastupdated" ) ) ); dataValue.setValue( rowSet.getString( "pdv_value" ) ); dataValue.setProvidedElsewhere( rowSet.getBoolean( "pdv_providedelsewhere" ) ); dataValue.setDataElement( IdSchemes.getValue( rowSet.getString( "de_uid" ), rowSet.getString( "de_code" ), idSchemes.getDataElementIdScheme() ) ); dataValue.setSkipSynchronization( rowSet.getBoolean( "psde_skipsynchronization" ) );
private long verifyDbObjects(JdbcTemplate jdbcTemplate, TestStorage storage, Collection<? extends SyncObject> objects) { Date now = new Date(); long count = 0; for (SyncObject object : objects) { count++; String identifier = storage.getIdentifier(object.getRelativePath(), object.getMetadata().isDirectory()); SqlRowSet rowSet = jdbcTemplate.queryForRowSet("SELECT * FROM " + AbstractDbService.DEFAULT_OBJECTS_TABLE_NAME + " WHERE target_id=?", identifier); Assert.assertTrue(rowSet.next()); Assert.assertEquals(identifier, rowSet.getString("target_id")); Assert.assertEquals(object.getMetadata().isDirectory(), rowSet.getBoolean("is_directory")); Assert.assertEquals(object.getMetadata().getContentLength(), rowSet.getLong("size")); // mtime in the DB is actually pulled from the target system, so we don't know what precision it will be in // or if the target system's clock is in sync, but let's assume it will always be within 5 minutes Assert.assertTrue(Math.abs(object.getMetadata().getModificationTime().getTime() - rowSet.getLong("mtime")) < 5 * 60 * 1000); Assert.assertEquals(ObjectStatus.Verified.getValue(), rowSet.getString("status")); long transferStart = rowSet.getLong("transfer_start"), transferComplete = rowSet.getLong("transfer_complete"); if (transferStart > 0) Assert.assertTrue(now.getTime() - transferStart < 10 * 60 * 1000); // less than 10 minutes ago if (transferComplete > 0) Assert.assertTrue(now.getTime() - transferComplete < 10 * 60 * 1000); // less than 10 minutes ago Assert.assertTrue(now.getTime() - rowSet.getLong("verify_start") < 10 * 60 * 1000); // less than 10 minutes ago Assert.assertTrue(now.getTime() - rowSet.getLong("verify_complete") < 10 * 60 * 1000); // less than 10 minutes ago Assert.assertEquals(0, rowSet.getInt("retry_count")); if (object.getMetadata().isDirectory()) count += verifyDbObjects(jdbcTemplate, storage, storage.getChildren(identifier)); } return count; } }
Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertEquals(id, rowSet.getString("target_id")); Assert.assertFalse(rowSet.getBoolean("is_directory")); Assert.assertEquals(data.length, rowSet.getInt("size")); Assert.assertEquals(now.getTime(), getUnixTime(rowSet, "mtime")); Assert.assertEquals(0, rowSet.getInt("retry_count")); Assert.assertNull(rowSet.getString("error_message")); Assert.assertFalse(rowSet.getBoolean("is_source_deleted")); Assert.assertNull(rowSet.getString("source_md5")); Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertEquals(id, rowSet.getString("target_id")); Assert.assertFalse(rowSet.getBoolean("is_directory")); Assert.assertEquals(data.length, rowSet.getInt("size")); Assert.assertEquals(now.getTime(), getUnixTime(rowSet, "mtime")); Assert.assertEquals(0, rowSet.getInt("retry_count")); Assert.assertEquals(error, rowSet.getString("error_message")); Assert.assertFalse(rowSet.getBoolean("is_source_deleted")); Assert.assertNull(rowSet.getString("source_md5")); Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertEquals(id, rowSet.getString("target_id")); Assert.assertFalse(rowSet.getBoolean("is_directory")); Assert.assertEquals(data.length, rowSet.getInt("size")); Assert.assertEquals(now.getTime(), getUnixTime(rowSet, "mtime")); Assert.assertEquals(1, rowSet.getInt("retry_count"));
Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertNull(rowSet.getString("target_id")); Assert.assertFalse(rowSet.getBoolean("is_directory")); Assert.assertEquals(0, rowSet.getInt("size")); Assert.assertEquals(0, getUnixTime(rowSet, "mtime")); Assert.assertEquals(0, rowSet.getInt("retry_count")); Assert.assertNull(rowSet.getString("error_message")); Assert.assertFalse(rowSet.getBoolean("is_source_deleted")); Assert.assertNull(rowSet.getString("source_md5")); Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertNull(rowSet.getString("target_id")); Assert.assertTrue(rowSet.getBoolean("is_directory")); Assert.assertEquals(0, rowSet.getInt("size")); Assert.assertEquals(now.getTime(), getUnixTime(rowSet, "mtime")); Assert.assertEquals(1, rowSet.getInt("retry_count")); Assert.assertEquals("foo", rowSet.getString("error_message")); Assert.assertFalse(rowSet.getBoolean("is_source_deleted")); Assert.assertNull(rowSet.getString("source_md5")); Assert.assertEquals(id, rowSet.getString("source_id")); Assert.assertNull(rowSet.getString("target_id")); Assert.assertFalse(rowSet.getBoolean("is_directory")); Assert.assertEquals(data.length, rowSet.getInt("size")); Assert.assertEquals(0, getUnixTime(rowSet, "mtime")); Assert.assertEquals(0, rowSet.getInt("retry_count"));