← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1942: Merge trunk r2009

 

Merge authors:
  Lars <larshelg@larshelg-laptop>
------------------------------------------------------------
revno: 1942 [merge]
committer: Jo Størset <storset@xxxxxxxxx>
branch nick: cbhis-mobile
timestamp: Fri 2010-10-22 12:20:26 +0530
message:
  Merge trunk r2009
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java
  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/hibernate/HibernateValidationRuleStore.java
  dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataset/DataSetServiceTest.java
  dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/validation/ValidationRuleStoreTest.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetStore.java	2010-10-22 06:48:39 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetStore.java	2010-10-22 06:50:26 +0000
@@ -120,7 +120,7 @@
      */
     Collection<DataSet> getDataSetsForMobile();
 
-    Collection<DataSet> getDataSetsBySources( Collection<Source> sources );
+    Collection<DataSet> getDataSetsBySources( Collection<? extends Source> sources );
     
     // -------------------------------------------------------------------------
     // FrequencyOverrideAssociation

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleService.java	2010-05-28 19:17:07 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleService.java	2010-08-30 13:04:39 +0000
@@ -30,6 +30,7 @@
 import java.util.Collection;
 import java.util.Date;
 
+import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataset.DataSet;
 import org.hisp.dhis.period.Period;
 import org.hisp.dhis.source.Source;
@@ -143,6 +144,8 @@
      */
     ValidationRule getValidationRuleByName( String name );
     
+    Collection<ValidationRule> getValidationRulesByDataElements( Collection<DataElement> dataElements );
+    
     // -------------------------------------------------------------------------
     // ValidationRuleGroup
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleStore.java	2010-05-28 19:17:07 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/validation/ValidationRuleStore.java	2010-08-30 13:04:39 +0000
@@ -27,7 +27,10 @@
 
 package org.hisp.dhis.validation;
 
+import java.util.Collection;
+
 import org.hisp.dhis.common.GenericIdentifiableObjectStore;
+import org.hisp.dhis.dataelement.DataElement;
 
 /**
  * @author Chau Thu Tran
@@ -57,4 +60,6 @@
      * @return the generated unique identifier for the ValidationRule.
      */
     void updateValidationRule( ValidationRule validationRule );
+    
+    Collection<ValidationRule> getValidationRulesByDataElements( Collection<DataElement> dataElements );
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java	2010-10-22 06:48:39 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java	2010-10-22 06:50:26 +0000
@@ -155,7 +155,7 @@
 
     public Collection<DataSet> getDataSetsBySources( Collection<? extends Source> sources )
     {
-        return getDataSetsBySources( sources );
+        return i18n( i18nService, dataSetStore.getDataSetsBySources( sources ) );
     }
 
     public int getSourcesAssociatedWithDataSet( DataSet dataSet, Collection<? extends Source> sources )

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java	2010-10-22 06:48:39 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java	2010-10-22 06:50:26 +0000
@@ -167,7 +167,7 @@
     }
 
     @SuppressWarnings( "unchecked" )
-    public Collection<DataSet> getDataSetsBySources( Collection<Source> sources )
+    public Collection<DataSet> getDataSetsBySources( Collection<? extends Source> sources )
     {
         String hql = "select distinct d from DataSet d join d.sources s where s.id in (:ids)";
         

=== 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	2010-08-30 07:50:48 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/DefaultValidationRuleService.java	2010-08-30 13:04:39 +0000
@@ -350,6 +350,11 @@
     {
         return validationRuleStore.getByName( name );
     }
+    
+    public Collection<ValidationRule> getValidationRulesByDataElements( Collection<DataElement> dataElements )
+    {
+        return validationRuleStore.getValidationRulesByDataElements( dataElements );
+    }
 
     // -------------------------------------------------------------------------
     // ValidationRuleGroup CRUD operations

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/hibernate/HibernateValidationRuleStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/hibernate/HibernateValidationRuleStore.java	2010-05-28 19:17:07 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/hibernate/HibernateValidationRuleStore.java	2010-08-30 13:04:39 +0000
@@ -27,10 +27,16 @@
 
 package org.hisp.dhis.validation.hibernate;
 
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
 import org.hibernate.Session;
+import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.hibernate.HibernateGenericStore;
 import org.hisp.dhis.period.PeriodStore;
 import org.hisp.dhis.period.PeriodType;
+import org.hisp.dhis.system.util.ConversionUtils;
 import org.hisp.dhis.validation.ValidationRule;
 import org.hisp.dhis.validation.ValidationRuleStore;
 
@@ -81,4 +87,23 @@
 
         session.update( validationRule );
     }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Collection<ValidationRule> getValidationRulesByDataElements( Collection<DataElement> dataElements )
