=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2010-01-20 10:06:43 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ListUtils.java 2010-01-29 13:22:17 +0000 @@ -27,6 +27,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -94,4 +95,22 @@ return duplicates; } + + /** + * Returns a Collection with the given items. + * + * @param items the items which should be included in the Collection. + * @return a Collection. + */ + public static Collection getCollection( T... items ) + { + List list = new ArrayList(); + + for ( T item : items ) + { + list.add( item ); + } + + return list; + } } === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java 2009-12-09 08:57:51 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/ValidationAction.java 2010-01-29 13:22:17 +0000 @@ -28,19 +28,22 @@ */ import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.dataanalysis.DataAnalysisService; import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.datavalue.DeflatedDataValue; import org.hisp.dhis.de.state.SelectedStateManager; -import org.hisp.dhis.expression.Expression; import org.hisp.dhis.expression.ExpressionService; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.system.util.ListUtils; import org.hisp.dhis.validation.ValidationResult; import org.hisp.dhis.validation.ValidationRule; import org.hisp.dhis.validation.ValidationRuleService; @@ -56,6 +59,8 @@ { private static final Log log = LogFactory.getLog( ValidationAction.class ); + private static final double STD_DEV = 2.0; + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -87,6 +92,13 @@ { this.periodService = periodService; } + + private DataAnalysisService stdDevOutlierAnalysisService; + + public void setStdDevOutlierAnalysisService( DataAnalysisService stdDevOutlierAnalysisService ) + { + this.stdDevOutlierAnalysisService = stdDevOutlierAnalysisService; + } // ------------------------------------------------------------------------- // Output @@ -99,20 +111,6 @@ return results; } - private Map leftsideMap; - - public Map getLeftsideMap() - { - return leftsideMap; - } - - private Map rightsideMap; - - public Map getRightsideMap() - { - return rightsideMap; - } - private Map leftsideFormulaMap; public Map getLeftsideFormulaMap() @@ -127,6 +125,13 @@ return rightsideFormulaMap; } + private Collection dataValues; + + public Collection getDataValues() + { + return dataValues; + } + // ------------------------------------------------------------------------- // Action implementation // ------------------------------------------------------------------------- @@ -145,36 +150,30 @@ results = new ArrayList( validationRuleService.validate( dataSet, period, orgUnit ) ); - log.info( "Numer of validation violations: " + results.size() ); - + log.info( "Number of validation violations: " + results.size() ); + if ( results.size() == 0 ) { return NONE; } else { - leftsideMap = new HashMap( results.size() ); - rightsideMap = new HashMap( results.size() ); - leftsideFormulaMap = new HashMap( results.size() ); rightsideFormulaMap = new HashMap( results.size() ); for ( ValidationResult result : results ) { ValidationRule rule = result.getValidationRule(); - int id = rule.getId(); - - Expression leftside = rule.getLeftSide(); - Expression rightside = rule.getRightSide(); - - leftsideMap.put( id, leftside ); - rightsideMap.put( id, rightside ); - - leftsideFormulaMap.put( id, expressionService.getExpressionDescription( leftside.getExpression() ) ); - rightsideFormulaMap.put( id, expressionService.getExpressionDescription( rightside.getExpression() ) ); + + leftsideFormulaMap.put( rule.getId(), expressionService.getExpressionDescription( rule.getLeftSide().getExpression() ) ); + rightsideFormulaMap.put( rule.getId(), expressionService.getExpressionDescription( rule.getRightSide().getExpression() ) ); } } + + dataValues = stdDevOutlierAnalysisService.analyse( orgUnit, dataSet.getDataElements(), ListUtils.getCollection( period ), STD_DEV ); + log.info( "Number of outlier values: " + dataValues.size() ); + return SUCCESS; } } === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2010-01-28 23:08:44 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2010-01-29 13:22:17 +0000 @@ -293,6 +293,7 @@ + === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/validationResult.vm' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/validationResult.vm 2010-01-29 09:39:22 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/validationResult.vm 2010-01-29 13:22:17 +0000 @@ -1,41 +1,40 @@

$encoder.htmlEncode( $i18n.getString( "validation_result" ) )

#if( $results.size() == 0) -

$encoder.htmlEncode( $i18n.getString( "successful_validation" ) )

+

$encoder.htmlEncode( $i18n.getString( "successful_validation" ) )

#else -

$encoder.htmlEncode( $i18n.getString( "unsuccessful_validation" ) )

- - - - - - - - - - - - - - - #foreach( $result in $results ) - #set ( $id = $result.validationRule.id ) - #set ( $leftside = $leftsideMap.get( $id ) ) - #set ( $rightside = $rightsideMap.get( $id ) ) - #set ( $leftFormula = $leftsideFormulaMap.get( $id ) ) - #set ( $rightFormula = $rightsideFormulaMap.get( $id ) ) - - - - - - - - - - #end - -
$encoder.htmlEncode( $i18n.getString( "validation_rule" ) )$encoder.htmlEncode( $i18n.getString( "expression" ) )$encoder.htmlEncode( $i18n.getString( "description" ) )$encoder.htmlEncode( $i18n.getString( "value" ) )$encoder.htmlEncode( $i18n.getString( "operator" ) )$encoder.htmlEncode( $i18n.getString( "value" ) )$encoder.htmlEncode( $i18n.getString( "description" ) )
$encoder.htmlEncode( $result.validationRule.name )$leftFormula $result.validationRule.operator $rightFormula$!encoder.htmlEncode( $leftside.description )$result.leftsideValue$encoder.htmlEncode( $i18n.getString( $result.validationRule.operator ) )$result.rightsideValue$!encoder.htmlEncode( $rightside.description )
+

$encoder.htmlEncode( $i18n.getString( "unsuccessful_validation" ) )

+ + + + + + + + + + + #set( $mark = false ) + #foreach( $result in $results ) + #set ( $id = $result.validationRule.id ) + #set ( $leftFormula = $leftsideFormulaMap.get( $id ) ) + #set ( $rightFormula = $rightsideFormulaMap.get( $id ) ) + + $encoder.htmlEncode( $result.validationRule.name ) + $leftFormula $result.validationRule.operator $rightFormula + $!encoder.htmlEncode( $result.validationRule.leftSide.description ) + $result.leftsideValue + $encoder.htmlEncode( $i18n.getString( $result.validationRule.operator ) ) + $result.rightsideValue + $!encoder.htmlEncode( $result.validationRule.rightSide.description ) + + #if( $mark ) + #set( $mark = false ) + #else + #set( $mark = true ) + #end + #end +
$encoder.htmlEncode( $i18n.getString( "validation_rule" ) )$encoder.htmlEncode( $i18n.getString( "expression" ) )$encoder.htmlEncode( $i18n.getString( "description" ) )$encoder.htmlEncode( $i18n.getString( "value" ) )$encoder.htmlEncode( $i18n.getString( "operator" ) )$encoder.htmlEncode( $i18n.getString( "value" ) )$encoder.htmlEncode( $i18n.getString( "description" ) )
#end