=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java 2013-10-11 12:58:30 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java 2013-12-29 21:11:38 +0000 @@ -34,6 +34,7 @@ import java.util.Random; import java.util.regex.Pattern; +import org.hisp.dhis.datavalue.DataValue; import org.hisp.dhis.expression.Operator; import org.nfunk.jep.JEP; @@ -328,8 +329,7 @@ public static boolean isPositiveInteger( String value ) { return value != null && POSITIVE_INT_PATTERN.matcher( value ).matches(); - } - + } /** * Returns true if the provided string argument is to be considered a positive @@ -344,7 +344,6 @@ return value != null && POSITIVE_OR_ZERO_INT_PATTERN.matcher( value ).matches(); } - /** * Returns true if the provided string argument is to be considered a negative * integer. @@ -370,6 +369,18 @@ } /** + * Indicates if the provided string argument is to be considered as a boolean, + * more specifically if it equals "true" or "false". + * + * @param value the value. + * @return if the provided string argument is to be considered as a boolean. + */ + public static boolean isBool( String value ) + { + return value != null && ( value.equals( DataValue.TRUE ) || value.equals( DataValue.FALSE ) ); + } + + /** * Tests whether the two decimal numbers are equal with a tolerance of 0.01. * If one or both of the numbers are null, false is returned. * === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java 2013-11-01 08:11:31 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ValidationUtils.java 2013-12-29 21:11:38 +0000 @@ -32,6 +32,7 @@ import org.apache.commons.validator.routines.EmailValidator; import org.apache.commons.validator.routines.UrlValidator; import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.datavalue.DataValue; import java.awt.geom.Point2D; import java.util.Arrays; @@ -249,6 +250,9 @@ *
  • value_not_positive_integer
  • *
  • value_not_negative_integer
  • *
  • value_is_zero_and_not_zero_significant
  • + *
  • value_not_bool
  • + *
  • value_not_true_only
  • + *
  • value_not_valid_date
  • * * * @param value the data value. @@ -268,7 +272,7 @@ } List types = Arrays.asList( VALUE_TYPE_STRING, VALUE_TYPE_INT, VALUE_TYPE_NUMBER, - VALUE_TYPE_POSITIVE_INT, VALUE_TYPE_NEGATIVE_INT, VALUE_TYPE_ZERO_OR_POSITIVE_INT); + VALUE_TYPE_POSITIVE_INT, VALUE_TYPE_NEGATIVE_INT, VALUE_TYPE_ZERO_OR_POSITIVE_INT ); String type = dataElement.getDetailedNumberType(); @@ -301,7 +305,22 @@ { return "value_not_zero_or_positive_integer"; } + + if ( VALUE_TYPE_BOOL.equals( type ) && !MathUtils.isBool( value ) ) + { + return "value_not_bool"; + } + if ( VALUE_TYPE_TRUE_ONLY.equals( type ) && !DataValue.TRUE.equals( value ) ) + { + return "value_not_true_only"; + } + + if ( VALUE_TYPE_DATE.equals( type ) && !DateUtils.dateIsValid( value ) ) + { + return "value_not_valid_date"; + } + if ( VALUE_TYPE_INT.equals( dataElement.getType() ) && MathUtils.isZero( value ) && !dataElement.isZeroIsSignificant() && !AGGREGATION_OPERATOR_AVERAGE.equals( dataElement.getAggregationOperator() ) ) { === modified file 'dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java' --- dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java 2013-09-20 15:13:05 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/test/java/org/hisp/dhis/system/util/ValidationUtilsTest.java 2013-12-29 21:11:38 +0000 @@ -136,14 +136,12 @@ assertNull( dataValueIsValid( "3", de ) ); assertNotNull( dataValueIsValid( "-4", de ) ); - de.setNumberType( DataElement.VALUE_TYPE_NEGATIVE_INT ); assertNull( dataValueIsValid( "-3", de ) ); assertNotNull( dataValueIsValid( "4", de ) ); - de.setNumberType( DataElement.VALUE_TYPE_INT ); - + de.setNumberType( DataElement.VALUE_TYPE_INT ); assertNotNull( dataValueIsValid( "0", de ) ); de.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_AVERAGE ); @@ -151,8 +149,24 @@ assertNull( dataValueIsValid( "0", de ) ); de.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM ); + de.setType( DataElement.VALUE_TYPE_TEXT ); assertNull( dataValueIsValid( "0", de ) ); + + de.setType( DataElement.VALUE_TYPE_BOOL ); + + assertNull( dataValueIsValid( "true", de ) ); + assertNotNull( dataValueIsValid( "yes", de ) ); + + de.setType( DataElement.VALUE_TYPE_TRUE_ONLY ); + + assertNull( dataValueIsValid( "true", de ) ); + assertNotNull( dataValueIsValid( "false", de ) ); + + de.setType( DataElement.VALUE_TYPE_DATE ); + assertNull( dataValueIsValid( "2013-04-01", de ) ); + assertNotNull( dataValueIsValid( "2012304-01", de ) ); + assertNotNull( dataValueIsValid( "Date", de ) ); } }