+    {
+        Set<ValidationRule> validationRules = new HashSet<ValidationRule>();
+        
+        Collection<Integer> ids = ConversionUtils.getIdentifiers( DataElement.class, dataElements );
+        
+        String hql = "select distinct v from ValidationRule v join v.leftSide ls join ls.dataElementsInExpression lsd where lsd.id in (:ids)";
+        
+        validationRules.addAll( sessionFactory.getCurrentSession().createQuery( hql ).setParameterList( "ids", ids ).list() );
+        
+        hql = "select distinct v from ValidationRule v join v.rightSide rs join rs.dataElementsInExpression rsd where rsd.id in (:ids)";
+
+        validationRules.addAll( sessionFactory.getCurrentSession().createQuery( hql ).setParameterList( "ids", ids ).list() );
+        
+        return validationRules;
+    }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataset/DataSetServiceTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataset/DataSetServiceTest.java	2010-04-12 21:23:33 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataset/DataSetServiceTest.java	2010-08-30 13:04:39 +0000
@@ -36,14 +36,10 @@
 import java.util.HashSet;
 
 import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.mock.MockSource;
-import org.hisp.dhis.period.MonthlyPeriodType;
-import org.hisp.dhis.period.PeriodStore;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.period.PeriodType;
-import org.hisp.dhis.period.WeeklyPeriodType;
-import org.hisp.dhis.period.YearlyPeriodType;
 import org.hisp.dhis.source.Source;
