1
package org.hisp.dhis.importexport.service;
4
* Copyright (c) 2004-2007, University of Oslo
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are met:
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
* * Neither the name of the HISP project nor the names of its contributors may
15
* be used to endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
import static org.hisp.dhis.expression.Expression.SEPARATOR;
32
import java.util.Collection;
33
import java.util.HashSet;
36
import java.util.regex.Matcher;
37
import java.util.regex.Pattern;
39
import org.apache.commons.logging.Log;
40
import org.apache.commons.logging.LogFactory;
41
import org.hisp.dhis.jdbc.BatchHandlerFactory;
42
import org.hisp.dhis.jdbc.BatchHandler;
43
import org.hisp.dhis.jdbc.batchhandler.CategoryCategoryOptionAssociationBatchHandler;
44
import org.hisp.dhis.jdbc.batchhandler.CategoryComboCategoryAssociationBatchHandler;
45
import org.hisp.dhis.jdbc.batchhandler.CompleteDataSetRegistrationBatchHandler;
46
import org.hisp.dhis.jdbc.batchhandler.DataDictionaryBatchHandler;
47
import org.hisp.dhis.jdbc.batchhandler.DataDictionaryDataElementBatchHandler;
48
import org.hisp.dhis.jdbc.batchhandler.DataDictionaryIndicatorBatchHandler;
49
import org.hisp.dhis.jdbc.batchhandler.DataElementBatchHandler;
50
import org.hisp.dhis.jdbc.batchhandler.DataElementCategoryBatchHandler;
51
import org.hisp.dhis.jdbc.batchhandler.DataElementCategoryComboBatchHandler;
52
import org.hisp.dhis.jdbc.batchhandler.DataElementCategoryOptionBatchHandler;
53
import org.hisp.dhis.jdbc.batchhandler.DataElementGroupBatchHandler;
54
import org.hisp.dhis.jdbc.batchhandler.DataElementGroupMemberBatchHandler;
55
import org.hisp.dhis.jdbc.batchhandler.DataSetBatchHandler;
56
import org.hisp.dhis.jdbc.batchhandler.DataSetMemberBatchHandler;
57
import org.hisp.dhis.jdbc.batchhandler.DataSetSourceAssociationBatchHandler;
58
import org.hisp.dhis.jdbc.batchhandler.DataValueBatchHandler;
59
import org.hisp.dhis.jdbc.batchhandler.ExtendedDataElementBatchHandler;
60
import org.hisp.dhis.jdbc.batchhandler.GroupSetBatchHandler;
61
import org.hisp.dhis.jdbc.batchhandler.GroupSetMemberBatchHandler;
62
import org.hisp.dhis.jdbc.batchhandler.IndicatorBatchHandler;
63
import org.hisp.dhis.jdbc.batchhandler.IndicatorGroupBatchHandler;
64
import org.hisp.dhis.jdbc.batchhandler.IndicatorGroupMemberBatchHandler;
65
import org.hisp.dhis.jdbc.batchhandler.IndicatorTypeBatchHandler;
66
import org.hisp.dhis.jdbc.batchhandler.OrganisationUnitBatchHandler;
67
import org.hisp.dhis.jdbc.batchhandler.OrganisationUnitGroupBatchHandler;
68
import org.hisp.dhis.jdbc.batchhandler.OrganisationUnitGroupMemberBatchHandler;
69
import org.hisp.dhis.jdbc.batchhandler.PeriodBatchHandler;
70
import org.hisp.dhis.jdbc.batchhandler.ReportTableBatchHandler;
71
import org.hisp.dhis.jdbc.batchhandler.ReportTableCategoryOptionComboBatchHandler;
72
import org.hisp.dhis.jdbc.batchhandler.ReportTableDataElementBatchHandler;
73
import org.hisp.dhis.jdbc.batchhandler.ReportTableDataSetBatchHandler;
74
import org.hisp.dhis.jdbc.batchhandler.ReportTableIndicatorBatchHandler;
75
import org.hisp.dhis.jdbc.batchhandler.ReportTableOrganisationUnitBatchHandler;
76
import org.hisp.dhis.jdbc.batchhandler.ReportTablePeriodBatchHandler;
77
import org.hisp.dhis.jdbc.batchhandler.SourceBatchHandler;
78
import org.hisp.dhis.cache.HibernateCacheManager;
79
import org.hisp.dhis.datadictionary.DataDictionary;
80
import org.hisp.dhis.datadictionary.DataDictionaryService;
81
import org.hisp.dhis.datadictionary.ExtendedDataElement;
82
import org.hisp.dhis.dataelement.CalculatedDataElement;
83
import org.hisp.dhis.dataelement.DataElement;
84
import org.hisp.dhis.dataelement.DataElementCategory;
85
import org.hisp.dhis.dataelement.DataElementCategoryCombo;
86
import org.hisp.dhis.dataelement.DataElementCategoryComboService;
87
import org.hisp.dhis.dataelement.DataElementCategoryOption;
88
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
89
import org.hisp.dhis.dataelement.DataElementCategoryOptionComboService;
90
import org.hisp.dhis.dataelement.DataElementCategoryOptionService;
91
import org.hisp.dhis.dataelement.DataElementGroup;
92
import org.hisp.dhis.dataelement.DataElementService;
93
import org.hisp.dhis.dataset.CompleteDataSetRegistration;
94
import org.hisp.dhis.dataset.DataSet;
95
import org.hisp.dhis.dataset.DataSetService;
96
import org.hisp.dhis.datavalue.DataValue;
97
import org.hisp.dhis.datavalue.DataValueService;
98
import org.hisp.dhis.expression.ExpressionService;
99
import org.hisp.dhis.importexport.GroupMemberAssociation;
100
import org.hisp.dhis.importexport.GroupMemberType;
101
import org.hisp.dhis.importexport.ImportDataValue;
102
import org.hisp.dhis.importexport.ImportDataValueService;
103
import org.hisp.dhis.importexport.ImportObject;
104
import org.hisp.dhis.importexport.ImportObjectService;
105
import org.hisp.dhis.importexport.ImportObjectStatus;
106
import org.hisp.dhis.importexport.ImportObjectStore;
107
import org.hisp.dhis.importexport.locking.LockingManager;
108
import org.hisp.dhis.importexport.mapping.GroupMemberAssociationVerifier;
109
import org.hisp.dhis.importexport.mapping.NameMappingUtil;
110
import org.hisp.dhis.importexport.mapping.ObjectMappingGenerator;
111
import org.hisp.dhis.indicator.Indicator;
112
import org.hisp.dhis.indicator.IndicatorGroup;
113
import org.hisp.dhis.indicator.IndicatorService;
114
import org.hisp.dhis.indicator.IndicatorType;
115
import org.hisp.dhis.olap.OlapURL;
116
import org.hisp.dhis.olap.OlapURLService;
117
import org.hisp.dhis.organisationunit.OrganisationUnit;
118
import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
119
import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
120
import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
121
import org.hisp.dhis.organisationunit.OrganisationUnitLevel;
122
import org.hisp.dhis.organisationunit.OrganisationUnitService;
123
import org.hisp.dhis.period.Period;
124
import org.hisp.dhis.reporttable.ReportTable;
125
import org.hisp.dhis.reporttable.ReportTableStore;
126
import org.hisp.dhis.validation.ValidationRule;
127
import org.hisp.dhis.validation.ValidationRuleService;
130
* @author Lars Helge Overland
131
* @version $Id: DefaultImportObjectService.java 5946 2008-10-16 15:46:43Z larshelg $
133
public class DefaultImportObjectService<T>
134
implements ImportObjectService
136
private Log log = LogFactory.getLog( DefaultImportObjectService.class );
138
// -------------------------------------------------------------------------
140
// -------------------------------------------------------------------------
142
private ImportObjectStore importObjectStore;
144
public void setImportObjectStore( ImportObjectStore importObjectStore )
146
this.importObjectStore = importObjectStore;
149
private ImportDataValueService importDataValueService;
151
public void setImportDataValueService( ImportDataValueService importDataValueService )
153
this.importDataValueService = importDataValueService;
156
private DataElementCategoryOptionService categoryOptionService;
158
public void setCategoryOptionService( DataElementCategoryOptionService categoryOptionService )
160
this.categoryOptionService = categoryOptionService;
163
private DataElementCategoryComboService categoryComboService;
165
public void setCategoryComboService( DataElementCategoryComboService categoryComboService )
167
this.categoryComboService = categoryComboService;
170
private DataElementCategoryOptionComboService categoryOptionComboService;
172
public void setCategoryOptionComboService( DataElementCategoryOptionComboService categoryOptionComboService )
174
this.categoryOptionComboService = categoryOptionComboService;
177
private DataElementService dataElementService;
179
public void setDataElementService( DataElementService dataElementService )
181
this.dataElementService = dataElementService;
184
private IndicatorService indicatorService;
186
public void setIndicatorService( IndicatorService indicatorService )
188
this.indicatorService = indicatorService;
191
private DataDictionaryService dataDictionaryService;
193
public void setDataDictionaryService( DataDictionaryService dataDictionaryService )
195
this.dataDictionaryService = dataDictionaryService;
198
private DataSetService dataSetService;
200
public void setDataSetService( DataSetService dataSetService )
202
this.dataSetService = dataSetService;
205
private OrganisationUnitService organisationUnitService;
207
public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
209
this.organisationUnitService = organisationUnitService;
212
private OrganisationUnitGroupService organisationUnitGroupService;
214
public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService )
216
this.organisationUnitGroupService = organisationUnitGroupService;
219
private ValidationRuleService validationRuleService;
221
public void setValidationRuleService( ValidationRuleService validationRuleService )
223
this.validationRuleService = validationRuleService;
226
private ExpressionService expressionService;
228
public void setExpressionService( ExpressionService expressionService )
230
this.expressionService = expressionService;
233
private ReportTableStore reportTableStore;
235
public void setReportTableStore( ReportTableStore reportTableStore )
237
this.reportTableStore = reportTableStore;
240
private OlapURLService olapURLService;
242
public void setOlapURLService( OlapURLService olapURLService )
244
this.olapURLService = olapURLService;
247
private DataValueService dataValueService;
249
public void setDataValueService( DataValueService dataValueService )
251
this.dataValueService = dataValueService;
254
private BatchHandlerFactory batchHandlerFactory;
256
public void setBatchHandlerFactory( BatchHandlerFactory batchHandlerFactory )
258
this.batchHandlerFactory = batchHandlerFactory;
261
private ObjectMappingGenerator objectMappingGenerator;
263
public void setObjectMappingGenerator( ObjectMappingGenerator objectMappingGenerator )
265
this.objectMappingGenerator = objectMappingGenerator;
268
private HibernateCacheManager cacheManager;
270
public void setCacheManager( HibernateCacheManager cacheManager )
272
this.cacheManager = cacheManager;
275
private LockingManager lockingManager;
277
public void setLockingManager( LockingManager lockingManager )
279
this.lockingManager = lockingManager;
282
// -------------------------------------------------------------------------
283
// ImportObjectService implementation
284
// -------------------------------------------------------------------------
286
// -------------------------------------------------------------------------
287
// ImportObject operations
288
// -------------------------------------------------------------------------
290
public int addImportObject( ImportObjectStatus status, GroupMemberType groupMemberType, Object object )
292
ImportObject importObject = new ImportObject( status, object.getClass().getName(), groupMemberType, object );
294
return importObjectStore.addImportObject( importObject );
297
public int addImportObject( ImportObjectStatus status, Object object, Object compareObject )
299
ImportObject importObject = new ImportObject( status, object.getClass().getName(), object, compareObject );
301
return importObjectStore.addImportObject( importObject );
304
public int addImportObject( ImportObjectStatus status, GroupMemberType groupMemberType, Object object, Object compareObject )
306
ImportObject importObject = new ImportObject( status, object.getClass().getName(), groupMemberType, object, compareObject );
308
return importObjectStore.addImportObject( importObject );
311
public ImportObject getImportObject( int id )
313
return importObjectStore.getImportObject( id );
316
public Collection<ImportObject> getImportObjects( Class<?> clazz )
318
return importObjectStore.getImportObjects( clazz );
321
public Collection<ImportObject> getImportObjects( ImportObjectStatus status, Class<?> clazz )
323
return importObjectStore.getImportObjects( status, clazz );
326
public Collection<ImportObject> getImportObjects( GroupMemberType groupMemberType )
328
return importObjectStore.getImportObjects( groupMemberType );
331
public void deleteImportObject( int importObjectId )
333
ImportObject importObject = importObjectStore.getImportObject( importObjectId );
335
if ( importObject != null )
337
importObjectStore.deleteImportObject( importObject );
341
public void deleteImportObjects( Class<?> clazz )
343
importObjectStore.deleteImportObjects( clazz );
346
public void deleteImportObjects()
348
importObjectStore.deleteImportObjects();
349
importDataValueService.deleteImportDataValues();
352
//TODO Refactor: this code is not extensible and is error-prone in terms of cascading deletion of associated objects
354
public void cascadeDeleteImportObject( int importObjectId )
356
ImportObject importObject = importObjectStore.getImportObject( importObjectId );
358
if ( importObject != null )
360
if ( importObject.getClassName().equals( DataElement.class.getName() ) ||
361
importObject.getClassName().equals( CalculatedDataElement.class.getName() ) )
363
DataElement element = (DataElement) importObject.getObject();
365
deleteMemberAssociations( GroupMemberType.DATAELEMENTGROUP, element.getId() );
366
deleteMemberAssociations( GroupMemberType.DATASET, element.getId() );
367
deleteMemberAssociations( GroupMemberType.DATADICTIONARY_DATAELEMENT, element.getId() );
368
deleteMemberAssociations( GroupMemberType.REPORTTABLE_DATAELEMENT, element.getId() );
370
deleteIndicatorsContainingDataElement( element.getId() );
372
importDataValueService.deleteImportDataValuesByDataElement( element.getId() );
374
else if ( importObject.getClassName().equals( DataElementGroup.class.getName() ) )
376
DataElementGroup group = (DataElementGroup) importObject.getObject();
378
deleteGroupAssociations( GroupMemberType.DATAELEMENTGROUP, group.getId() );
380
else if ( importObject.getClassName().equals( IndicatorType.class.getName() ) )
382
IndicatorType type = (IndicatorType) importObject.getObject();
384
deleteIndicatorsWithIndicatorType( type.getId() );
386
else if ( importObject.getClassName().equals( Indicator.class.getName() ) )
388
Indicator indicator = (Indicator) importObject.getObject();
390
deleteMemberAssociations( GroupMemberType.INDICATORGROUP, indicator.getId() );
391
deleteMemberAssociations( GroupMemberType.DATADICTIONARY_INDICATOR, indicator.getId() );
392
deleteMemberAssociations( GroupMemberType.REPORTTABLE_INDICATOR, indicator.getId() );
394
else if ( importObject.getClassName().equals( IndicatorGroup.class.getName() ) )
396
IndicatorGroup group = (IndicatorGroup) importObject.getObject();
398
deleteGroupAssociations( GroupMemberType.INDICATORGROUP, group.getId() );
400
else if ( importObject.getClassName().equals( DataDictionary.class.getName() ) )
402
DataDictionary dictionary = (DataDictionary) importObject.getObject();
404
deleteGroupAssociations( GroupMemberType.DATADICTIONARY_DATAELEMENT, dictionary.getId() );
405
deleteGroupAssociations( GroupMemberType.DATADICTIONARY_INDICATOR, dictionary.getId() );
407
else if ( importObject.getClassName().equals( DataSet.class.getName() ) )
409
DataSet dataSet = (DataSet) importObject.getObject();
411
deleteGroupAssociations( GroupMemberType.DATASET, dataSet.getId() );
412
deleteMemberAssociations( GroupMemberType.REPORTTABLE_DATASET, dataSet.getId() );
414
deleteCompleteDataSetRegistrationsByDataSet( dataSet.getId() );
416
else if ( importObject.getClassName().equals( OrganisationUnit.class.getName() ) )
418
OrganisationUnit unit = (OrganisationUnit) importObject.getObject();
420
deleteMemberAssociations( GroupMemberType.ORGANISATIONUNITGROUP, unit.getId() );
421
deleteGroupAssociations( GroupMemberType.ORGANISATIONUNITRELATIONSHIP, unit.getId() );
422
deleteMemberAssociations( GroupMemberType.ORGANISATIONUNITRELATIONSHIP, unit.getId() );
423
deleteMemberAssociations( GroupMemberType.REPORTTABLE_ORGANISATIONUNIT, unit.getId() );
425
deleteCompleteDataSetRegistrationsBySource( unit.getId() );
427
importDataValueService.deleteImportDataValuesBySource( unit.getId() );
429
else if ( importObject.getClassName().equals( OrganisationUnitGroup.class.getName() ) )
431
OrganisationUnitGroup group = (OrganisationUnitGroup) importObject.getObject();
433
deleteGroupAssociations( GroupMemberType.ORGANISATIONUNITGROUP, group.getId() );
434
deleteMemberAssociations( GroupMemberType.ORGANISATIONUNITGROUPSET, group.getId() );
436
else if ( importObject.getClassName().equals( OrganisationUnitGroupSet.class.getName() ) )
438
OrganisationUnitGroupSet groupSet = (OrganisationUnitGroupSet) importObject.getObject();
440
deleteGroupAssociations( GroupMemberType.ORGANISATIONUNITGROUPSET, groupSet.getId() );
442
else if ( importObject.getClassName().equals( ReportTable.class.getName() ) )
444
ReportTable reportTable = (ReportTable) importObject.getObject();
446
deleteGroupAssociations( GroupMemberType.REPORTTABLE_DATAELEMENT, reportTable.getId() );
447
deleteGroupAssociations( GroupMemberType.REPORTTABLE_CATEGORY_OPTION_COMBO, reportTable.getId() );
448
deleteGroupAssociations( GroupMemberType.REPORTTABLE_INDICATOR, reportTable.getId() );
449
deleteGroupAssociations( GroupMemberType.REPORTTABLE_DATASET, reportTable.getId() );
450
deleteGroupAssociations( GroupMemberType.REPORTTABLE_PERIOD, reportTable.getId() );
451
deleteGroupAssociations( GroupMemberType.REPORTTABLE_ORGANISATIONUNIT, reportTable.getId() );
455
deleteImportObject( importObjectId );
458
public void cascadeDeleteImportObjects( Class<?> clazz )
460
importObjectStore.deleteImportObjects( clazz );
462
if ( clazz.equals( DataElement.class ) ||
463
clazz.equals( CalculatedDataElement.class ) )
465
importObjectStore.deleteImportObjects( DataElementCategoryOptionCombo.class );
466
importObjectStore.deleteImportObjects( DataElementCategoryCombo.class );
467
importObjectStore.deleteImportObjects( DataElementCategory.class );
468
importObjectStore.deleteImportObjects( DataElementCategoryOption.class );
469
importObjectStore.deleteImportObjects( GroupMemberType.CATEGORY_CATEGORYOPTION );
470
importObjectStore.deleteImportObjects( GroupMemberType.CATEGORYCOMBO_CATEGORY );
472
importObjectStore.deleteImportObjects( GroupMemberType.DATAELEMENTGROUP );
474
importObjectStore.deleteImportObjects( DataSet.class );
475
importObjectStore.deleteImportObjects( GroupMemberType.DATASET );
476
importObjectStore.deleteImportObjects( GroupMemberType.DATASET_SOURCE );
477
importObjectStore.deleteImportObjects( CompleteDataSetRegistration.class );
479
importObjectStore.deleteImportObjects( Indicator.class );
480
importObjectStore.deleteImportObjects( GroupMemberType.INDICATORGROUP );
481
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_INDICATOR );
482
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_INDICATOR );
484
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_DATAELEMENT );
485
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_DATAELEMENT );
487
importDataValueService.deleteImportDataValues();
489
else if ( clazz.equals( DataElementGroup.class ) )
491
importObjectStore.deleteImportObjects( GroupMemberType.DATAELEMENTGROUP );
493
else if ( clazz.equals( IndicatorType.class ) )
495
importObjectStore.deleteImportObjects( Indicator.class );
496
importObjectStore.deleteImportObjects( GroupMemberType.INDICATORGROUP );
497
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_INDICATOR );
498
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_INDICATOR );
500
else if ( clazz.equals( Indicator.class ) )
502
importObjectStore.deleteImportObjects( GroupMemberType.INDICATORGROUP );
503
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_INDICATOR );
504
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_INDICATOR );
506
else if ( clazz.equals( IndicatorGroup.class ) )
508
importObjectStore.deleteImportObjects( GroupMemberType.INDICATORGROUP );
510
else if ( clazz.equals( DataDictionary.class ) )
512
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_DATAELEMENT );
513
importObjectStore.deleteImportObjects( GroupMemberType.DATADICTIONARY_INDICATOR );
515
else if ( clazz.equals( DataSet.class ) )
517
importObjectStore.deleteImportObjects( GroupMemberType.DATASET );
518
importObjectStore.deleteImportObjects( GroupMemberType.DATASET_SOURCE );
519
importObjectStore.deleteImportObjects( CompleteDataSetRegistration.class );
520
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_DATASET );
522
else if ( clazz.equals( OrganisationUnit.class ) )
524
importObjectStore.deleteImportObjects( GroupMemberType.ORGANISATIONUNITGROUP );
525
importObjectStore.deleteImportObjects( GroupMemberType.ORGANISATIONUNITRELATIONSHIP );
526
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_ORGANISATIONUNIT );
527
importObjectStore.deleteImportObjects( GroupMemberType.DATASET_SOURCE );
529
importObjectStore.deleteImportObjects( CompleteDataSetRegistration.class );
531
importDataValueService.deleteImportDataValues();
533
else if ( clazz.equals( OrganisationUnitGroup.class ) )
535
importObjectStore.deleteImportObjects( GroupMemberType.ORGANISATIONUNITGROUP );
537
else if ( clazz.equals( OrganisationUnitGroupSet.class ) )
539
importObjectStore.deleteImportObjects( GroupMemberType.ORGANISATIONUNITGROUPSET );
541
else if ( clazz.equals( ReportTable.class ) )
543
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_DATAELEMENT );
544
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_CATEGORY_OPTION_COMBO );
545
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_INDICATOR );
546
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_DATASET );
547
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_PERIOD );
548
importObjectStore.deleteImportObjects( GroupMemberType.REPORTTABLE_ORGANISATIONUNIT );
552
// -------------------------------------------------------------------------
554
// -------------------------------------------------------------------------
556
public void matchObject( int importObjectId, int existingObjectId )
558
ImportObject importObject = importObjectStore.getImportObject( importObjectId );
560
Object object = importObject.getObject();
562
// ---------------------------------------------------------------------
563
// Updates the name of the import object to the name of the existing
565
// ---------------------------------------------------------------------
567
if ( object.getClass().equals( DataElement.class ) ||
568
object.getClass().equals( CalculatedDataElement.class ) )
570
DataElement element = (DataElement) object;
572
element.setName( dataElementService.getDataElement( existingObjectId ).getName() );
574
else if ( object.getClass().equals( DataElementGroup.class ) )
576
DataElementGroup group = (DataElementGroup) object;
578
group.setName( dataElementService.getDataElementGroup( existingObjectId ).getName() );
580
else if ( object.getClass().equals( IndicatorType.class ) )
582
IndicatorType type = (IndicatorType) object;
584
type.setName( indicatorService.getIndicatorType( existingObjectId ).getName() );
586
else if ( object.getClass().equals( Indicator.class ) )
588
Indicator indicator = (Indicator) object;
590
indicator.setName( indicatorService.getIndicator( existingObjectId ).getName() );
592
else if ( object.getClass().equals( IndicatorGroup.class ) )
594
IndicatorGroup group = (IndicatorGroup) object;
596
group.setName( indicatorService.getIndicatorGroup( existingObjectId ).getName() );
598
else if ( object.getClass().equals( DataDictionary.class ) )
600
DataDictionary dictionary = (DataDictionary) object;
602
dictionary.setName( dataDictionaryService.getDataDictionary( existingObjectId ).getName() );
604
else if ( object.getClass().equals( DataSet.class ) )
606
DataSet dataSet = (DataSet) object;
608
dataSet.setName( dataSetService.getDataSet( existingObjectId ).getName() );
610
else if ( object.getClass().equals( OrganisationUnit.class ) )
612
OrganisationUnit unit = (OrganisationUnit) object;
614
unit.setName( organisationUnitService.getOrganisationUnit( existingObjectId ).getName() );
616
else if ( object.getClass().equals( OrganisationUnitGroup.class ) )
618
OrganisationUnitGroup group = (OrganisationUnitGroup) object;
620
group.setName( organisationUnitGroupService.getOrganisationUnitGroup( existingObjectId ).getName() );
622
else if ( object.getClass().equals( OrganisationUnitGroupSet.class ) )
624
OrganisationUnitGroupSet groupSet = (OrganisationUnitGroupSet) object;
626
groupSet.setName( organisationUnitGroupService.getOrganisationUnitGroupSet( existingObjectId ).getName() );
628
else if ( object.getClass().equals( OrganisationUnitLevel.class ) )
630
OrganisationUnitLevel level = (OrganisationUnitLevel) object;
632
level.setName( organisationUnitService.getOrganisationUnitLevel( existingObjectId ).getName() );
634
else if ( object.getClass().equals( ValidationRule.class ) )
636
ValidationRule validationRule = (ValidationRule) object;
638
validationRule.setName( validationRuleService.getValidationRule( existingObjectId ).getName() );
640
else if ( object.getClass().equals( ReportTable.class ) )
642
ReportTable reportTable = (ReportTable) object;
644
reportTable.setName( reportTableStore.getReportTable( existingObjectId ).getName() );
646
else if ( object.getClass().equals( OlapURL.class ) )
648
OlapURL url = (OlapURL) object;
650
url.setName( olapURLService.getOlapURL( existingObjectId ).getName() );
652
else if ( object.getClass().equals( DataValue.class ) )
654
DataValue dataValue = (DataValue) object;
656
object = updateDataValue( dataValue, dataValueService.getDataValue( dataValue.getSource(), dataValue.getDataElement(), dataValue.getPeriod() ) );
659
// ---------------------------------------------------------------------
660
// Sets the status of the import object to match, these objects will
661
// later be ignored on import all but is needed for matching of
663
// ---------------------------------------------------------------------
665
importObject.setStatus( ImportObjectStatus.MATCH );
667
importObjectStore.updateImportObject( importObject );
670
// -------------------------------------------------------------------------
672
// -------------------------------------------------------------------------
674
public void importAll()
676
importCategoryOptions();
678
importCategoryCombos();
679
importCategoryOptionCombos();
680
importCategoryCategoryOptionAssociations();
681
importCategoryComboCategoryAssociations();
682
importDataElements();
683
importCalculatedDataElements();
684
importDataElementGroups();
685
importDataElementGroupMembers();
686
importIndicatorTypes();
688
importIndicatorGroups();
689
importIndicatorGroupMembers();
690
importDataDictionaries();
691
importDataDictionaryDataElements();
692
importDataDictionaryIndicators();
694
importDataSetMembers();
695
importOrganisationUnits();
696
importOrganisationUnitRelationships();
697
importOrganisationUnitGroups();
698
importOrganisationUnitGroupMembers();
699
importOrganisationUnitGroupSets();
700
importOrganisationUnitGroupSetMembers();
701
importOrganisationUnitLevels();
702
importDataSetSourceAssociations();
703
importValidationRules();
705
importReportTables();
706
importReportTableDataElements();
707
importReportTableCategoryOptionCombos();
708
importReportTableIndicators();
709
importReportTableDataSets();
710
importReportTablePeriods();
711
importReportTableOrganisationUnits();
713
importCompleteDataSetRegistrations();
716
NameMappingUtil.clearMapping();
718
cacheManager.clearCache();
721
// -------------------------------------------------------------------------
722
// Import - object supportive methods
723
// -------------------------------------------------------------------------
725
private void importCategoryOptions()
727
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementCategoryOptionBatchHandler.class );
731
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElementCategoryOption.class );
733
for ( ImportObject importObject : importObjects )
735
DataElementCategoryOption object = (DataElementCategoryOption) importObject.getObject();
737
NameMappingUtil.addCategoryOptionMapping( object.getId(), object.getName() );
739
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
741
DataElementCategoryOption compareObject = (DataElementCategoryOption) importObject.getCompareObject();
743
object.setId( compareObject.getId() );
746
importObject.setObject( object );
748
addOrUpdateObject( batchHandler, importObject );
751
batchHandler.flush();
753
importObjectStore.deleteImportObjects( DataElementCategoryOption.class );
755
log.info( "Imported DataElementCategoryOptions" );
758
private void importCategories()
760
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementCategoryBatchHandler.class );
764
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElementCategory.class );
766
for ( ImportObject importObject : importObjects )
768
DataElementCategory object = (DataElementCategory) importObject.getObject();
770
NameMappingUtil.addCategoryMapping( object.getId(), object.getName() );
772
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
774
DataElementCategory compareObject = (DataElementCategory) importObject.getCompareObject();
776
object.setId( compareObject.getId() );
779
importObject.setObject( object );
781
addOrUpdateObject( batchHandler, importObject );
784
batchHandler.flush();
786
importObjectStore.deleteImportObjects( DataElementCategory.class );
788
log.info( "Imported DataElementCategories" );
791
private void importCategoryCombos()
793
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementCategoryComboBatchHandler.class );
797
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElementCategoryCombo.class );
799
for ( ImportObject importObject : importObjects )
801
DataElementCategoryCombo object = (DataElementCategoryCombo) importObject.getObject();
803
NameMappingUtil.addCategoryComboMapping( object.getId(), object.getName() );
805
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
807
DataElementCategoryCombo compareObject = (DataElementCategoryCombo) importObject.getCompareObject();
809
object.setId( compareObject.getId() );
812
importObject.setObject( object );
814
addOrUpdateObject( batchHandler, importObject );
817
batchHandler.flush();
819
importObjectStore.deleteImportObjects( DataElementCategoryCombo.class );
821
log.info( "Imported DataElementCategoryCombos" );
824
private void importCategoryOptionCombos()
826
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElementCategoryOptionCombo.class );
828
Map<Object, Integer> categoryComboMapping = objectMappingGenerator.getCategoryComboMapping( false );
829
Map<Object, Integer> categoryOptionMapping = objectMappingGenerator.getCategoryOptionMapping( false );
831
for ( ImportObject importObject : importObjects )
833
DataElementCategoryOptionCombo object = (DataElementCategoryOptionCombo) importObject.getObject();
835
int categoryOptionComboId = object.getId();
837
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
839
DataElementCategoryOptionCombo compareObject = (DataElementCategoryOptionCombo) importObject.getCompareObject();
841
object.setId( compareObject.getId() );
844
int categoryComboId = categoryComboMapping.get( object.getCategoryCombo().getId() );
846
object.setCategoryCombo( categoryComboService.getDataElementCategoryCombo( categoryComboId ) );
848
Set<DataElementCategoryOption> categoryOptions = new HashSet<DataElementCategoryOption>();
850
for ( DataElementCategoryOption categoryOption : object.getCategoryOptions() )
852
int categoryOptionId = categoryOptionMapping.get( categoryOption.getId() );
854
categoryOptions.add( categoryOptionService.getDataElementCategoryOption( categoryOptionId ) );
857
object.setCategoryOptions( categoryOptions );
859
NameMappingUtil.addCategoryOptionComboMapping( categoryOptionComboId, object );
861
if ( importObject.getStatus() == ImportObjectStatus.NEW )
863
categoryOptionComboService.addDataElementCategoryOptionCombo( object );
865
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
867
categoryOptionComboService.updateDataElementCategoryOptionCombo( object );
871
importObjectStore.deleteImportObjects( DataElementCategoryOptionCombo.class );
873
log.info( "Imported DataElementCategoryOptionCombos" );
876
private void importCategoryCategoryOptionAssociations()
878
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( CategoryCategoryOptionAssociationBatchHandler.class );
880
importGroupMemberAssociation( batchHandler, GroupMemberType.CATEGORY_CATEGORYOPTION,
881
objectMappingGenerator.getCategoryMapping( false ),
882
objectMappingGenerator.getCategoryOptionMapping( false ) );
884
log.info( "Imported CategoryCategoryOption associations" );
887
private void importCategoryComboCategoryAssociations()
889
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( CategoryComboCategoryAssociationBatchHandler.class );
891
importGroupMemberAssociation( batchHandler, GroupMemberType.CATEGORYCOMBO_CATEGORY,
892
objectMappingGenerator.getCategoryComboMapping( false ),
893
objectMappingGenerator.getCategoryMapping( false ) );
895
log.info( "Imported CategoryComboCategory associations" );
898
private void importDataElements()
900
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementBatchHandler.class );
901
BatchHandler extendedDataElementBatchHandler = batchHandlerFactory.createBatchHandler( ExtendedDataElementBatchHandler.class );
903
Map<Object, Integer> categoryComboMapping = objectMappingGenerator.getCategoryComboMapping( false );
906
extendedDataElementBatchHandler.init();
908
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElement.class );
910
for ( ImportObject importObject : importObjects )
912
DataElement object = (DataElement) importObject.getObject();
914
NameMappingUtil.addDataElementMapping( object.getId(), object.getName() );
916
if ( importObject.getStatus() == ImportObjectStatus.NEW )
918
ExtendedDataElement extendedObject = object.getExtended();
920
if ( extendedObject != null )
922
int id = extendedDataElementBatchHandler.insertObject( extendedObject, true );
924
extendedObject.setId( id );
926
object.setExtended( extendedObject );
929
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )//TODO
931
ExtendedDataElement extendedObject = object.getExtended();
933
if ( extendedObject != null )
935
ExtendedDataElement extendedCompareObject = ((DataElement)importObject.getCompareObject()).getExtended();
937
extendedObject.setId( extendedCompareObject.getId() );
939
extendedDataElementBatchHandler.updateObject( extendedObject );
941
object.setExtended( extendedObject );
944
DataElement compareObject = (DataElement) importObject.getCompareObject();
946
object.setId( compareObject.getId() );
949
object.getCategoryCombo().setId( categoryComboMapping.get( object.getCategoryCombo().getId() ) );
951
importObject.setObject( object );
953
addOrUpdateObject( batchHandler, importObject );
956
batchHandler.flush();
957
extendedDataElementBatchHandler.flush();
959
importObjectStore.deleteImportObjects( DataElement.class );
961
log.info( "Imported DataElements" );
964
private void importCalculatedDataElements()
966
Map<Object, Integer> categoryComboMapping = objectMappingGenerator.getCategoryComboMapping( false );
967
Map<Object, Integer> dataElementMapping = objectMappingGenerator.getDataElementMapping( false );
968
Map<Object, Integer> categoryOptionComboMapping = objectMappingGenerator.getCategoryOptionComboMapping( false );
970
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( CalculatedDataElement.class );
972
for ( ImportObject importObject : importObjects )
974
CalculatedDataElement object = (CalculatedDataElement) importObject.getObject();
976
NameMappingUtil.addDataElementMapping( object.getId(), object.getName() );
978
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
980
DataElement compareObject = (DataElement) importObject.getCompareObject();
982
object.setId( compareObject.getId() );
985
object.getCategoryCombo().setId( categoryComboMapping.get( object.getCategoryCombo().getId() ) );
986
object.getExpression().setExpression( expressionService.convertExpression(
987
object.getExpression().getExpression(), dataElementMapping, categoryOptionComboMapping ) );
989
importObject.setObject( object );
991
if ( importObject.getStatus() == ImportObjectStatus.NEW )
993
dataElementService.addDataElement( object );
995
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
997
dataElementService.updateDataElement( object );
1001
importObjectStore.deleteImportObjects( CalculatedDataElement.class );
1003
log.info( "Imported CalculatedDataElements" );
1006
private void importDataElementGroups()
1008
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementGroupBatchHandler.class );
1010
batchHandler.init();
1012
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataElementGroup.class );
1014
for ( ImportObject importObject : importObjects )
1016
DataElementGroup object = (DataElementGroup) importObject.getObject();
1018
NameMappingUtil.addDataElementGroupMapping( object.getId(), object.getName() );
1020
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1022
DataElementGroup compareObject = (DataElementGroup) importObject.getCompareObject();
1024
object.setId( compareObject.getId() );
1027
importObject.setObject( object );
1029
addOrUpdateObject( batchHandler, importObject );
1032
batchHandler.flush();
1034
importObjectStore.deleteImportObjects( DataElementGroup.class );
1036
log.info( "Imported DataElementGroups" );
1039
private void importDataElementGroupMembers()
1041
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataElementGroupMemberBatchHandler.class );
1043
importGroupMemberAssociation( batchHandler, GroupMemberType.DATAELEMENTGROUP,
1044
objectMappingGenerator.getDataElementGroupMapping( false ),
1045
objectMappingGenerator.getDataElementMapping( false ) );
1047
log.info( "Imported DataElementGroup members" );
1050
private void importIndicatorTypes()
1052
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( IndicatorTypeBatchHandler.class );
1054
batchHandler.init();
1056
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( IndicatorType.class );
1058
for ( ImportObject importObject : importObjects )
1060
IndicatorType object = (IndicatorType) importObject.getObject();
1062
NameMappingUtil.addIndicatorTypeMapping( object.getId(), object.getName() );
1064
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1066
IndicatorType compareObject = (IndicatorType) importObject.getCompareObject();
1068
object.setId( compareObject.getId() );
1071
importObject.setObject( object );
1073
addOrUpdateObject( batchHandler, importObject );
1076
batchHandler.flush();
1078
importObjectStore.deleteImportObjects( IndicatorType.class );
1080
log.info( "Imported IndicatorTypes" );
1083
private void importIndicators()
1085
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( IndicatorBatchHandler.class );
1086
BatchHandler extendedDataElementBatchHandler = batchHandlerFactory.createBatchHandler( ExtendedDataElementBatchHandler.class );
1088
Map<Object, Integer> indicatorTypeMapping = objectMappingGenerator.getIndicatorTypeMapping( false );
1089
Map<Object, Integer> dataElementMapping = objectMappingGenerator.getDataElementMapping( false );
1090
Map<Object, Integer> categoryOptionComboMapping = objectMappingGenerator.getCategoryOptionComboMapping( false );
1092
batchHandler.init();
1093
extendedDataElementBatchHandler.init();
1095
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( Indicator.class );
1097
for ( ImportObject importObject : importObjects )
1099
Indicator object = (Indicator) importObject.getObject();
1101
NameMappingUtil.addIndicatorMapping( object.getId(), object.getName() );
1103
if ( importObject.getStatus() == ImportObjectStatus.NEW )
1105
ExtendedDataElement extendedIndicator = object.getExtended();
1107
if ( extendedIndicator != null )
1109
int id = extendedDataElementBatchHandler.insertObject( extendedIndicator, true );
1111
extendedIndicator.setId( id );
1113
object.setExtended( extendedIndicator );
1116
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1118
ExtendedDataElement extendedObject = object.getExtended();
1120
if ( extendedObject != null )
1122
ExtendedDataElement extendedCompareObject = ((Indicator)importObject.getCompareObject()).getExtended();
1124
extendedObject.setId( extendedCompareObject.getId() );
1126
extendedDataElementBatchHandler.updateObject( extendedObject );
1128
object.setExtended( extendedObject );
1131
Indicator compareObject = (Indicator) importObject.getCompareObject();
1133
object.setId( compareObject.getId() );
1136
object.getIndicatorType().setId( indicatorTypeMapping.get( object.getIndicatorType().getId() ) );
1137
object.setNumerator( expressionService.convertExpression( object.getNumerator(), dataElementMapping, categoryOptionComboMapping ) );
1138
object.setDenominator( expressionService.convertExpression( object.getDenominator(), dataElementMapping, categoryOptionComboMapping ) );
1140
importObject.setObject( object );
1142
addOrUpdateObject( batchHandler, importObject );
1145
batchHandler.flush();
1146
extendedDataElementBatchHandler.flush();
1148
importObjectStore.deleteImportObjects( Indicator.class );
1150
log.info( "Imported Indicators" );
1153
private void importIndicatorGroups()
1155
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( IndicatorGroupBatchHandler.class );
1157
batchHandler.init();
1159
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( IndicatorGroup.class );
1161
for ( ImportObject importObject : importObjects )
1163
IndicatorGroup object = (IndicatorGroup) importObject.getObject();
1165
NameMappingUtil.addIndicatorGroupMapping( object.getId(), object.getName() );
1167
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1169
IndicatorGroup compareObject = (IndicatorGroup) importObject.getCompareObject();
1171
object.setId( compareObject.getId() );
1174
importObject.setObject( object );
1176
addOrUpdateObject( batchHandler, importObject );
1179
batchHandler.flush();
1181
importObjectStore.deleteImportObjects( IndicatorGroup.class );
1183
log.info( "Imported IndicatorGroups" );
1186
private void importIndicatorGroupMembers()
1188
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( IndicatorGroupMemberBatchHandler.class );
1190
importGroupMemberAssociation( batchHandler, GroupMemberType.INDICATORGROUP,
1191
objectMappingGenerator.getIndicatorGroupMapping( false ),
1192
objectMappingGenerator.getIndicatorMapping( false ) );
1194
log.info( "Imported IndicatorGroup members" );
1197
private void importDataDictionaries()
1199
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataDictionaryBatchHandler.class );
1201
batchHandler.init();
1203
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataDictionary.class );
1205
for ( ImportObject importObject : importObjects )
1207
DataDictionary object = (DataDictionary) importObject.getObject();
1209
NameMappingUtil.addDataDictionaryMapping( object.getId(), object.getName() );
1211
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1213
DataDictionary compareObject = (DataDictionary) importObject.getCompareObject();
1215
object.setId( compareObject.getId() );
1218
importObject.setObject( object );
1220
addOrUpdateObject( batchHandler, importObject );
1223
batchHandler.flush();
1225
importObjectStore.deleteImportObjects( DataDictionary.class );
1227
log.info( "Imported DataDictionaries" );
1230
private void importDataSets()
1232
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataSetBatchHandler.class );
1234
batchHandler.init();
1236
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( DataSet.class );
1238
for ( ImportObject importObject : importObjects )
1240
DataSet object = (DataSet) importObject.getObject();
1242
NameMappingUtil.addDataSetMapping( object.getId(), object.getName() );
1244
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1246
DataSet compareObject = (DataSet) importObject.getCompareObject();
1248
object.setId( compareObject.getId() );
1251
importObject.setObject( object );
1253
addOrUpdateObject( batchHandler, importObject );
1256
batchHandler.flush();
1258
importObjectStore.deleteImportObjects( DataSet.class );
1260
log.info( "Imported DataSets" );
1263
private void importDataDictionaryDataElements()
1265
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataDictionaryDataElementBatchHandler.class );
1267
importGroupMemberAssociation( batchHandler, GroupMemberType.DATADICTIONARY_DATAELEMENT,
1268
objectMappingGenerator.getDataDictionaryMapping( false ),
1269
objectMappingGenerator.getDataElementMapping( false ) );
1271
log.info( "Imported DataDictionary DataElements" );
1274
private void importDataDictionaryIndicators()
1276
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataDictionaryIndicatorBatchHandler.class );
1278
importGroupMemberAssociation( batchHandler, GroupMemberType.DATADICTIONARY_INDICATOR,
1279
objectMappingGenerator.getDataDictionaryMapping( false ),
1280
objectMappingGenerator.getIndicatorMapping( false ) );
1282
log.info( "Imported DataDictionary Indicators" );
1285
private void importDataSetMembers()
1287
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataSetMemberBatchHandler.class );
1289
importGroupMemberAssociation( batchHandler, GroupMemberType.DATASET,
1290
objectMappingGenerator.getDataSetMapping( false ),
1291
objectMappingGenerator.getDataElementMapping( false ) );
1293
log.info( "Imported DataSet members" );
1296
private void importOrganisationUnits()
1298
BatchHandler sourceBatchHandler = batchHandlerFactory.createBatchHandler( SourceBatchHandler.class );
1299
BatchHandler organisationUnitBatchHandler = batchHandlerFactory.createBatchHandler( OrganisationUnitBatchHandler.class );
1301
sourceBatchHandler.init();
1302
organisationUnitBatchHandler.init();
1304
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( OrganisationUnit.class );
1306
for ( ImportObject importObject : importObjects )
1308
OrganisationUnit object = (OrganisationUnit) importObject.getObject();
1310
NameMappingUtil.addOrganisationUnitMapping( object.getId(), object.getName() );
1312
if ( importObject.getStatus() == ImportObjectStatus.NEW )
1314
int id = sourceBatchHandler.insertObject( object, true );
1318
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1320
OrganisationUnit compareObject = (OrganisationUnit) importObject.getCompareObject();
1322
object.setId( compareObject.getId() );
1325
importObject.setObject( object );
1327
addOrUpdateObject( organisationUnitBatchHandler, importObject );
1330
sourceBatchHandler.flush();
1331
organisationUnitBatchHandler.flush();
1333
importObjectStore.deleteImportObjects( OrganisationUnit.class );
1335
log.info( "Imported OrganisationUnits" );
1338
private void importOrganisationUnitRelationships()
1340
Map<Object, Integer> organisationUnitMapping = objectMappingGenerator.getOrganisationUnitMapping( false );
1342
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( OrganisationUnitBatchHandler.class );
1344
batchHandler.init();
1346
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( GroupMemberType.ORGANISATIONUNITRELATIONSHIP );
1348
for ( ImportObject importObject : importObjects )
1350
GroupMemberAssociation object = (GroupMemberAssociation) importObject.getObject();
1352
OrganisationUnit child = organisationUnitService.getOrganisationUnit( organisationUnitMapping.get( object.getMemberId() ) );
1354
OrganisationUnit parent = organisationUnitService.getOrganisationUnit( organisationUnitMapping.get( object.getGroupId() ) );
1356
child.setParent( parent );
1358
batchHandler.updateObject( child );
1361
batchHandler.flush();
1363
importObjectStore.deleteImportObjects( GroupMemberType.ORGANISATIONUNITRELATIONSHIP );
1365
log.info( "Imported OrganisationUnit relationships" );
1368
private void importOrganisationUnitGroups()
1370
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( OrganisationUnitGroupBatchHandler.class );
1372
batchHandler.init();
1374
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( OrganisationUnitGroup.class );
1376
for ( ImportObject importObject : importObjects )
1378
OrganisationUnitGroup object = (OrganisationUnitGroup) importObject.getObject();
1380
NameMappingUtil.addOrganisationUnitGroupMapping( object.getId(), object.getName() );
1382
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1384
OrganisationUnitGroup compareObject = (OrganisationUnitGroup) importObject.getCompareObject();
1386
object.setId( compareObject.getId() );
1389
importObject.setObject( object );
1391
addOrUpdateObject( batchHandler, importObject );
1394
batchHandler.flush();
1396
importObjectStore.deleteImportObjects( OrganisationUnitGroup.class );
1398
log.info( "Imported OrganisationUnitGroups" );
1401
private void importOrganisationUnitGroupMembers()
1403
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( OrganisationUnitGroupMemberBatchHandler.class );
1405
importGroupMemberAssociation( batchHandler, GroupMemberType.ORGANISATIONUNITGROUP,
1406
objectMappingGenerator.getOrganisationUnitGroupMapping( false ),
1407
objectMappingGenerator.getOrganisationUnitMapping( false ) );
1409
log.info( "Imported OrganissationUnitGroup members" );
1412
private void importOrganisationUnitGroupSets()
1414
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( GroupSetBatchHandler.class );
1416
batchHandler.init();
1418
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( OrganisationUnitGroupSet.class );
1420
for ( ImportObject importObject : importObjects )
1422
OrganisationUnitGroupSet object = (OrganisationUnitGroupSet) importObject.getObject();
1424
NameMappingUtil.addGroupSetMapping( object.getId(), object.getName() );
1426
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1428
OrganisationUnitGroupSet compareObject = (OrganisationUnitGroupSet) importObject.getCompareObject();
1430
object.setId( compareObject.getId() );
1433
importObject.setObject( object );
1435
addOrUpdateObject( batchHandler, importObject );
1438
batchHandler.flush();
1440
importObjectStore.deleteImportObjects( OrganisationUnitGroupSet.class );
1442
log.info( "Imported OrganisationUnitGroupSets" );
1445
private void importOrganisationUnitGroupSetMembers()
1447
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( GroupSetMemberBatchHandler.class );
1449
importGroupMemberAssociation( batchHandler, GroupMemberType.ORGANISATIONUNITGROUPSET,
1450
objectMappingGenerator.getOrganisationUnitGroupSetMapping( false ),
1451
objectMappingGenerator.getOrganisationUnitGroupMapping( false ) );
1453
log.info( "Imported OrganisationUnitGroupSet members" );
1456
private void importOrganisationUnitLevels()
1458
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( OrganisationUnitLevel.class );
1460
for ( ImportObject importObject : importObjects )
1462
OrganisationUnitLevel object = (OrganisationUnitLevel) importObject.getObject();
1464
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1466
OrganisationUnitLevel compare = (OrganisationUnitLevel) importObject.getCompareObject();
1468
object = updateOrganisationUnitLevel( compare, object );
1470
organisationUnitService.updateOrganisationUnitLevel( object );
1472
else if ( importObject.getStatus() == ImportObjectStatus.NEW )
1474
organisationUnitService.addOrganisationUnitLevel( object );
1478
importObjectStore.deleteImportObjects( OrganisationUnitLevel.class );
1480
log.info( "Imported OrganisationUnitLevels" );
1483
private void importDataSetSourceAssociations()
1485
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataSetSourceAssociationBatchHandler.class );
1487
importGroupMemberAssociation( batchHandler, GroupMemberType.DATASET,
1488
objectMappingGenerator.getDataSetMapping( false ),
1489
objectMappingGenerator.getOrganisationUnitMapping( false ) );
1491
log.info( "Imported DataSet Source associations" );
1494
private void importValidationRules()
1496
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( ValidationRule.class );
1498
for ( ImportObject importObject : importObjects )
1500
ValidationRule object = (ValidationRule) importObject.getObject();
1502
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1504
ValidationRule compare = (ValidationRule) importObject.getCompareObject();
1506
validationRuleService.updateValidationRule( compare ); // Reload because of Expression
1508
object = updateValidationRule( compare, object );
1510
expressionService.updateExpression( object.getLeftSide() );
1511
expressionService.updateExpression( object.getRightSide() );
1513
validationRuleService.updateValidationRule( object );
1515
else if ( importObject.getStatus() == ImportObjectStatus.NEW )
1517
expressionService.addExpression( object.getLeftSide() );
1518
expressionService.addExpression( object.getRightSide() );
1520
validationRuleService.addValidationRule( object );
1524
importObjectStore.deleteImportObjects( ValidationRule.class );
1526
log.info( "Imported ValidationRules" );
1529
private void importPeriods()
1531
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( PeriodBatchHandler.class );
1533
batchHandler.init();
1535
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( Period.class );
1537
for ( ImportObject importObject : importObjects )
1539
Period period = (Period) importObject.getObject();
1541
NameMappingUtil.addPeriodMapping( period.getId(), period );
1543
addOrUpdateObject( batchHandler, importObject );
1546
batchHandler.flush();
1548
importObjectStore.deleteImportObjects( Period.class );
1550
log.info( "Imported Periods" );
1553
private void importReportTables()
1555
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableBatchHandler.class );
1557
batchHandler.init();
1559
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( ReportTable.class );
1561
for ( ImportObject importObject : importObjects )
1563
ReportTable object = (ReportTable) importObject.getObject();
1565
NameMappingUtil.addReportTableMapping( object.getId(), object.getName() );
1567
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1569
ReportTable compareObject = (ReportTable) importObject.getCompareObject();
1571
object.setId( compareObject.getId() );
1574
importObject.setObject( object );
1576
addOrUpdateObject( batchHandler, importObject );
1579
batchHandler.flush();
1581
importObjectStore.deleteImportObjects( ReportTable.class );
1583
log.info( "Imported ReportTables" );
1586
private void importReportTableDataElements()
1588
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableDataElementBatchHandler.class );
1590
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_DATAELEMENT,
1591
objectMappingGenerator.getReportTableMapping( false ),
1592
objectMappingGenerator.getDataElementMapping( false ) );
1594
log.info( "Imported ReportTable DataElements" );
1597
private void importReportTableCategoryOptionCombos()
1599
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableCategoryOptionComboBatchHandler.class );
1601
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_CATEGORY_OPTION_COMBO,
1602
objectMappingGenerator.getReportTableMapping( false ),
1603
objectMappingGenerator.getCategoryOptionComboMapping( false ) );
1605
log.info( "Imported ReportTable CategoryOptionCombos" );
1608
private void importReportTableIndicators()
1610
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableIndicatorBatchHandler.class );
1612
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_INDICATOR,
1613
objectMappingGenerator.getReportTableMapping( false ),
1614
objectMappingGenerator.getIndicatorMapping( false ) );
1616
log.info( "Imported ReportTable Indicators" );
1619
private void importReportTableDataSets()
1621
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableDataSetBatchHandler.class );
1623
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_DATASET,
1624
objectMappingGenerator.getReportTableMapping( false ),
1625
objectMappingGenerator.getDataSetMapping( false ) );
1627
log.info( "Imported ReportTable DataSets" );
1630
private void importReportTablePeriods()
1632
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTablePeriodBatchHandler.class );
1634
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_PERIOD,
1635
objectMappingGenerator.getReportTableMapping( false ),
1636
objectMappingGenerator.getPeriodMapping( false ) );
1638
log.info( "Imported ReportTable Periods" );
1641
private void importReportTableOrganisationUnits()
1643
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( ReportTableOrganisationUnitBatchHandler.class );
1645
importGroupMemberAssociation( batchHandler, GroupMemberType.REPORTTABLE_ORGANISATIONUNIT,
1646
objectMappingGenerator.getReportTableMapping( false ),
1647
objectMappingGenerator.getOrganisationUnitMapping( false ) );
1649
log.info( "Imported ReportTable OrganisationUnits" );
1652
private void importOlapURLs()
1654
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( OlapURL.class );
1656
for ( ImportObject importObject : importObjects )
1658
OlapURL object = (OlapURL) importObject.getObject();
1660
if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1662
OlapURL compare = (OlapURL) importObject.getObject();
1664
object = updateOlapURL( compare, object );
1666
olapURLService.updateOlapURL( object );
1668
else if ( importObject.getStatus() == ImportObjectStatus.NEW )
1670
olapURLService.saveOlapURL( object );
1674
importObjectStore.deleteImportObjects( OlapURL.class );
1676
log.info( "Imported OlapURLs" );
1679
private void importCompleteDataSetRegistrations()
1681
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( CompleteDataSetRegistrationBatchHandler.class );
1683
batchHandler.init();
1685
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( CompleteDataSetRegistration.class );
1687
Map<Object, Integer> dataSetMapping = objectMappingGenerator.getDataSetMapping( false );
1688
Map<Object, Integer> periodMapping = objectMappingGenerator.getPeriodMapping( false );
1689
Map<Object, Integer> sourceMapping = objectMappingGenerator.getOrganisationUnitMapping( false );
1691
for ( ImportObject importObject : importObjects )
1693
CompleteDataSetRegistration registration = (CompleteDataSetRegistration) importObject.getObject();
1695
registration.getDataSet().setId( dataSetMapping.get( registration.getDataSet().getId() ) );
1696
registration.getPeriod().setId( periodMapping.get( registration.getPeriod().getId() ) );
1697
registration.getSource().setId( sourceMapping.get( registration.getSource().getId() ) );
1699
// -----------------------------------------------------------------
1700
// Must check for existing registrations since this cannot be done
1702
// -----------------------------------------------------------------
1704
if ( !batchHandler.objectExists( registration ) )
1706
batchHandler.addObject( registration );
1710
batchHandler.flush();
1712
importObjectStore.deleteImportObjects( CompleteDataSetRegistration.class );
1714
log.info( "Imported CompleteDataSetRegistrations" );
1717
private void importDataValues()
1719
if ( lockingManager.currentImportContainsLockedData() )
1721
log.warn( "Import file contained DataValues for locked periods" );
1725
BatchHandler batchHandler = batchHandlerFactory.createBatchHandler( DataValueBatchHandler.class );
1727
batchHandler.init();
1729
Map<Object, Integer> dataElementMapping = objectMappingGenerator.getDataElementMapping( false );
1730
Map<Object, Integer> periodMapping = objectMappingGenerator.getPeriodMapping( false );
1731
Map<Object, Integer> sourceMapping = objectMappingGenerator.getOrganisationUnitMapping( false );
1732
Map<Object, Integer> categoryOptionComboMapping = objectMappingGenerator.getCategoryOptionComboMapping( false );
1734
Collection<ImportDataValue> importValues = importDataValueService.getImportDataValues( ImportObjectStatus.NEW );
1736
for ( ImportDataValue importValue : importValues )
1738
DataValue value = importValue.getDataValue();
1740
value.getDataElement().setId( dataElementMapping.get( value.getDataElement().getId() ) );
1741
value.getPeriod().setId( periodMapping.get( value.getPeriod().getId() ) );
1742
value.getSource().setId( sourceMapping.get( value.getSource().getId() ) );
1743
value.getOptionCombo().setId( categoryOptionComboMapping.get( value.getOptionCombo().getId() ) );
1745
// -----------------------------------------------------------------
1746
// Must check for existing datavalues since this cannot be done
1748
// -----------------------------------------------------------------
1750
if ( !batchHandler.objectExists( value ) )
1752
batchHandler.addObject( value );
1756
batchHandler.flush();
1758
importDataValueService.deleteImportDataValues();
1760
log.info( "Imported DataValues" );
1764
// -------------------------------------------------------------------------
1765
// Import - general supportive methods
1766
// -------------------------------------------------------------------------
1768
private boolean containsIdentifier( String formula, int identifier )
1770
if ( formula != null )
1772
Pattern pattern = Pattern.compile( "(\\[\\d+\\" + SEPARATOR + "\\d+\\])" );
1773
Matcher matcher = pattern.matcher( formula );
1775
while ( matcher.find() )
1777
String match = matcher.group();
1779
match = match.replaceAll( "[\\[\\]]", "" );
1781
String matchId = match.substring( 0, match.indexOf( SEPARATOR ) );
1783
if ( matchId.equals( String.valueOf( identifier ) ) )
1793
private void addOrUpdateObject( BatchHandler batchHandler, ImportObject importObject )
1795
if ( importObject.getStatus() == ImportObjectStatus.NEW )
1797
batchHandler.addObject( importObject.getObject() );
1799
else if ( importObject.getStatus() == ImportObjectStatus.UPDATE )
1801
batchHandler.updateObject( importObject.getObject() );
1804
// ---------------------------------------------------------------------
1805
// Ignoring ImportObjects of type MATCH
1806
// ---------------------------------------------------------------------
1809
private void importGroupMemberAssociation( BatchHandler batchHandler, GroupMemberType type,
1810
Map<Object, Integer> groupMapping, Map<Object, Integer> memberMapping )
1812
GroupMemberAssociationVerifier.clear();
1814
batchHandler.init();
1816
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( type );
1818
for ( ImportObject importObject : importObjects )
1820
GroupMemberAssociation object = (GroupMemberAssociation) importObject.getObject();
1822
object.setGroupId( groupMapping.get( object.getGroupId() ) );
1823
object.setMemberId( memberMapping.get( object.getMemberId() ) );
1825
if ( GroupMemberAssociationVerifier.isUnique( object, type ) && !batchHandler.objectExists( object ) )
1827
batchHandler.addObject( object );
1831
batchHandler.flush();
1833
importObjectStore.deleteImportObjects( type );
1836
// -------------------------------------------------------------------------
1837
// Update - supportive methods
1838
// -------------------------------------------------------------------------
1840
private OrganisationUnitLevel updateOrganisationUnitLevel( OrganisationUnitLevel original, OrganisationUnitLevel update )
1842
original.setLevel( update.getLevel() );
1843
original.setName( update.getName() );
1848
private ValidationRule updateValidationRule( ValidationRule original, ValidationRule update )
1850
original.setName( update.getName() );
1851
original.setDescription( update.getDescription() );
1852
original.setType( update.getType() );
1853
original.setOperator( update.getOperator() );
1854
original.getLeftSide().setExpression( update.getLeftSide().getExpression() );
1855
original.getLeftSide().setDescription( update.getLeftSide().getDescription() );
1856
original.getLeftSide().setDataElementsInExpression( update.getLeftSide().getDataElementsInExpression() );
1857
original.getRightSide().setExpression( update.getRightSide().getExpression() );
1858
original.getRightSide().setDescription( update.getRightSide().getDescription() );
1859
original.getRightSide().setDataElementsInExpression( update.getRightSide().getDataElementsInExpression() );
1864
private DataValue updateDataValue( DataValue original, DataValue update )
1866
original.setDataElement( update.getDataElement() );
1867
original.setPeriod( update.getPeriod() );
1868
original.setSource( update.getSource() );
1869
original.setValue( update.getValue() );
1870
original.setStoredBy( update.getStoredBy() );
1871
original.setTimestamp( update.getTimestamp() );
1872
original.setComment( update.getComment() );
1873
original.setOptionCombo( update.getOptionCombo() );
1878
private OlapURL updateOlapURL( OlapURL original, OlapURL update )
1880
original.setName( update.getName() );
1881
original.setUrl( update.getUrl() );
1886
// -------------------------------------------------------------------------
1887
// Cascade delete - supportive methods
1888
// -------------------------------------------------------------------------
1890
private void deleteMemberAssociations( GroupMemberType groupMemberType, int memberId )
1892
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( groupMemberType );
1894
for ( ImportObject importObject : importObjects )
1896
GroupMemberAssociation association = (GroupMemberAssociation) importObject.getObject();
1898
if ( association.getMemberId() == memberId )
1900
importObjectStore.deleteImportObject( importObject );
1905
private void deleteGroupAssociations( GroupMemberType groupMemberType, int groupId )
1907
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( groupMemberType);
1909
for ( ImportObject importObject : importObjects )
1911
GroupMemberAssociation association = (GroupMemberAssociation) importObject.getObject();
1913
if ( association.getGroupId() == groupId )
1915
importObjectStore.deleteImportObject( importObject );
1920
private void deleteIndicatorsContainingDataElement( int dataElementId )
1922
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( Indicator.class );
1924
for ( ImportObject importObject : importObjects )
1926
Indicator indicator = (Indicator) importObject.getObject();
1928
if ( containsIdentifier( indicator.getNumerator(), dataElementId ) || containsIdentifier( indicator.getDenominator(), dataElementId ) )
1930
importObjectStore.deleteImportObject( importObject );
1932
deleteMemberAssociations( GroupMemberType.INDICATORGROUP, indicator.getId() );
1934
deleteMemberAssociations( GroupMemberType.DATADICTIONARY_INDICATOR, indicator.getId() );
1936
deleteMemberAssociations( GroupMemberType.REPORTTABLE_INDICATOR, indicator.getId() );
1941
private void deleteIndicatorsWithIndicatorType( int indicatorTypeId )
1943
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( Indicator.class );
1945
for ( ImportObject importObject : importObjects )
1947
Indicator indicator = (Indicator) importObject.getObject();
1949
if ( indicator.getIndicatorType().getId() == indicatorTypeId )
1951
importObjectStore.deleteImportObject( importObject );
1953
deleteMemberAssociations( GroupMemberType.INDICATORGROUP, indicator.getId() );
1955
deleteMemberAssociations( GroupMemberType.DATADICTIONARY_INDICATOR, indicator.getId() );
1957
deleteMemberAssociations( GroupMemberType.REPORTTABLE_INDICATOR, indicator.getId() );
1962
private void deleteCompleteDataSetRegistrationsByDataSet( int dataSetId )
1964
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( CompleteDataSetRegistration.class );
1966
for ( ImportObject importObject : importObjects )
1968
CompleteDataSetRegistration registration = (CompleteDataSetRegistration) importObject.getObject();
1970
if ( registration.getDataSet().getId() == dataSetId )
1972
importObjectStore.deleteImportObject( importObject );
1977
private void deleteCompleteDataSetRegistrationsBySource( int sourceId )
1979
Collection<ImportObject> importObjects = importObjectStore.getImportObjects( CompleteDataSetRegistration.class );
1981
for ( ImportObject importObject : importObjects )
1983
CompleteDataSetRegistration registration = (CompleteDataSetRegistration) importObject.getObject();
1985
if ( registration.getSource().getId() == sourceId )
1987
importObjectStore.deleteImportObject( importObject );