=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetOrganisationUnitsAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetOrganisationUnitsAction.java 2011-10-24 12:18:38 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetOrganisationUnitsAction.java 2011-11-01 18:28:36 +0000 @@ -31,7 +31,7 @@ import java.util.Collections; import java.util.List; -import org.hisp.dhis.light.dataentry.utils.SectionFormUtils; +import org.hisp.dhis.light.dataentry.utils.FormUtils; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.comparator.OrganisationUnitNameComparator; import org.hisp.dhis.user.CurrentUserService; @@ -56,18 +56,18 @@ this.currentUserService = currentUserService; } - private SectionFormUtils sectionFormUtils; - - public void setSectionFormUtils( SectionFormUtils sectionFormUtils ) - { - this.sectionFormUtils = sectionFormUtils; - } - - public SectionFormUtils getSectionFormUtils() - { - return sectionFormUtils; - } - + private FormUtils formUtils; + + public void setFormUtils( FormUtils formUtils ) + { + this.formUtils = formUtils; + } + + public FormUtils getFormUtils() + { + return formUtils; + } + // ------------------------------------------------------------------------- // Input & Output // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java 2011-09-30 11:13:16 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java 2011-11-01 18:28:36 +0000 @@ -37,7 +37,7 @@ import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.dataset.DataSetService; import org.hisp.dhis.datavalue.DeflatedDataValue; -import org.hisp.dhis.light.dataentry.utils.SectionFormUtils; +import org.hisp.dhis.light.dataentry.utils.FormUtils; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; @@ -83,16 +83,16 @@ this.periodService = periodService; } - private SectionFormUtils sectionFormUtils; + private FormUtils formUtils; - public void setSectionFormUtils( SectionFormUtils sectionFormUtils ) + public void setFormUtils( FormUtils formUtils ) { - this.sectionFormUtils = sectionFormUtils; + this.formUtils = formUtils; } - public SectionFormUtils getSectionFormUtils() + public FormUtils getFormUtils() { - return sectionFormUtils; + return formUtils; } // ------------------------------------------------------------------------- @@ -195,11 +195,11 @@ dataSet = dataSetService.getDataSet( dataSetId ); - dataValues = sectionFormUtils.getDataValueMap( organisationUnit, dataSet, period ); - - validationViolations = sectionFormUtils.getValidationViolations( organisationUnit, dataSet, period ); - - validationRuleViolations = sectionFormUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); + dataValues = formUtils.getDataValueMap( organisationUnit, dataSet, period ); + + validationViolations = formUtils.getValidationViolations( organisationUnit, dataSet, period ); + + validationRuleViolations = formUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration( dataSet, period, organisationUnit ); === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java 2011-11-01 15:01:22 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java 2011-11-01 18:28:36 +0000 @@ -48,7 +48,7 @@ import org.hisp.dhis.datavalue.DataValueService; import org.hisp.dhis.datavalue.DeflatedDataValue; import org.hisp.dhis.i18n.I18n; -import org.hisp.dhis.light.dataentry.utils.SectionFormUtils; +import org.hisp.dhis.light.dataentry.utils.FormUtils; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; @@ -125,16 +125,16 @@ this.periodService = periodService; } - private SectionFormUtils sectionFormUtils; + private FormUtils formUtils; - public void setSectionFormUtils( SectionFormUtils sectionFormUtils ) + public void setFormUtils( FormUtils formUtils ) { - this.sectionFormUtils = sectionFormUtils; + this.formUtils = formUtils; } - public SectionFormUtils getSectionFormUtils() + public FormUtils getFormUtils() { - return sectionFormUtils; + return formUtils; } private I18n i18n; @@ -300,7 +300,7 @@ } else if ( type.equals( DataElement.VALUE_TYPE_BOOL ) ) { - if ( !valueIsEmpty && !SectionFormUtils.isBoolean( value ) ) + if ( !valueIsEmpty && !FormUtils.isBoolean( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_boolean" ) ); @@ -308,7 +308,7 @@ } else if ( type.equals( DataElement.VALUE_TYPE_DATE ) ) { - if ( !SectionFormUtils.isDate( value ) ) + if ( !FormUtils.isDate( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_date" ) ); @@ -317,7 +317,7 @@ else if ( type.equals( DataElement.VALUE_TYPE_INT ) && numberType.equals( DataElement.VALUE_TYPE_NUMBER ) ) { - if ( !SectionFormUtils.isNumber( value ) ) + if ( !FormUtils.isNumber( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_number" ) ); @@ -326,7 +326,7 @@ else if ( type.equals( DataElement.VALUE_TYPE_INT ) && numberType.equals( DataElement.VALUE_TYPE_INT ) ) { - if ( !SectionFormUtils.isInteger( value ) ) + if ( !FormUtils.isInteger( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_integer" ) ); @@ -335,7 +335,7 @@ else if ( type.equals( DataElement.VALUE_TYPE_INT ) && numberType.equals( DataElement.VALUE_TYPE_POSITIVE_INT ) ) { - if ( !SectionFormUtils.isPositiveInteger( value ) ) + if ( !FormUtils.isPositiveInteger( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_positive_integer" ) ); @@ -344,7 +344,7 @@ else if ( type.equals( DataElement.VALUE_TYPE_INT ) && numberType.equals( DataElement.VALUE_TYPE_NEGATIVE_INT ) ) { - if ( !SectionFormUtils.isNegativeInteger( value ) ) + if ( !FormUtils.isNegativeInteger( value ) ) { correctType = false; typeViolations.put( key, value + " " + i18n.getString( "is_invalid_negative_integer" ) ); @@ -411,11 +411,11 @@ needsValidation = true; } - dataValues = sectionFormUtils.getDataValueMap( organisationUnit, dataSet, period ); - - validationViolations = sectionFormUtils.getValidationViolations( organisationUnit, dataSet, period ); - - validationRuleViolations = sectionFormUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); + dataValues = formUtils.getDataValueMap( organisationUnit, dataSet, period ); + + validationViolations = formUtils.getValidationViolations( organisationUnit, dataSet, period ); + + validationRuleViolations = formUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); if ( needsValidation && (!validationViolations.isEmpty() || !validationRuleViolations.isEmpty() || !typeViolations.isEmpty()) ) === added file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/FormUtils.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/FormUtils.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/FormUtils.java 2011-11-01 18:28:36 +0000 @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2004-2010, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.hisp.dhis.light.dataentry.utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.hisp.dhis.dataanalysis.DataAnalysisService; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.datavalue.DataValue; +import org.hisp.dhis.datavalue.DataValueService; +import org.hisp.dhis.datavalue.DeflatedDataValue; +import org.hisp.dhis.expression.ExpressionService; +import org.hisp.dhis.minmax.MinMaxDataElement; +import org.hisp.dhis.minmax.MinMaxDataElementService; +import org.hisp.dhis.minmax.validation.MinMaxValuesGenerationService; +import org.hisp.dhis.options.SystemSettingManager; +import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.period.Period; +import org.hisp.dhis.system.filter.OrganisationUnitWithDataSetsFilter; +import org.hisp.dhis.system.util.FilterUtils; +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; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; + +/** + * @author mortenoh + */ +public class FormUtils +{ + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + private DataValueService dataValueService; + + public void setDataValueService( DataValueService dataValueService ) + { + this.dataValueService = dataValueService; + } + + private DataAnalysisService stdDevOutlierAnalysisService; + + public void setStdDevOutlierAnalysisService( DataAnalysisService stdDevOutlierAnalysisService ) + { + this.stdDevOutlierAnalysisService = stdDevOutlierAnalysisService; + } + + private DataAnalysisService minMaxOutlierAnalysisService; + + public void setMinMaxOutlierAnalysisService( DataAnalysisService minMaxOutlierAnalysisService ) + { + this.minMaxOutlierAnalysisService = minMaxOutlierAnalysisService; + } + + private SystemSettingManager systemSettingManager; + + public void setSystemSettingManager( SystemSettingManager systemSettingManager ) + { + this.systemSettingManager = systemSettingManager; + } + + private MinMaxValuesGenerationService minMaxValuesGenerationService; + + public void setMinMaxValuesGenerationService( MinMaxValuesGenerationService minMaxValuesGenerationService ) + { + this.minMaxValuesGenerationService = minMaxValuesGenerationService; + } + + private MinMaxDataElementService minMaxDataElementService; + + public void setMinMaxDataElementService( MinMaxDataElementService minMaxDataElementService ) + { + this.minMaxDataElementService = minMaxDataElementService; + } + + private ValidationRuleService validationRuleService; + + public void setValidationRuleService( ValidationRuleService validationRuleService ) + { + this.validationRuleService = validationRuleService; + } + + private ExpressionService expressionService; + + public void setExpressionService( ExpressionService expressionService ) + { + this.expressionService = expressionService; + } + + // ------------------------------------------------------------------------- + // Utils + // ------------------------------------------------------------------------- + + @SuppressWarnings( "unchecked" ) + public Map getValidationViolations( OrganisationUnit organisationUnit, DataSet dataSet, + Period period ) + { + Map validationErrorMap = new HashMap(); + + Collection minmaxs = minMaxDataElementService.getMinMaxDataElements( organisationUnit, + dataSet.getDataElements() ); + + Collection deflatedDataValues = new HashSet(); + + if ( minmaxs == null ) + { + Double factor = (Double) systemSettingManager.getSystemSetting( + SystemSettingManager.KEY_FACTOR_OF_DEVIATION, 2.0 ); + + Collection stdDevs = stdDevOutlierAnalysisService.analyse( organisationUnit, + dataSet.getDataElements(), ListUtils.getCollection( period ), factor ); + + Collection minMaxs = minMaxOutlierAnalysisService.analyse( organisationUnit, + dataSet.getDataElements(), ListUtils.getCollection( period ), null ); + + deflatedDataValues = CollectionUtils.union( stdDevs, minMaxs ); + } + else + { + deflatedDataValues = minMaxValuesGenerationService.findOutliers( organisationUnit, + ListUtils.getCollection( period ), minmaxs ); + } + + for ( DeflatedDataValue deflatedDataValue : deflatedDataValues ) + { + String key = String.format( "DE%dOC%d", deflatedDataValue.getDataElementId(), + deflatedDataValue.getCategoryOptionComboId() ); + validationErrorMap.put( key, deflatedDataValue ); + } + + return validationErrorMap; + } + + public List getValidationRuleViolations( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) + { + List validationRuleResults = new ArrayList( validationRuleService.validate( + dataSet, period, organisationUnit ) ); + + List validationRuleViolations = new ArrayList( validationRuleResults.size() ); + + for ( ValidationResult result : validationRuleResults ) + { + ValidationRule rule = result.getValidationRule(); + + StringBuffer sb = new StringBuffer(); + sb.append( expressionService.getExpressionDescription( rule.getLeftSide().getExpression() ) ); + sb.append( " " + rule.getOperator().getMathematicalOperator() + " " ); + sb.append( expressionService.getExpressionDescription( rule.getRightSide().getExpression() ) ); + + validationRuleViolations.add( sb.toString() ); + } + + return validationRuleViolations; + } + + public Map getDataValueMap( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) + { + Map dataValueMap = new HashMap(); + List values = new ArrayList( dataValueService.getDataValues( organisationUnit, period, + dataSet.getDataElements() ) ); + + for ( DataValue dataValue : values ) + { + DataElement dataElement = dataValue.getDataElement(); + DataElementCategoryOptionCombo optionCombo = dataValue.getOptionCombo(); + + String key = String.format( "DE%dOC%d", dataElement.getId(), optionCombo.getId() ); + String value = dataValue.getValue(); + + dataValueMap.put( key, value ); + } + + return dataValueMap; + } + + public List organisationUnitWithDataSetsFilter( Collection organisationUnits ) + { + List ous = new ArrayList( organisationUnits ); + FilterUtils.filter( ous, new OrganisationUnitWithDataSetsFilter() ); + + return ous; + } + + // ------------------------------------------------------------------------- + // Static Utils + // ------------------------------------------------------------------------- + + public static boolean isNumber( String value ) + { + try + { + Double.parseDouble( value ); + } + catch ( NumberFormatException e ) + { + return false; + } + + return true; + } + + public static boolean isInteger( String value ) + { + try + { + Integer.parseInt( value ); + } + catch ( NumberFormatException e ) + { + return false; + } + + return true; + } + + public static boolean isPositiveInteger( String value ) + { + return valueHigher( value, 0 ); + } + + public static boolean isNegativeInteger( String value ) + { + return valueLower( value, 0 ); + } + + public static boolean valueHigher( String value, int max ) + { + int integerValue; + + try + { + integerValue = Integer.parseInt( value ); + + if ( integerValue > max ) + { + return true; + } + } + catch ( NumberFormatException e ) + { + } + + return false; + } + + public static boolean valueLower( String value, int min ) + { + int integerValue; + + try + { + integerValue = Integer.parseInt( value ); + + if ( integerValue < min ) + { + return true; + } + } + catch ( NumberFormatException e ) + { + } + + return false; + } + + public static boolean isBoolean( String value ) + { + return value.equals( "true" ) || value.equals( "false" ); + } + + public static boolean isDate( String value ) + { + DateTimeFormatter sdf = ISODateTimeFormat.yearMonthDay(); + + try + { + sdf.parseDateTime( value ); + return true; + } + catch ( IllegalArgumentException e ) + { + } + + return false; + } +} === removed file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java 2011-10-26 11:49:43 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java 1970-01-01 00:00:00 +0000 @@ -1,322 +0,0 @@ -/* - * Copyright (c) 2004-2010, University of Oslo - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of the HISP project nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.hisp.dhis.light.dataentry.utils; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import org.apache.commons.collections.CollectionUtils; -import org.hisp.dhis.dataanalysis.DataAnalysisService; -import org.hisp.dhis.dataelement.DataElement; -import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; -import org.hisp.dhis.dataset.DataSet; -import org.hisp.dhis.datavalue.DataValue; -import org.hisp.dhis.datavalue.DataValueService; -import org.hisp.dhis.datavalue.DeflatedDataValue; -import org.hisp.dhis.expression.ExpressionService; -import org.hisp.dhis.minmax.MinMaxDataElement; -import org.hisp.dhis.minmax.MinMaxDataElementService; -import org.hisp.dhis.minmax.validation.MinMaxValuesGenerationService; -import org.hisp.dhis.options.SystemSettingManager; -import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.period.Period; -import org.hisp.dhis.system.filter.OrganisationUnitWithDataSetsFilter; -import org.hisp.dhis.system.util.FilterUtils; -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; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; - -/** - * @author mortenoh - */ -public class SectionFormUtils -{ - // ------------------------------------------------------------------------- - // Dependencies - // ------------------------------------------------------------------------- - - private DataValueService dataValueService; - - public void setDataValueService( DataValueService dataValueService ) - { - this.dataValueService = dataValueService; - } - - private DataAnalysisService stdDevOutlierAnalysisService; - - public void setStdDevOutlierAnalysisService( DataAnalysisService stdDevOutlierAnalysisService ) - { - this.stdDevOutlierAnalysisService = stdDevOutlierAnalysisService; - } - - private DataAnalysisService minMaxOutlierAnalysisService; - - public void setMinMaxOutlierAnalysisService( DataAnalysisService minMaxOutlierAnalysisService ) - { - this.minMaxOutlierAnalysisService = minMaxOutlierAnalysisService; - } - - private SystemSettingManager systemSettingManager; - - public void setSystemSettingManager( SystemSettingManager systemSettingManager ) - { - this.systemSettingManager = systemSettingManager; - } - - private MinMaxValuesGenerationService minMaxValuesGenerationService; - - public void setMinMaxValuesGenerationService( MinMaxValuesGenerationService minMaxValuesGenerationService ) - { - this.minMaxValuesGenerationService = minMaxValuesGenerationService; - } - - private MinMaxDataElementService minMaxDataElementService; - - public void setMinMaxDataElementService( MinMaxDataElementService minMaxDataElementService ) - { - this.minMaxDataElementService = minMaxDataElementService; - } - - private ValidationRuleService validationRuleService; - - public void setValidationRuleService( ValidationRuleService validationRuleService ) - { - this.validationRuleService = validationRuleService; - } - - private ExpressionService expressionService; - - public void setExpressionService( ExpressionService expressionService ) - { - this.expressionService = expressionService; - } - - // ------------------------------------------------------------------------- - // Utils - // ------------------------------------------------------------------------- - - @SuppressWarnings( "unchecked" ) - public Map getValidationViolations( OrganisationUnit organisationUnit, DataSet dataSet, - Period period ) - { - Map validationErrorMap = new HashMap(); - - Collection minmaxs = minMaxDataElementService.getMinMaxDataElements( organisationUnit, - dataSet.getDataElements() ); - - Collection deflatedDataValues = new HashSet(); - - if ( minmaxs == null ) - { - Double factor = (Double) systemSettingManager.getSystemSetting( - SystemSettingManager.KEY_FACTOR_OF_DEVIATION, 2.0 ); - - Collection stdDevs = stdDevOutlierAnalysisService.analyse( organisationUnit, - dataSet.getDataElements(), ListUtils.getCollection( period ), factor ); - - Collection minMaxs = minMaxOutlierAnalysisService.analyse( organisationUnit, - dataSet.getDataElements(), ListUtils.getCollection( period ), null ); - - deflatedDataValues = CollectionUtils.union( stdDevs, minMaxs ); - } - else - { - deflatedDataValues = minMaxValuesGenerationService.findOutliers( organisationUnit, - ListUtils.getCollection( period ), minmaxs ); - } - - for ( DeflatedDataValue deflatedDataValue : deflatedDataValues ) - { - String key = String.format( "DE%dOC%d", deflatedDataValue.getDataElementId(), - deflatedDataValue.getCategoryOptionComboId() ); - validationErrorMap.put( key, deflatedDataValue ); - } - - return validationErrorMap; - } - - public List getValidationRuleViolations( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) - { - List validationRuleResults = new ArrayList( validationRuleService.validate( - dataSet, period, organisationUnit ) ); - - List validationRuleViolations = new ArrayList( validationRuleResults.size() ); - - for ( ValidationResult result : validationRuleResults ) - { - ValidationRule rule = result.getValidationRule(); - - StringBuffer sb = new StringBuffer(); - sb.append( expressionService.getExpressionDescription( rule.getLeftSide().getExpression() ) ); - sb.append( " " + rule.getOperator().getMathematicalOperator() + " " ); - sb.append( expressionService.getExpressionDescription( rule.getRightSide().getExpression() ) ); - - validationRuleViolations.add( sb.toString() ); - } - - return validationRuleViolations; - } - - public Map getDataValueMap( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) - { - Map dataValueMap = new HashMap(); - List values = new ArrayList( dataValueService.getDataValues( organisationUnit, period, - dataSet.getDataElements() ) ); - - for ( DataValue dataValue : values ) - { - DataElement dataElement = dataValue.getDataElement(); - DataElementCategoryOptionCombo optionCombo = dataValue.getOptionCombo(); - - String key = String.format( "DE%dOC%d", dataElement.getId(), optionCombo.getId() ); - String value = dataValue.getValue(); - - dataValueMap.put( key, value ); - } - - return dataValueMap; - } - - public List organisationUnitWithDataSetsFilter( Collection organisationUnits ) - { - List ous = new ArrayList( organisationUnits ); - FilterUtils.filter( ous, new OrganisationUnitWithDataSetsFilter() ); - - return ous; - } - - // ------------------------------------------------------------------------- - // Static Utils - // ------------------------------------------------------------------------- - - public static boolean isNumber( String value ) - { - try - { - Double.parseDouble( value ); - } - catch ( NumberFormatException e ) - { - return false; - } - - return true; - } - - public static boolean isInteger( String value ) - { - try - { - Integer.parseInt( value ); - } - catch ( NumberFormatException e ) - { - return false; - } - - return true; - } - - public static boolean isPositiveInteger( String value ) - { - return valueHigher( value, 0 ); - } - - public static boolean isNegativeInteger( String value ) - { - return valueLower( value, 0 ); - } - - public static boolean valueHigher( String value, int max ) - { - int integerValue; - - try - { - integerValue = Integer.parseInt( value ); - - if ( integerValue > max ) - { - return true; - } - } - catch ( NumberFormatException e ) - { - } - - return false; - } - - public static boolean valueLower( String value, int min ) - { - int integerValue; - - try - { - integerValue = Integer.parseInt( value ); - - if ( integerValue < min ) - { - return true; - } - } - catch ( NumberFormatException e ) - { - } - - return false; - } - - public static boolean isBoolean( String value ) - { - return value.equals( "true" ) || value.equals( "false" ); - } - - public static boolean isDate( String value ) - { - DateTimeFormatter sdf = ISODateTimeFormat.yearMonthDay(); - - try - { - sdf.parseDateTime( value ); - return true; - } - catch ( IllegalArgumentException e ) - { - } - - return false; - } -} === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml 2011-11-01 15:01:22 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml 2011-11-01 18:28:36 +0000 @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@ - + - + - + - + === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectOrganisationUnit.vm' --- dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectOrganisationUnit.vm 2011-10-24 12:18:38 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectOrganisationUnit.vm 2011-11-01 18:28:36 +0000 @@ -8,7 +8,7 @@
  • $!encoder.htmlEncode( ${organisationUnit.name} )
  • #else #if( $organisationUnit.children.size() > 0 ) - #set( $children = $sectionFormUtils.organisationUnitWithDataSetsFilter( $organisationUnit.children ) ) + #set( $children = $formUtils.organisationUnitWithDataSetsFilter( $organisationUnit.children ) ) #if( $organisationUnit.dataSets.size() > 0 )
  • $!encoder.htmlEncode( ${organisationUnit.name} )
  • === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectPeriod.vm' --- dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectPeriod.vm 2011-11-01 15:01:22 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/selectPeriod.vm 2011-11-01 18:28:36 +0000 @@ -6,9 +6,9 @@

    Successfully Saved

    #if( $complete ) - Marked DataSet $dataSet.name as complete
    + DataSet $dataSet.name was saved and completed
    #else - Saved data set $dataSet.name
    + DataSet $dataSet.name was saved
    #end