-import org.hisp.dhis.source.SourceStore;
 import org.junit.Test;
 
 /**
@@ -53,12 +49,8 @@
 public class DataSetServiceTest
     extends DhisSpringTest
 {
-    private PeriodStore periodStore;
-
     private DataSetService dataSetService;
 
-    private SourceStore sourceStore;
-
     private PeriodType periodType;
 
     @Override
@@ -67,9 +59,7 @@
     {
         dataSetService = (DataSetService) getBean( DataSetService.ID );
 
-        periodStore = (PeriodStore) getBean( PeriodStore.ID );
-
-        sourceStore = (SourceStore) getBean( SourceStore.ID );
+        organisationUnitService = (OrganisationUnitService) getBean( OrganisationUnitService.ID );
         
         periodType = PeriodType.getAvailablePeriodTypes().iterator().next();
     }
@@ -200,13 +190,13 @@
     @Test
     public void testGetDataSetsBySource()
     {
-        Source sourceA = new MockSource( "A" );
-        Source sourceB = new MockSource( "B" );
-        Source sourceC = new MockSource( "C" );
+        OrganisationUnit sourceA = createOrganisationUnit( 'A' );
+        OrganisationUnit sourceB = createOrganisationUnit( 'B' );
+        OrganisationUnit sourceC = createOrganisationUnit( 'C' );
         
-        sourceStore.addSource( sourceA );
-        sourceStore.addSource( sourceB );
-        sourceStore.addSource( sourceC );
+        organisationUnitService.addOrganisationUnit( sourceA );
+        organisationUnitService.addOrganisationUnit( sourceB );
+        organisationUnitService.addOrganisationUnit( sourceC );
         
         DataSet dataSetA = createDataSet( 'A', periodType );
         DataSet dataSetB = createDataSet( 'B', periodType );
@@ -247,30 +237,21 @@
     @Test
     public void testGetDataSetsBySources()
     {
-        Source sourceA = new MockSource( "A" );
-        Source sourceB = new MockSource( "B" );
-        Source sourceC = new MockSource( "C" );
-        Source sourceD = new MockSource( "D" );
-        
-        sourceStore.addSource( sourceA );
-        sourceStore.addSource( sourceB );
-        sourceStore.addSource( sourceC );
-        sourceStore.addSource( sourceD );
-        
+        OrganisationUnit unitA = createOrganisationUnit( 'A' );
+        OrganisationUnit unitB = createOrganisationUnit( 'B' );  
+        OrganisationUnit unitC = createOrganisationUnit( 'C' );  
+        organisationUnitService.addOrganisationUnit( unitA );
+        organisationUnitService.addOrganisationUnit( unitB );
+        organisationUnitService.addOrganisationUnit( unitC );
+
         DataSet dataSetA = createDataSet( 'A', periodType );
         DataSet dataSetB = createDataSet( 'B', periodType );
         DataSet dataSetC = createDataSet( 'C', periodType );
         DataSet dataSetD = createDataSet( 'D', periodType );
-        
-        dataSetA.getSources().add( sourceA );
-        dataSetA.getSources().add( sourceB );
-        
-        dataSetB.getSources().add( sourceB );
-        dataSetB.getSources().add( sourceC );        
-
-        dataSetC.getSources().add( sourceC );
-        
-        dataSetD.getSources().add( sourceD );
+        dataSetA.getSources().add( unitA );
+        dataSetA.getSources().add( unitB );
+        dataSetB.getSources().add( unitA );
+        dataSetC.getSources().add( unitB );
         
         dataSetService.addDataSet( dataSetA );
         dataSetService.addDataSet( dataSetB );
@@ -278,45 +259,42 @@
         dataSetService.addDataSet( dataSetD );
         
         Collection<Source> sources = new HashSet<Source>();
-        
-        sources.add( sourceA );
-        sources.add( sourceD );        
+        sources.add( unitA );
+        sources.add( unitB );
         
         Collection<DataSet> dataSets = dataSetService.getDataSetsBySources( sources );
-        
-        assertEquals( 2, dataSets.size() );
+
+        assertEquals( 3, dataSets.size() );
         assertTrue( dataSets.contains( dataSetA ) );
-        assertTrue( dataSets.contains( dataSetD ) );
-        
-        sources.clear();
-        
-        sources.add( sourceB );
-        sources.add( sourceC );
+        assertTrue( dataSets.contains( dataSetB ) );
+        assertTrue( dataSets.contains( dataSetC ) );
 
+        sources = new HashSet<Source>();
+        sources.add( unitA );
+        
         dataSets = dataSetService.getDataSetsBySources( sources );
         
-        assertEquals( 3, dataSets.size() );
+        assertEquals( 2, dataSets.size() );
         assertTrue( dataSets.contains( dataSetA ) );
         assertTrue( dataSets.contains( dataSetB ) );
-        assertTrue( dataSets.contains( dataSetC ) );        
     }
-
+    
     @Test
     public void testGetSourcesAssociatedWithDataSet()
     {
-        Source sourceA = new MockSource( "A" );
-        Source sourceB = new MockSource( "B" );
-        Source sourceC = new MockSource( "C" );
-        Source sourceD = new MockSource( "D" );
-        Source sourceE = new MockSource( "E" );
-        Source sourceF = new MockSource( "F" );
+        OrganisationUnit sourceA = createOrganisationUnit( 'A' );
+        OrganisationUnit sourceB = createOrganisationUnit( 'B' );
+        OrganisationUnit sourceC = createOrganisationUnit( 'C' );
+        OrganisationUnit sourceD = createOrganisationUnit( 'D' );
+        OrganisationUnit sourceE = createOrganisationUnit( 'E' );
+        OrganisationUnit sourceF = createOrganisationUnit( 'F' );
         
-        sourceStore.addSource( sourceA );
-        sourceStore.addSource( sourceB );
-        sourceStore.addSource( sourceC );
-        sourceStore.addSource( sourceD );
-        sourceStore.addSource( sourceE );
-        sourceStore.addSource( sourceF );
+        organisationUnitService.addOrganisationUnit( sourceA );
+        organisationUnitService.addOrganisationUnit( sourceB );
+        organisationUnitService.addOrganisationUnit( sourceC );
+        organisationUnitService.addOrganisationUnit( sourceD );
+        organisationUnitService.addOrganisationUnit( sourceE );
+        organisationUnitService.addOrganisationUnit( sourceF );
         
         DataSet dataSetA = createDataSet( 'A', periodType );
         DataSet dataSetB = createDataSet( 'B', periodType );
@@ -342,54 +320,4 @@
         assertEquals( 2, dataSetService.getSourcesAssociatedWithDataSet( dataSetA, sources ) );
         assertEquals( 2, dataSetService.getSourcesAssociatedWithDataSet( dataSetB, sources ) );
     }
-        
-    // -------------------------------------------------------------------------
-    // FrequencyOverrideAssociation
-    // -------------------------------------------------------------------------
-
-    @Test
-    public void testFrequencyOverrideAssociation()
-        throws Exception
-    {
-        PeriodType periodType1 = periodStore.getPeriodType( YearlyPeriodType.class );
-        PeriodType periodType2 = periodStore.getPeriodType( MonthlyPeriodType.class );
-        PeriodType periodType3 = periodStore.getPeriodType( WeeklyPeriodType.class );
-
-        DataSet dataSet1 = new DataSet( "name1", periodType1 );
-        DataSet dataSet2 = new DataSet( "name2", periodType2 );
-
-        dataSetService.addDataSet( dataSet1 );
-        dataSetService.addDataSet( dataSet2 );
-
-        Source source1 = new MockSource( "Source1" );
-        Source source2 = new MockSource( "Source2" );
-        sourceStore.addSource( source1 );
-        sourceStore.addSource( source2 );
-
-        FrequencyOverrideAssociation association = new FrequencyOverrideAssociation( dataSet1, source1, periodType3 );
-        
-        dataSetService.addFrequencyOverrideAssociation( association );        
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 0 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 0 );
-        
-        dataSetService.addFrequencyOverrideAssociation( new FrequencyOverrideAssociation( dataSet1, source2, periodType3 ) );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 2 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 0 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );
-        
-        dataSetService.addFrequencyOverrideAssociation( new FrequencyOverrideAssociation( dataSet2, source1, periodType3 ) );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 2 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 2 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );
-        
-        dataSetService.deleteFrequencyOverrideAssociation( association );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 1 );
-        assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );
-    }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/validation/ValidationRuleStoreTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/validation/ValidationRuleStoreTest.java	2010-07-01 10:08:55 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/validation/ValidationRuleStoreTest.java	2010-08-30 13:04:39 +0000
@@ -37,14 +37,11 @@
 import java.util.Set;
 
 import org.hisp.dhis.DhisTest;
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementService;
 import org.hisp.dhis.expression.Expression;
 import org.hisp.dhis.expression.ExpressionService;
-
 import org.hisp.dhis.period.PeriodType;
-
 import org.junit.Test;
 
 /**
@@ -52,11 +49,10 @@
  * @version $Id: ValidationRuleStoreTest.java 3679 2007-10-22 18:25:18Z larshelg
  *          $
  */
