=== 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 2013-10-16 12:39:47 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRule.java 2013-11-09 18:01:52 +0000 @@ -246,6 +246,22 @@ { return RULE_TYPE_VALIDATION.equals( ruleType ) ? null : rightSide.getDataElementsInExpression(); } + + /** + * Indicates whether this validation rule has user roles to alert. + */ + public boolean hasUserRolesToAlert() + { + for ( ValidationRuleGroup group : groups ) + { + if ( group.hasUserRolesToAlert() ) + { + return true; + } + } + + return false; + } // ------------------------------------------------------------------------- // Set and get methods === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleGroup.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleGroup.java 2013-09-27 17:05:36 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleGroup.java 2013-11-09 18:01:52 +0000 @@ -28,12 +28,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import java.util.HashSet; +import java.util.Set; import org.hisp.dhis.common.BaseIdentifiableObject; import org.hisp.dhis.common.DxfNamespaces; @@ -43,8 +39,12 @@ import org.hisp.dhis.common.view.ExportView; import org.hisp.dhis.user.UserAuthorityGroup; -import java.util.HashSet; -import java.util.Set; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; /** * @author Lars Helge Overland @@ -65,8 +65,6 @@ private Set userAuthorityGroupsToAlert = new HashSet(); - - // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- @@ -102,6 +100,14 @@ { members.clear(); } + + /** + * Indicates whether this group has user roles to alert. + */ + public boolean hasUserRolesToAlert() + { + return userAuthorityGroupsToAlert != null && !userAuthorityGroupsToAlert.isEmpty(); + } // ------------------------------------------------------------------------- // Getters and setters === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/DefaultValidationRuleService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/DefaultValidationRuleService.java 2013-11-08 23:17:37 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/DefaultValidationRuleService.java 2013-11-09 18:01:52 +0000 @@ -188,7 +188,9 @@ if ( sendAlerts ) { - postAlerts( results, new Date() ); + Set resultsToAlert = new HashSet( results ); + FilterUtils.filter( resultsToAlert, new ValidationResultToAlertFilter() ); + postAlerts( resultsToAlert, new Date() ); } return results; @@ -289,9 +291,7 @@ for ( ValidationRuleGroup validationRuleGroup : getAllValidationRuleGroups() ) { - Set userRolesToAlert = validationRuleGroup.getUserAuthorityGroupsToAlert(); - - if ( userRolesToAlert != null && !userRolesToAlert.isEmpty() ) + if ( validationRuleGroup.hasUserRolesToAlert() ) { rules.addAll( validationRuleGroup.getMembers() ); } === added file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationResultToAlertFilter.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationResultToAlertFilter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationResultToAlertFilter.java 2013-11-09 18:01:52 +0000 @@ -0,0 +1,41 @@ +package org.hisp.dhis.validation; + +/* + * Copyright (c) 2004-2013, 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. + */ + +import org.hisp.dhis.system.util.Filter; + +public class ValidationResultToAlertFilter + implements Filter +{ + @Override + public boolean retain( ValidationResult result ) + { + return result != null && result.getValidationRule() != null && result.getValidationRule().hasUserRolesToAlert(); + } +}