=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRule.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRule.java 2014-07-17 12:43:25 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRule.java 2014-07-17 13:26:22 +0000 @@ -70,9 +70,6 @@ public static final String RULE_TYPE_VALIDATION = "validation"; public static final String RULE_TYPE_SURVEILLANCE = "surveillance"; - public static final String TYPE_STATISTICAL = "statistical"; - public static final String TYPE_ABSOLUTE = "absolute"; - /** * A description of the ValidationRule. */ @@ -99,6 +96,11 @@ private Operator operator; /** + * The type of period in which this rule is evaluated. + */ + private PeriodType periodType; + + /** * The left-side expression to be compared against the right side. */ private Expression leftSide; @@ -119,11 +121,6 @@ private Integer organisationUnitLevel; /** - * The type of period in which this rule is evaluated. - */ - private PeriodType periodType; - - /** * The number of sequential right-side periods from which to collect samples * to average (Monitoring-type rules only). Sequential periods are those * immediately preceding (or immediately following in previous years) the selected period. === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/csv/DefaultCsvImportService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/csv/DefaultCsvImportService.java 2014-07-17 13:01:11 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/csv/DefaultCsvImportService.java 2014-07-17 13:26:22 +0000 @@ -48,10 +48,15 @@ import org.hisp.dhis.dataelement.DataElementDomain; import org.hisp.dhis.dataelement.DataElementGroup; import org.hisp.dhis.dxf2.metadata.MetaData; +import org.hisp.dhis.expression.Expression; import org.hisp.dhis.expression.ExpressionService; +import org.hisp.dhis.expression.Operator; import org.hisp.dhis.option.OptionSet; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitGroup; +import org.hisp.dhis.period.MonthlyPeriodType; +import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.validation.ValidationRule; import org.springframework.beans.factory.annotation.Autowired; import com.csvreader.CsvReader; @@ -82,31 +87,35 @@ if ( DataElement.class.equals( clazz ) ) { - metaData.setDataElements( dataElementsFromCsv( reader, input ) ); + metaData.setDataElements( dataElementsFromCsv( reader ) ); } else if ( DataElementGroup.class.equals( clazz ) ) { - metaData.setDataElementGroups( dataElementGroupsFromCsv( reader, input ) ); + metaData.setDataElementGroups( dataElementGroupsFromCsv( reader ) ); } else if ( DataElementCategoryOption.class.equals( clazz ) ) { - metaData.setCategoryOptions( categoryOptionsFromCsv( reader, input ) ); + metaData.setCategoryOptions( categoryOptionsFromCsv( reader ) ); } else if ( CategoryOptionGroup.class.equals( clazz ) ) { - metaData.setCategoryOptionGroups( categoryOptionGroupsFromCsv( reader, input ) ); + metaData.setCategoryOptionGroups( categoryOptionGroupsFromCsv( reader ) ); } else if ( OrganisationUnit.class.equals( clazz ) ) { - metaData.setOrganisationUnits( organisationUnitsFromCsv( reader, input ) ); + metaData.setOrganisationUnits( organisationUnitsFromCsv( reader ) ); } else if ( OrganisationUnitGroup.class.equals( clazz ) ) { - metaData.setOrganisationUnitGroups( organisationUnitGroupsFromCsv( reader, input ) ); + metaData.setOrganisationUnitGroups( organisationUnitGroupsFromCsv( reader ) ); + } + else if ( ValidationRule.class.equals( clazz ) ) + { + metaData.setValidationRules( validationRulesFromCsv( reader ) ); } else if ( OptionSet.class.equals( clazz ) ) { - metaData.setOptionSets( getOptionSetsFromCsv( reader, input ) ); + metaData.setOptionSets( getOptionSetsFromCsv( reader ) ); } return metaData; @@ -116,7 +125,7 @@ // Supportive methods // ------------------------------------------------------------------------- - private List categoryOptionsFromCsv( CsvReader reader, InputStream input ) + private List categoryOptionsFromCsv( CsvReader reader ) throws IOException { List list = new ArrayList(); @@ -136,7 +145,7 @@ return list; } - private List categoryOptionGroupsFromCsv( CsvReader reader, InputStream input ) + private List categoryOptionGroupsFromCsv( CsvReader reader ) throws IOException { List list = new ArrayList(); @@ -156,7 +165,7 @@ return list; } - private List dataElementsFromCsv( CsvReader reader, InputStream input ) + private List dataElementsFromCsv( CsvReader reader ) throws IOException { DataElementCategoryCombo categoryCombo = categoryService.getDefaultDataElementCategoryCombo(); @@ -204,7 +213,7 @@ return list; } - private List dataElementGroupsFromCsv( CsvReader reader, InputStream input ) + private List dataElementGroupsFromCsv( CsvReader reader ) throws IOException { List list = new ArrayList(); @@ -224,7 +233,53 @@ return list; } - private List organisationUnitsFromCsv( CsvReader reader, InputStream input ) + private List validationRulesFromCsv( CsvReader reader ) + throws IOException + { + List list = new ArrayList(); + + while ( reader.readRecord() ) + { + String[] values = reader.getValues(); + + if ( values != null && values.length > 0 ) + { + + Expression leftSide = new Expression(); + Expression rightSide = new Expression(); + + ValidationRule object = new ValidationRule(); + setIdentifiableObject( object, values ); + object.setDescription( getSafe( values, 3, null, 255 ) ); + object.setInstruction( getSafe( values, 4, null, 255 ) ); + object.setImportance( getSafe( values, 5, ValidationRule.IMPORTANCE_MEDIUM, 255 ) ); + object.setRuleType( getSafe( values, 6, ValidationRule.RULE_TYPE_VALIDATION, 255 ) ); + object.setOperator( Operator.safeValueOf( getSafe( values, 7, Operator.equal_to.toString(), 255 ) ) ); + object.setPeriodType( PeriodType.getByNameIgnoreCase( getSafe( values, 8, MonthlyPeriodType.NAME, 255 ) ) ); + + leftSide.setExpression( getSafe( values, 9, null, 255 ) ); + leftSide.setDescription( getSafe( values, 10, null, 255 ) ); + leftSide.setDataElementsInExpression( expressionService.getDataElementsInExpression( leftSide.getExpression() ) ); + leftSide.setOptionCombosInExpression( expressionService.getOptionCombosInExpression( leftSide.getExpression() ) ); + leftSide.setNullIfBlank( true ); + + rightSide.setExpression( getSafe( values, 11, null, 255 ) ); + rightSide.setDescription( getSafe( values, 12, null, 255 ) ); + rightSide.setDataElementsInExpression( expressionService.getDataElementsInExpression( rightSide.getExpression() ) ); + rightSide.setOptionCombosInExpression( expressionService.getOptionCombosInExpression( rightSide.getExpression() ) ); + rightSide.setNullIfBlank( true ); + + object.setLeftSide( leftSide ); + object.setRightSide( rightSide ); + + list.add( object ); + } + } + + return list; + } + + private List organisationUnitsFromCsv( CsvReader reader ) throws IOException { List list = new ArrayList(); @@ -267,7 +322,7 @@ return list; } - private List organisationUnitGroupsFromCsv( CsvReader reader, InputStream input ) + private List organisationUnitGroupsFromCsv( CsvReader reader ) throws IOException { List list = new ArrayList(); @@ -287,7 +342,7 @@ return list; } - private List getOptionSetsFromCsv( CsvReader reader, InputStream input ) + private List getOptionSetsFromCsv( CsvReader reader ) throws IOException { ListMap listMap = new ListMap(); === modified file 'dhis-2/dhis-web/dhis-web-importexport/src/main/java/org/hisp/dhis/importexport/action/dxf2/MetaDataImportAction.java' --- dhis-2/dhis-web/dhis-web-importexport/src/main/java/org/hisp/dhis/importexport/action/dxf2/MetaDataImportAction.java 2014-07-17 13:01:11 +0000 +++ dhis-2/dhis-web/dhis-web-importexport/src/main/java/org/hisp/dhis/importexport/action/dxf2/MetaDataImportAction.java 2014-07-17 13:26:22 +0000 @@ -54,6 +54,7 @@ import org.hisp.dhis.system.util.StreamUtils; import org.hisp.dhis.user.CurrentUserService; import org.hisp.dhis.user.User; +import org.hisp.dhis.validation.ValidationRule; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.Action; @@ -71,6 +72,7 @@ put( "categoryoptiongroup", CategoryOptionGroup.class ); put( "organisationunit", OrganisationUnit.class ); put( "organisationunitgroup", OrganisationUnitGroup.class ); + put( "validationrule", ValidationRule.class ); put( "optionset", OptionSet.class ); }}; === modified file 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/dxf2MetaDataImport.vm' --- dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/dxf2MetaDataImport.vm 2014-05-13 18:18:04 +0000 +++ dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/dxf2MetaDataImport.vm 2014-07-17 13:26:22 +0000 @@ -20,6 +20,7 @@ +