-@SuppressWarnings( "unchecked" )
 public class ValidationRuleStoreTest
     extends DhisTest
 {
-    private GenericIdentifiableObjectStore<ValidationRule> validationRuleStore;
+    private ValidationRuleStore validationRuleStore;
 
     private ExpressionService expressionService;
 
@@ -84,7 +80,7 @@
     public void setUpTest()
         throws Exception
     {
-        validationRuleStore = (GenericIdentifiableObjectStore<ValidationRule>) getBean( "org.hisp.dhis.validation.ValidationRuleStore" );
+        validationRuleStore = (ValidationRuleStore) getBean( ValidationRuleStore.ID );
 
         dataElementService = (DataElementService) getBean( DataElementService.ID );
 
@@ -132,7 +128,7 @@
         ValidationRule validationRule = createValidationRule( 'A', ValidationRule.OPERATOR_EQUAL, expressionA,
             expressionB, periodType );
 
-        int id = validationRuleStore.save( validationRule );
+        int id = validationRuleStore.saveValidationRule( validationRule );
 
         validationRule = validationRuleStore.get( id );
 
@@ -151,7 +147,7 @@
         ValidationRule validationRule = createValidationRule( 'A', ValidationRule.OPERATOR_EQUAL, expressionA,
             expressionB, periodType );
 
-        int id = validationRuleStore.save( validationRule );
+        int id = validationRuleStore.saveValidationRule( validationRule );
 
         validationRule = validationRuleStore.get( id );
 
@@ -165,7 +161,7 @@
         validationRule.setType( ValidationRule.TYPE_STATISTICAL );
         validationRule.setOperator( ValidationRule.OPERATOR_GREATER );
 
-        validationRuleStore.update( validationRule );
+        validationRuleStore.updateValidationRule( validationRule );
 
         validationRule = validationRuleStore.get( id );
 
@@ -183,8 +179,8 @@
         ValidationRule validationRuleB = createValidationRule( 'B', ValidationRule.OPERATOR_EQUAL, expressionA,
             expressionB, periodType );
 
-        int idA = validationRuleStore.save( validationRuleA );
-        int idB = validationRuleStore.save( validationRuleB );
+        int idA = validationRuleStore.saveValidationRule( validationRuleA );
+        int idB = validationRuleStore.saveValidationRule( validationRuleB );
 
         assertNotNull( validationRuleStore.get( idA ) );
         assertNotNull( validationRuleStore.get( idB ) );
@@ -212,8 +208,8 @@
         ValidationRule validationRuleB = createValidationRule( 'B', ValidationRule.OPERATOR_EQUAL, expressionA,
             expressionB, periodType );
 
-        validationRuleStore.save( validationRuleA );
-        validationRuleStore.save( validationRuleB );
+        validationRuleStore.saveValidationRule( validationRuleA );
+        validationRuleStore.saveValidationRule( validationRuleB );
 
         Collection<ValidationRule> rules = validationRuleStore.getAll();
 
@@ -230,12 +226,65 @@
         ValidationRule validationRuleB = createValidationRule( 'B', ValidationRule.OPERATOR_EQUAL, expressionA,
             expressionB, periodType );
 
-        int id = validationRuleStore.save( validationRuleA );
-        validationRuleStore.save( validationRuleB );
+        int id = validationRuleStore.saveValidationRule( validationRuleA );
+        validationRuleStore.saveValidationRule( validationRuleB );
 
         ValidationRule rule = validationRuleStore.getByName( "ValidationRuleA" );
 
         assertEquals( rule.getId(), id );
         assertEquals( rule.getName(), "ValidationRuleA" );
     }
+    
+    @Test
+    public void testGetValidationRulesByDataElements()
+    {
+        Set<DataElement> dataElementsA = new HashSet<DataElement>();
+        dataElementsA.add( dataElementA );
+        dataElementsA.add( dataElementB );
+
+        Set<DataElement> dataElementsB = new HashSet<DataElement>();
+        dataElementsB.add( dataElementC );
+        dataElementsB.add( dataElementD );
+
+        Set<DataElement> dataElementsC = new HashSet<DataElement>();
+        
+        Set<DataElement> dataElementsD = new HashSet<DataElement>();
+        dataElementsD.addAll( dataElementsA );
+        dataElementsD.addAll( dataElementsB );        
+        
+        Expression expression1 = new Expression( "Expression1", "Expression1", dataElementsA );
+        Expression expression2 = new Expression( "Expression2", "Expression2", dataElementsB );
+        Expression expression3 = new Expression( "Expression3", "Expression3", dataElementsC );
+        
+        expressionService.addExpression( expression1 );
+        expressionService.addExpression( expression2 );
+        expressionService.addExpression( expression3 );
+        
+        ValidationRule ruleA = createValidationRule( 'A', ValidationRule.OPERATOR_EQUAL, expression1, expression3, periodType );
+        ValidationRule ruleB = createValidationRule( 'B', ValidationRule.OPERATOR_EQUAL, expression2, expression3, periodType );
+        ValidationRule ruleC = createValidationRule( 'C', ValidationRule.OPERATOR_EQUAL, expression3, expression3, periodType );
+
+        validationRuleStore.saveValidationRule( ruleA );
+        validationRuleStore.saveValidationRule( ruleB );
+        validationRuleStore.saveValidationRule( ruleC );
+        
+        Collection<ValidationRule> rules = validationRuleStore.getValidationRulesByDataElements( dataElementsA );
+        
+        assertNotNull( rules );
+        assertEquals( 1, rules.size() );
+        assertTrue( rules.contains( ruleA ) );
+
+        rules = validationRuleStore.getValidationRulesByDataElements( dataElementsB );
+        
+        assertNotNull( rules );
+        assertEquals( 1, rules.size() );
+        assertTrue( rules.contains( ruleB ) );
+
+        rules = validationRuleStore.getValidationRulesByDataElements( dataElementsD );
+        
+        assertNotNull( rules );
+        assertEquals( 2, rules.size() );
+        assertTrue( rules.contains( ruleA ) );
+        assertTrue( rules.contains( ruleB ) );
+    }
 }