dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #33322
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 17005: performance improvements for event import
------------------------------------------------------------
revno: 17005
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2014-10-08 18:24:12 +0700
message:
performance improvements for event import
modified:
dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java 2014-10-08 10:23:24 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java 2014-10-08 11:24:12 +0000
@@ -77,8 +77,10 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -491,8 +493,8 @@
saveTrackedEntityComment( programStageInstance, event, storedBy );
- Set<TrackedEntityDataValue> dataValues = new HashSet<>(
- dataValueService.getTrackedEntityDataValues( programStageInstance ) );
+ Set<TrackedEntityDataValue> dataValues = new HashSet<>( dataValueService.getTrackedEntityDataValues( programStageInstance ) );
+ Map<String, TrackedEntityDataValue> existingDataValues = getDataElementDataValueMap( dataValues );
for ( DataValue value : event.getDataValues() )
{
@@ -510,8 +512,10 @@
}
else
{
+ TrackedEntityDataValue existingDataValue = existingDataValues.get( value.getDataElement() );
+
saveDataValue( programStageInstance, event.getStoredBy(), dataElement, value.getValue(),
- value.getProvidedElsewhere() );
+ value.getProvidedElsewhere(), existingDataValue );
}
}
@@ -527,7 +531,7 @@
public void updateEventForNote( Event event )
{
- ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance(
+ ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance(
event.getEvent() );
if ( programStageInstance == null )
@@ -729,23 +733,20 @@
new ImportConflict( "stored by", storedBy
+ " is more than 31 characters, using current username instead" ) );
}
-
+
storedBy = currentUserService.getCurrentUsername();
}
return storedBy;
}
private void saveDataValue( ProgramStageInstance programStageInstance, String storedBy, DataElement dataElement,
- String value, Boolean providedElsewhere )
+ String value, Boolean providedElsewhere, TrackedEntityDataValue dataValue )
{
if ( value != null && value.trim().length() == 0 )
{
value = null;
}
- TrackedEntityDataValue dataValue = dataValueService.getTrackedEntityDataValue( programStageInstance,
- dataElement );
-
if ( value != null )
{
if ( dataValue == null )
@@ -772,7 +773,7 @@
}
}
- private ProgramStageInstance createProgramStageInstance( ProgramStage programStage, ProgramInstance programInstance,
+ private ProgramStageInstance createProgramStageInstance( ProgramStage programStage, ProgramInstance programInstance,
OrganisationUnit organisationUnit, Date dueDate, Date executionDate, int status,
Coordinate coordinate, String storedBy, String programStageInstanceUid )
{
@@ -860,36 +861,55 @@
importSummary.setReference( programStageInstance.getUid() );
}
+ Collection<TrackedEntityDataValue> existingDataValues = dataValueService.getTrackedEntityDataValues( programStageInstance );
+ Map<String, TrackedEntityDataValue> dataElementValueMap = getDataElementDataValueMap( existingDataValues );
+
for ( DataValue dataValue : event.getDataValues() )
{
- DataElement dataElement = dataElementService.getDataElement( dataValue.getDataElement() );
-
- if ( dataElement == null )
- {
- importSummary.getConflicts().add(
- new ImportConflict( "dataElement", dataValue.getDataElement() + " is not a valid data element" ) );
- importSummary.getDataValueCount().incrementIgnored();
- }
- else
- {
+ DataElement dataElement;
+
+ if ( dataElementValueMap.containsKey( dataValue.getDataElement() ) )
+ {
+ dataElement = dataElementValueMap.get( dataValue.getDataElement() ).getDataElement();
+
if ( validateDataValue( dataElement, dataValue.getValue(), importSummary ) )
{
String dataValueStoredBy = dataValue.getStoredBy() != null ? dataValue.getStoredBy() : storedBy;
if ( !dryRun )
{
+ TrackedEntityDataValue existingDataValue = dataElementValueMap.get( dataValue.getDataElement() );
+
saveDataValue( programStageInstance, dataValueStoredBy, dataElement, dataValue.getValue(),
- dataValue.getProvidedElsewhere() );
+ dataValue.getProvidedElsewhere(), existingDataValue );
}
importSummary.getDataValueCount().incrementImported();
}
}
+ else
+ {
+ importSummary.getConflicts().add(
+ new ImportConflict( "dataElement", dataValue.getDataElement() + " is not a valid data element" ) );
+ importSummary.getDataValueCount().incrementIgnored();
+ }
}
return importSummary;
}
+ private Map<String, TrackedEntityDataValue> getDataElementDataValueMap( Collection<TrackedEntityDataValue> dataValues )
+ {
+ Map<String, TrackedEntityDataValue> map = new HashMap<>();
+
+ for ( TrackedEntityDataValue value : dataValues )
+ {
+ map.put( value.getDataElement().getUid(), value );
+ }
+
+ return map;
+ }
+
private void saveTrackedEntityComment( ProgramStageInstance programStageInstance, Event event, String storedBy )
{
for ( Note note : event.getNotes() )