dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #20950
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 9795: DVS: set storedBy to currentUser if storedBy is not provided by client
------------------------------------------------------------
revno: 9795
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2013-02-13 07:45:31 +0700
message:
DVS: set storedBy to currentUser if storedBy is not provided by client
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java
dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java
dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/ImportOptions.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-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java 2012-12-27 14:07:54 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java 2013-02-13 00:45:31 +0000
@@ -40,7 +40,7 @@
enum IdentifiableProperty
{
- ID, UID, NAME, CODE
+ ID, UID, UUID, NAME, CODE
}
int getId();
=== modified file 'dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java'
--- dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java 2012-09-10 09:48:06 +0000
+++ dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java 2013-02-13 00:45:31 +0000
@@ -27,22 +27,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import static org.hisp.dhis.importexport.ImportStrategy.NEW;
-import static org.hisp.dhis.importexport.ImportStrategy.NEW_AND_UPDATES;
-import static org.hisp.dhis.importexport.ImportStrategy.UPDATES;
-import static org.hisp.dhis.scheduling.TaskCategory.DATAVALUE_IMPORT;
-import static org.hisp.dhis.system.notification.NotificationLevel.INFO;
-import static org.hisp.dhis.system.notification.NotificationLevel.ERROR;
-import static org.hisp.dhis.system.util.ConversionUtils.wrap;
-import static org.hisp.dhis.system.util.DateUtils.getDefaultDate;
-
-import java.io.*;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
+import au.com.bytecode.opencsv.CSVReader;
import org.amplecode.quick.BatchHandler;
import org.amplecode.quick.BatchHandlerFactory;
import org.amplecode.staxwax.factory.XMLFactory;
@@ -78,7 +63,22 @@
import org.hisp.dhis.user.CurrentUserService;
import org.springframework.beans.factory.annotation.Autowired;
-import au.com.bytecode.opencsv.CSVReader;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static org.hisp.dhis.importexport.ImportStrategy.*;
+import static org.hisp.dhis.scheduling.TaskCategory.DATAVALUE_IMPORT;
+import static org.hisp.dhis.system.notification.NotificationLevel.ERROR;
+import static org.hisp.dhis.system.notification.NotificationLevel.INFO;
+import static org.hisp.dhis.system.util.ConversionUtils.wrap;
+import static org.hisp.dhis.system.util.DateUtils.getDefaultDate;
/**
* @author Lars Helge Overland
@@ -87,42 +87,42 @@
implements DataValueSetService
{
private static final Log log = LogFactory.getLog( DefaultDataValueSetService.class );
-
+
private static final String ERROR_INVALID_DATA_SET = "Invalid data set: ";
private static final String ERROR_INVALID_PERIOD = "Invalid period: ";
private static final String ERROR_INVALID_ORG_UNIT = "Invalid org unit: ";
private static final String ERROR_OBJECT_NEEDED_TO_COMPLETE = "Must be provided to complete data set";
-
+
@Autowired
private IdentifiableObjectManager identifiableObjectManager;
-
+
@Autowired
private DataElementCategoryService categoryService;
-
+
@Autowired
private DataSetService dataSetService;
-
+
@Autowired
private OrganisationUnitService organisationUnitService;
-
+
@Autowired
private PeriodService periodService;
-
+
@Autowired
private BatchHandlerFactory batchHandlerFactory;
-
+
@Autowired
private CompleteDataSetRegistrationService registrationService;
-
+
@Autowired
private CurrentUserService currentUserService;
@Autowired
private DataValueSetStore dataValueSetStore;
-
+
@Autowired
private Notifier notifier;
-
+
//--------------------------------------------------------------------------
// DataValueSet implementation
//--------------------------------------------------------------------------
@@ -132,45 +132,45 @@
DataSet dataSet_ = dataSetService.getDataSet( dataSet );
Period period_ = PeriodType.getPeriodFromIsoString( period );
OrganisationUnit orgUnit_ = organisationUnitService.getOrganisationUnit( orgUnit );
-
+
if ( dataSet_ == null )
{
throw new IllegalArgumentException( ERROR_INVALID_DATA_SET + dataSet );
}
-
+
if ( period_ == null )
{
throw new IllegalArgumentException( ERROR_INVALID_PERIOD + period );
}
-
+
if ( orgUnit_ == null )
{
throw new IllegalArgumentException( ERROR_INVALID_ORG_UNIT + orgUnit );
}
-
+
CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration( dataSet_, period_, orgUnit_ );
-
+
Date completeDate = registration != null ? registration.getDate() : null;
-
+
period_ = periodService.reloadPeriod( period_ );
-
+
dataValueSetStore.writeDataValueSetXml( dataSet_, completeDate, period_, orgUnit_, dataSet_.getDataElements(), wrap( period_ ), wrap( orgUnit_ ), out );
}
public void writeDataValueSet( Set<String> dataSets, Date startDate, Date endDate, Set<String> orgUnits, OutputStream out )
{
Set<Period> periods = new HashSet<Period>( periodService.getPeriodsBetweenDates( startDate, endDate ) );
-
+
dataValueSetStore.writeDataValueSetXml( null, null, null, null, getDataElements( dataSets ), periods, getOrgUnits( orgUnits ), out );
}
public void writeDataValueSetCsv( Set<String> dataSets, Date startDate, Date endDate, Set<String> orgUnits, Writer writer )
{
Set<Period> periods = new HashSet<Period>( periodService.getPeriodsBetweenDates( startDate, endDate ) );
-
+
dataValueSetStore.writeDataValueSetCsv( getDataElements( dataSets ), periods, getOrgUnits( orgUnits ), writer );
}
-
+
public ImportSummary saveDataValueSet( InputStream in )
{
return saveDataValueSet( in, ImportOptions.getDefaultImportOptions(), null );
@@ -195,7 +195,7 @@
{
try
{
- DataValueSet dataValueSet = new StreamingDataValueSet( XMLFactory.getXMLReader( in ) );
+ DataValueSet dataValueSet = new StreamingDataValueSet( XMLFactory.getXMLReader( in ) );
return saveDataValueSet( importOptions, id, dataValueSet );
}
catch ( RuntimeException ex )
@@ -225,7 +225,7 @@
{
try
{
- DataValueSet dataValueSet = new StreamingCsvDataValueSet( new CSVReader( reader ) );
+ DataValueSet dataValueSet = new StreamingCsvDataValueSet( new CSVReader( reader ) );
return saveDataValueSet( importOptions, id, dataValueSet );
}
catch ( RuntimeException ex )
@@ -239,26 +239,27 @@
private ImportSummary saveDataValueSet( ImportOptions importOptions, TaskId id, DataValueSet dataValueSet )
{
notifier.clear( id, DATAVALUE_IMPORT ).notify( id, DATAVALUE_IMPORT, "Process started" );
-
+
ImportSummary summary = new ImportSummary();
-
+
importOptions = importOptions != null ? importOptions : ImportOptions.getDefaultImportOptions();
-
+
IdentifiableProperty dataElementIdScheme = dataValueSet.getDataElementIdScheme() != null ? IdentifiableProperty.valueOf( dataValueSet.getDataElementIdScheme().toUpperCase() ) : importOptions.getDataElementIdScheme();
IdentifiableProperty orgUnitIdScheme = dataValueSet.getOrgUnitIdScheme() != null ? IdentifiableProperty.valueOf( dataValueSet.getOrgUnitIdScheme().toUpperCase() ) : importOptions.getOrgUnitIdScheme();
boolean dryRun = dataValueSet.getDryRun() != null ? dataValueSet.getDryRun() : importOptions.isDryRun();
ImportStrategy strategy = dataValueSet.getStrategy() != null ? ImportStrategy.valueOf( dataValueSet.getStrategy() ) : importOptions.getImportStrategy();
boolean skipExistingCheck = importOptions.isSkipExistingCheck();
-
+
Map<String, DataElement> dataElementMap = identifiableObjectManager.getIdMap( DataElement.class, dataElementIdScheme );
Map<String, OrganisationUnit> orgUnitMap = identifiableObjectManager.getIdMap( OrganisationUnit.class, orgUnitIdScheme );
Map<String, DataElementCategoryOptionCombo> categoryOptionComboMap = identifiableObjectManager.getIdMap( DataElementCategoryOptionCombo.class, IdentifiableProperty.UID );
Map<String, Period> periodMap = new HashMap<String, Period>();
-
+
DataSet dataSet = dataValueSet.getDataSet() != null ? identifiableObjectManager.getObject( DataSet.class, IdentifiableProperty.UID, dataValueSet.getDataSet() ) : null;
Date completeDate = getDefaultDate( dataValueSet.getCompleteDate() );
-
+
Period outerPeriod = PeriodType.getPeriodFromIsoString( dataValueSet.getPeriod() );
+
OrganisationUnit outerOrgUnit = dataValueSet.getOrgUnit() != null ? identifiableObjectManager.getObject( OrganisationUnit.class, orgUnitIdScheme, dataValueSet.getOrgUnit() ) : null;
if ( dataSet != null && completeDate != null )
@@ -270,7 +271,7 @@
{
summary.setDataSetComplete( Boolean.FALSE.toString() );
}
-
+
DataElementCategoryOptionCombo fallbackCategoryOptionCombo = categoryService.getDefaultDataElementCategoryOptionCombo();
BatchHandler<DataValue> batchHandler = batchHandlerFactory.createBatchHandler( DataValueBatchHandler.class ).init();
@@ -278,23 +279,23 @@
int importCount = 0;
int updateCount = 0;
int totalCount = 0;
-
+
notifier.notify( id, DATAVALUE_IMPORT, "Importing data values" );
log.info( "importing data values" );
while ( dataValueSet.hasNextDataValue() )
{
org.hisp.dhis.dxf2.datavalue.DataValue dataValue = dataValueSet.getNextDataValue();
-
+
DataValue internalValue = new DataValue();
totalCount++;
-
+
DataElement dataElement = dataElementMap.get( dataValue.getDataElement() );
DataElementCategoryOptionCombo categoryOptionCombo = categoryOptionComboMap.get( dataValue.getCategoryOptionCombo() );
Period period = outerPeriod != null ? outerPeriod : PeriodType.getPeriodFromIsoString( dataValue.getPeriod() );
OrganisationUnit orgUnit = outerOrgUnit != null ? outerOrgUnit : orgUnitMap.get( dataValue.getOrgUnit() );
-
+
if ( dataElement == null )
{
summary.getConflicts().add( new ImportConflict( DataElement.class.getSimpleName(), dataValue.getDataElement() ) );
@@ -306,7 +307,7 @@
summary.getConflicts().add( new ImportConflict( Period.class.getSimpleName(), dataValue.getPeriod() ) );
continue;
}
-
+
if ( orgUnit == null )
{
summary.getConflicts().add( new ImportConflict( OrganisationUnit.class.getSimpleName(), dataValue.getOrgUnit() ) );
@@ -317,12 +318,12 @@
{
categoryOptionCombo = fallbackCategoryOptionCombo;
}
-
+
if ( dataValue.getValue() == null && dataValue.getComment() == null )
{
continue;
}
-
+
if ( periodMap.containsKey( dataValue.getPeriod() ) )
{
period = periodMap.get( dataValue.getPeriod() );
@@ -332,17 +333,26 @@
period = periodService.reloadPeriod( period );
periodMap.put( dataValue.getPeriod(), period );
}
-
+
internalValue.setDataElement( dataElement );
internalValue.setPeriod( period );
internalValue.setSource( orgUnit );
internalValue.setOptionCombo( categoryOptionCombo );
internalValue.setValue( dataValue.getValue() );
- internalValue.setStoredBy( dataValue.getStoredBy() );
+
+ if ( dataValue.getStoredBy() == null || dataValue.getStoredBy().trim().isEmpty() )
+ {
+ internalValue.setStoredBy( currentUserService.getCurrentUsername() );
+ }
+ else
+ {
+ internalValue.setStoredBy( dataValue.getStoredBy() );
+ }
+
internalValue.setTimestamp( getDefaultDate( dataValue.getTimestamp() ) );
internalValue.setComment( dataValue.getComment() );
internalValue.setFollowup( dataValue.getFollowup() );
-
+
if ( !skipExistingCheck && batchHandler.objectExists( internalValue ) )
{
if ( NEW_AND_UPDATES.equals( strategy ) || UPDATES.equals( strategy ) )
@@ -353,7 +363,7 @@
}
updateCount++;
- }
+ }
}
else
{
@@ -363,22 +373,22 @@
{
batchHandler.addObject( internalValue );
}
-
+
importCount++;
}
}
}
-
+
batchHandler.flush();
int ignores = totalCount - importCount - updateCount;
-
+
summary.setDataValueCount( new ImportCount( importCount, updateCount, ignores ) );
summary.setStatus( ImportStatus.SUCCESS );
summary.setDescription( "Import process completed successfully" );
-
+
notifier.notify( id, DATAVALUE_IMPORT, INFO, "Import done", true ).addTaskSummary( id, DATAVALUE_IMPORT, summary );
-
+
return summary;
}
@@ -387,77 +397,77 @@
//--------------------------------------------------------------------------
private void handleComplete( DataSet dataSet, Date completeDate, OrganisationUnit orgUnit, Period period, ImportSummary summary )
- {
+ {
if ( orgUnit == null )
{
summary.getConflicts().add( new ImportConflict( OrganisationUnit.class.getSimpleName(), ERROR_OBJECT_NEEDED_TO_COMPLETE ) );
return;
}
-
+
if ( period == null )
{
summary.getConflicts().add( new ImportConflict( Period.class.getSimpleName(), ERROR_OBJECT_NEEDED_TO_COMPLETE ) );
return;
}
-
+
period = periodService.reloadPeriod( period );
-
+
CompleteDataSetRegistration completeAlready = registrationService.getCompleteDataSetRegistration( dataSet, period, orgUnit );
String username = currentUserService.getCurrentUsername();
-
+
if ( completeAlready != null )
{
completeAlready.setStoredBy( username );
completeAlready.setDate( completeDate );
-
+
registrationService.updateCompleteDataSetRegistration( completeAlready );
- }
+ }
else
{
CompleteDataSetRegistration registration = new CompleteDataSetRegistration( dataSet, period, orgUnit, completeDate, username );
-
+
registrationService.saveCompleteDataSetRegistration( registration );
}
-
+
summary.setDataSetComplete( DateUtils.getMediumDateString( completeDate ) );
}
-
+
private Set<DataElement> getDataElements( Set<String> dataSets )
{
Set<DataElement> dataElements = new HashSet<DataElement>();
-
+
for ( String ds : dataSets )
{
DataSet dataSet = dataSetService.getDataSet( ds );
-
+
if ( dataSet == null )
{
throw new IllegalArgumentException( ERROR_INVALID_DATA_SET + ds );
}
-
+
dataElements.addAll( dataSet.getDataElements() );
}
-
+
return dataElements;
}
-
+
public Set<OrganisationUnit> getOrgUnits( Set<String> orgUnits )
{
Set<OrganisationUnit> organisationUnits = new HashSet<OrganisationUnit>();
-
+
for ( String ou : orgUnits )
{
- OrganisationUnit orgUnit = organisationUnitService.getOrganisationUnit( ou );
+ OrganisationUnit orgUnit = organisationUnitService.getOrganisationUnit( ou );
if ( orgUnit == null )
{
throw new IllegalArgumentException( ERROR_INVALID_ORG_UNIT + ou );
}
-
+
organisationUnits.add( orgUnit );
}
-
+
return organisationUnits;
}
}
=== modified file 'dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/ImportOptions.java'
--- dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/ImportOptions.java 2012-07-30 10:56:25 +0000
+++ dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/ImportOptions.java 2013-02-13 00:45:31 +0000
@@ -27,8 +27,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import org.hisp.dhis.common.IdentifiableObject.IdentifiableProperty;
import org.hisp.dhis.importexport.ImportStrategy;
-import org.hisp.dhis.common.IdentifiableObject.IdentifiableProperty;
/**
* @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
@@ -36,9 +36,9 @@
public class ImportOptions
{
private IdentifiableProperty dataElementIdScheme;
-
+
private IdentifiableProperty orgUnitIdScheme;
-
+
private boolean dryRun = false;
private ImportStrategy importStrategy;
@@ -55,7 +55,7 @@
public ImportOptions()
{
}
-
+
public ImportOptions( ImportStrategy importStrategy )
{
this.importStrategy = importStrategy;
@@ -136,7 +136,7 @@
@Override
public String toString()
{
- return "[data element id scheme: " + dataElementIdScheme + ", org unit id scheme: " +
+ return "[data element id scheme: " + dataElementIdScheme + ", org unit id scheme: " +
orgUnitIdScheme + ", dry run: " + dryRun + ", strategy: " + importStrategy + ", skip check: " + skipExistingCheck + "]";
}
}