← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 18592: Refactor of event search. Using EventSearchParams class instead of method arguments. Centralizing...

 

------------------------------------------------------------
revno: 18592
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2015-03-12 12:03:32 +0100
message:
  Refactor of event search. Using EventSearchParams class instead of method arguments. Centralizing input parameter handling to service method getFromUrl.
added:
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventSearchParams.java
modified:
  dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventService.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventStore.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/AbstractEventRowService.java
  dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/EventRowService.java
  dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationMultiEventsServiceTest.java
  dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.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-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java	2015-03-05 15:38:58 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java	2015-03-12 11:03:32 +0000
@@ -50,6 +50,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
 import org.hisp.dhis.analytics.AggregationType;
 import org.hisp.dhis.analytics.AnalyticsSecurityManager;
 import org.hisp.dhis.analytics.AnalyticsService;
@@ -394,7 +395,7 @@
 
         ProgramStage ps = programStageService.getProgramStage( stage );
 
-        if ( stage != null && !stage.isEmpty() && ps == null )
+        if ( StringUtils.isNotEmpty( stage ) && ps == null )
         {
             throw new IllegalQueryException( "Program stage is specified but does not exist: " + stage );
         }

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/AbstractEventService.java	2015-03-12 11:03:32 +0000
@@ -40,12 +40,14 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.hibernate.SessionFactory;
 import org.hisp.dhis.common.CodeGenerator;
 import org.hisp.dhis.common.IdentifiableObjectManager;
 import org.hisp.dhis.common.IdentifiableProperty;
+import org.hisp.dhis.common.IllegalQueryException;
 import org.hisp.dhis.common.OrganisationUnitSelectionMode;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementService;
@@ -87,7 +89,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -131,6 +132,9 @@
 
     @Autowired
     protected TrackedEntityInstanceService entityInstanceService;
+    
+    @Autowired
+    private org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService trackedEntityInstanceService;
 
     @Autowired
     protected TrackedEntityCommentService commentService;
@@ -394,19 +398,14 @@
     // -------------------------------------------------------------------------
 
     @Override
-    public Events getEvents( Program program, OrganisationUnit organisationUnit, OrganisationUnitSelectionMode orgUnitSelectionMode )
-    {
-        return getEvents( program, null, null, null, organisationUnit, orgUnitSelectionMode, null, null, null, null, null, null );
-    }
-
-    @Override
-    public Events getEvents( Program program, ProgramStage programStage, ProgramStatus programStatus, Boolean followUp, OrganisationUnit orgUnit, 
-        OrganisationUnitSelectionMode orgUnitSelectionMode, TrackedEntityInstance trackedEntityInstance, 
-        Date startDate, Date endDate, EventStatus status, Date lastUpdated, IdSchemes idSchemes )
+    public Events getEvents( EventSearchParams params )
     {
         List<OrganisationUnit> organisationUnits = new ArrayList<>();
         
-        if ( orgUnit != null )
+        OrganisationUnit orgUnit = params.getOrgUnit();
+        OrganisationUnitSelectionMode orgUnitSelectionMode = params.getOrgUnitSelectionMode();
+        
+        if ( params.getOrgUnit() != null )
         {
             if ( OrganisationUnitSelectionMode.DESCENDANTS.equals( orgUnitSelectionMode ) )
             {
@@ -423,15 +422,60 @@
             }
         }
 
-        List<Event> eventList = eventStore.getEvents( program, programStage, programStatus, followUp, organisationUnits,
-            trackedEntityInstance, startDate, endDate, status, lastUpdated, idSchemes );
+        List<Event> eventList = eventStore.getEvents( params, organisationUnits );
 
         Events events = new Events();
         events.setEvents( eventList );
 
         return events;
     }
-
+    
+    public EventSearchParams getFromUrl( String program, String programStage, ProgramStatus programStatus, Boolean followUp, String orgUnit,
+        OrganisationUnitSelectionMode orgUnitSelectionMode, String trackedEntityInstance, Date startDate, Date endDate, 
+        EventStatus status, Date lastUpdated, IdSchemes idSchemes )
+    {
+        EventSearchParams params = new EventSearchParams();
+
+        Program pr = programService.getProgram( program );
+
+        if ( StringUtils.isNotEmpty( program ) && pr == null )
+        {
+            throw new IllegalQueryException( "Program is specified but does not exist: " + program );
+        }
+
+        ProgramStage ps = programStageService.getProgramStage( programStage );
+
+        if ( StringUtils.isNotEmpty( programStage ) && ps == null )
+        {
+            throw new IllegalQueryException( "Program stage is specified but does not exist: " + programStage );
+        }
+
+        OrganisationUnit ou = organisationUnitService.getOrganisationUnit( orgUnit );
+        
+        if ( StringUtils.isNotEmpty( orgUnit ) && ou == null )
+        {
+            throw new IllegalQueryException( "Org unit is specified but does not exist: " + orgUnit );
+        }
+        
+        TrackedEntityInstance tei = trackedEntityInstanceService.getTrackedEntityInstance( trackedEntityInstance );
+        
+        if ( StringUtils.isNotEmpty( trackedEntityInstance ) && tei == null )
+        {
+            throw new IllegalQueryException( "Tracked entity instance is specified but does not exist: " + trackedEntityInstance );
+        }
+        
+        params.setProgramStatus( programStatus );
+        params.setFollowUp( followUp );
+        params.setOrgUnitSelectionMode( orgUnitSelectionMode );
+        params.setStartDate( startDate );
+        params.setEndDate( endDate );
+        params.setEventStatus( status );
+        params.setLastUpdated( lastUpdated );
+        params.setIdSchemes( idSchemes );
+        
+        return params;
+    }
+    
     @Override
     public Event getEvent( String uid )
     {

=== added file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventSearchParams.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventSearchParams.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventSearchParams.java	2015-03-12 11:03:32 +0000
@@ -0,0 +1,202 @@
+package org.hisp.dhis.dxf2.events.event;
+
+/*
+ * Copyright (c) 2004-2015, 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 java.util.Date;
+
+import org.hisp.dhis.common.OrganisationUnitSelectionMode;
+import org.hisp.dhis.dxf2.common.IdSchemes;
+import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
+import org.hisp.dhis.event.EventStatus;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.program.Program;
+import org.hisp.dhis.program.ProgramStage;
+import org.hisp.dhis.program.ProgramStatus;
+
+/**
+ * @author Lars Helge Overland
+ */
+public class EventSearchParams
+{
+    private Program program;
+    
+    private ProgramStage programStage;
+    
+    private ProgramStatus programStatus;
+    
+    private Boolean followUp;
+    
+    private OrganisationUnit orgUnit;
+    
+    private OrganisationUnitSelectionMode orgUnitSelectionMode;
+    
+    private TrackedEntityInstance trackedEntityInstance;
+    
+    private Date startDate;
+    
+    private Date endDate;
+    
+    private EventStatus eventStatus;
+    
+    private Date lastUpdated;
+    
+    private IdSchemes idSchemes;
+
+    // -------------------------------------------------------------------------
+    // Constructors
+    // -------------------------------------------------------------------------
+
+    public EventSearchParams()
+    {
+    }
+
+    // -------------------------------------------------------------------------
+    // Getters and setters
+    // -------------------------------------------------------------------------
+
+    public Program getProgram()
+    {
+        return program;
+    }
+
+    public void setProgram( Program program )
+    {
+        this.program = program;
+    }
+
+    public ProgramStage getProgramStage()
+    {
+        return programStage;
+    }
+
+    public void setProgramStage( ProgramStage programStage )
+    {
+        this.programStage = programStage;
+    }
+
+    public ProgramStatus getProgramStatus()
+    {
+        return programStatus;
+    }
+
+    public void setProgramStatus( ProgramStatus programStatus )
+    {
+        this.programStatus = programStatus;
+    }
+
+    public Boolean getFollowUp()
+    {
+        return followUp;
+    }
+
+    public void setFollowUp( Boolean followUp )
+    {
+        this.followUp = followUp;
+    }
+
+    public OrganisationUnit getOrgUnit()
+    {
+        return orgUnit;
+    }
+
+    public void setOrgUnit( OrganisationUnit orgUnit )
+    {
+        this.orgUnit = orgUnit;
+    }
+
+    public OrganisationUnitSelectionMode getOrgUnitSelectionMode()
+    {
+        return orgUnitSelectionMode;
+    }
+
+    public void setOrgUnitSelectionMode( OrganisationUnitSelectionMode orgUnitSelectionMode )
+    {
+        this.orgUnitSelectionMode = orgUnitSelectionMode;
+    }
+
+    public TrackedEntityInstance getTrackedEntityInstance()
+    {
+        return trackedEntityInstance;
+    }
+
+    public void setTrackedEntityInstance( TrackedEntityInstance trackedEntityInstance )
+    {
+        this.trackedEntityInstance = trackedEntityInstance;
+    }
+
+    public Date getStartDate()
+    {
+        return startDate;
+    }
+
+    public void setStartDate( Date startDate )
+    {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate()
+    {
+        return endDate;
+    }
+
+    public void setEndDate( Date endDate )
+    {
+        this.endDate = endDate;
+    }
+
+    public EventStatus getEventStatus()
+    {
+        return eventStatus;
+    }
+
+    public void setEventStatus( EventStatus eventStatus )
+    {
+        this.eventStatus = eventStatus;
+    }
+
+    public Date getLastUpdated()
+    {
+        return lastUpdated;
+    }
+
+    public void setLastUpdated( Date lastUpdated )
+    {
+        this.lastUpdated = lastUpdated;
+    }
+
+    public IdSchemes getIdSchemes()
+    {
+        return idSchemes;
+    }
+
+    public void setIdSchemes( IdSchemes idSchemes )
+    {
+        this.idSchemes = idSchemes;
+    }
+}

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventService.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventService.java	2015-03-12 11:03:32 +0000
@@ -28,25 +28,21 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+
 import org.hisp.dhis.common.OrganisationUnitSelectionMode;
-import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
+import org.hisp.dhis.dxf2.common.IdSchemes;
+import org.hisp.dhis.dxf2.common.ImportOptions;
 import org.hisp.dhis.dxf2.importsummary.ImportSummaries;
 import org.hisp.dhis.dxf2.importsummary.ImportSummary;
-import org.hisp.dhis.dxf2.common.ImportOptions;
-import org.hisp.dhis.dxf2.common.IdSchemes;
 import org.hisp.dhis.event.EventStatus;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStage;
 import org.hisp.dhis.program.ProgramStageInstance;
 import org.hisp.dhis.program.ProgramStatus;
 import org.hisp.dhis.scheduling.TaskId;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Date;
-import java.util.List;
-
 /**
  * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
  */
@@ -56,12 +52,12 @@
     // READ
     // -------------------------------------------------------------------------
 
-    Events getEvents( Program program, OrganisationUnit organisationUnit, OrganisationUnitSelectionMode orgUnitSelectionMode );
-
-    Events getEvents( Program program, ProgramStage programStage, ProgramStatus programStatus, Boolean followUp, OrganisationUnit orgUnit,
-        OrganisationUnitSelectionMode orgUnitSelectionMode, TrackedEntityInstance trackedEntityInstance, 
-        Date startDate, Date endDate, EventStatus status, Date lastUpdated, IdSchemes idSchemes );
-
+    Events getEvents( EventSearchParams params );
+
+    EventSearchParams getFromUrl( String program, String programStage, ProgramStatus programStatus, Boolean followUp, String orgUnit,
+        OrganisationUnitSelectionMode orgUnitSelectionMode, String trackedEntityInstance, Date startDate, Date endDate, 
+        EventStatus status, Date lastUpdated, IdSchemes idSchemes );
+    
     Event getEvent( String uid );
 
     Event getEvent( ProgramStageInstance programStageInstance );

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventStore.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventStore.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/EventStore.java	2015-03-12 11:03:32 +0000
@@ -28,22 +28,14 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
-import org.hisp.dhis.dxf2.common.IdSchemes;
-import org.hisp.dhis.event.EventStatus;
+import java.util.List;
+
 import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStage;
-import org.hisp.dhis.program.ProgramStatus;
-
-import java.util.Date;
-import java.util.List;
 
 /**
  * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
  */
 public interface EventStore
 {
-    List<Event> getEvents( Program program, ProgramStage programStage, ProgramStatus programStatus, Boolean followUp, List<OrganisationUnit> organisationUnits,
-        TrackedEntityInstance trackedEntityInstance, Date startDate, Date endDate, EventStatus status, Date lastUpdated, IdSchemes idSchemes );
+    List<Event> getEvents( EventSearchParams params, List<OrganisationUnit> organisationUnits );
 }

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java	2015-03-12 11:03:32 +0000
@@ -34,7 +34,6 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -42,12 +41,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.hisp.dhis.dxf2.common.IdSchemes;
-import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.event.EventStatus;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStage;
-import org.hisp.dhis.program.ProgramStatus;
 import org.hisp.dhis.system.util.DateUtils;
 import org.hisp.dhis.system.util.SqlHelper;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceService;
@@ -76,28 +72,12 @@
     private static final ObjectMapper objectMapper = new ObjectMapper();
 
     @Override
-    public List<Event> getEvents( Program program, ProgramStage programStage, ProgramStatus programStatus, Boolean followUp,
-        List<OrganisationUnit> organisationUnits, TrackedEntityInstance trackedEntityInstance, 
-        Date startDate, Date endDate, EventStatus status, Date lastUpdated, IdSchemes idSchemes )
+    public List<Event> getEvents( EventSearchParams params, List<OrganisationUnit> organisationUnits )
     {
         List<Event> events = new ArrayList<>();
 
-        Integer trackedEntityInstanceId = null;
-
-        if ( trackedEntityInstance != null )
-        {
-            org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstance = entityInstanceService
-                .getTrackedEntityInstance( trackedEntityInstance.getTrackedEntityInstance() );
-
-            if ( entityInstance != null )
-            {
-                trackedEntityInstanceId = entityInstance.getId();
-            }
-        }
-
-        String sql = buildSql( program, programStage, programStatus, followUp, getIdList( organisationUnits ),
-            trackedEntityInstanceId, startDate, endDate, status, lastUpdated );
-
+        String sql = buildSql( params, organisationUnits );
+        
         SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql );
 
         log.debug( "Event query SQL: " + sql );
@@ -107,7 +87,7 @@
 
         Set<String> notes = new HashSet<>();
         
-        idSchemes = ObjectUtils.firstNonNull( idSchemes, new IdSchemes() );
+        IdSchemes idSchemes = ObjectUtils.firstNonNull( params.getIdSchemes(), new IdSchemes() );
 
         while ( rowSet.next() )
         {
@@ -204,9 +184,23 @@
         return events;
     }
 
-    private String buildSql( Program program, ProgramStage programStage, ProgramStatus programStatus, Boolean followUp,
-        List<Integer> orgUnitIds, Integer trackedEntityInstanceId, Date startDate, Date endDate, EventStatus status, Date lastUpdated )
+    private String buildSql( EventSearchParams params, List<OrganisationUnit> organisationUnits )
     {
+        List<Integer> orgUnitIds = getIdList( organisationUnits );
+
+        Integer trackedEntityInstanceId = null;
+
+        if ( params.getTrackedEntityInstance() != null )
+        {
+            org.hisp.dhis.trackedentity.TrackedEntityInstance entityInstance = entityInstanceService
+                .getTrackedEntityInstance( params.getTrackedEntityInstance().getTrackedEntityInstance() );
+
+            if ( entityInstance != null )
+            {
+                trackedEntityInstanceId = entityInstance.getId();
+            }
+        }
+
         SqlHelper hlp = new SqlHelper();
 
         String sql =
@@ -225,7 +219,7 @@
                 "left join programstageinstancecomments psic on psi.programstageinstanceid=psic.programstageinstanceid " +
                 "left join trackedentitycomment psinote on psic.trackedentitycommentid=psinote.trackedentitycommentid ";
 
-        if ( status == null || EventStatus.isExistingEvent( status ) )
+        if ( params.getEventStatus() == null || EventStatus.isExistingEvent( params.getEventStatus() ) )
         {
             sql += "left join organisationunit ou on (psi.organisationunitid=ou.organisationunitid) ";
         }
@@ -246,46 +240,46 @@
             sql += hlp.whereAnd() + " pa.trackedentityinstanceid=" + trackedEntityInstanceId + " ";
         }
 
-        if ( program != null )
-        {
-            sql += hlp.whereAnd() + " p.programid = " + program.getId() + " ";
-        }
-
-        if ( programStage != null )
-        {
-            sql += hlp.whereAnd() + " ps.programstageid = " + programStage.getId() + " ";
-        }
-
-        if ( programStatus != null )
-        {
-            sql += hlp.whereAnd() + " pi.status = " + programStatus.getValue() + " ";
-        }
-
-        if ( followUp != null )
-        {
-            sql += hlp.whereAnd() + " pi.followup is " + (followUp ? "true" : "false") + " ";
+        if ( params.getProgram() != null )
+        {
+            sql += hlp.whereAnd() + " p.programid = " + params.getProgram().getId() + " ";
+        }
+
+        if ( params.getProgramStage() != null )
+        {
+            sql += hlp.whereAnd() + " ps.programstageid = " + params.getProgramStage().getId() + " ";
+        }
+
+        if ( params.getProgramStatus() != null )
+        {
+            sql += hlp.whereAnd() + " pi.status = " + params.getProgramStatus().getValue() + " ";
+        }
+
+        if ( params.getFollowUp() != null )
+        {
+            sql += hlp.whereAnd() + " pi.followup is " + ( params.getFollowUp() ? "true" : "false" ) + " ";
         }
         
-        if ( lastUpdated != null )
+        if ( params.getLastUpdated() != null )
         {
-            sql += hlp.whereAnd() + " psi.lastupdated > '" + DateUtils.getLongDateString( lastUpdated ) + "' ";
+            sql += hlp.whereAnd() + " psi.lastupdated > '" + DateUtils.getLongDateString( params.getLastUpdated() ) + "' ";
         }
 
-        if ( status == null || EventStatus.isExistingEvent( status ) )
+        if ( params.getEventStatus() == null || EventStatus.isExistingEvent( params.getEventStatus() ) )
         {
             if ( orgUnitIds != null && !orgUnitIds.isEmpty() )
             {
                 sql += hlp.whereAnd() + " psi.organisationunitid in (" + getCommaDelimitedString( orgUnitIds ) + ") ";
             }
 
-            if ( startDate != null )
+            if ( params.getStartDate() != null )
             {
-                sql += hlp.whereAnd() + " psi.executiondate >= '" + getMediumDateString( startDate ) + "' ";
+                sql += hlp.whereAnd() + " psi.executiondate >= '" + getMediumDateString( params.getStartDate() ) + "' ";
             }
 
-            if ( endDate != null )
+            if ( params.getEndDate() != null )
             {
-                sql += hlp.whereAnd() + " psi.executiondate <= '" + getMediumDateString( endDate ) + "' ";
+                sql += hlp.whereAnd() + " psi.executiondate <= '" + getMediumDateString( params.getEndDate() ) + "' ";
             }
         }
         else
@@ -295,37 +289,37 @@
                 sql += hlp.whereAnd() + " tei.organisationunitid in (" + getCommaDelimitedString( orgUnitIds ) + ") ";
             }
 
-            if ( startDate != null )
-            {
-                sql += hlp.whereAnd() + " psi.duedate >= '" + getMediumDateString( startDate ) + "' ";
-            }
-
-            if ( endDate != null )
-            {
-                sql += hlp.whereAnd() + " psi.duedate <= '" + getMediumDateString( endDate ) + "' ";
-            }
-
-            if ( status == EventStatus.VISITED )
+            if ( params.getStartDate() != null )
+            {
+                sql += hlp.whereAnd() + " psi.duedate >= '" + getMediumDateString( params.getStartDate() ) + "' ";
+            }
+
+            if ( params.getEndDate() != null )
+            {
+                sql += hlp.whereAnd() + " psi.duedate <= '" + getMediumDateString( params.getEndDate() ) + "' ";
+            }
+
+            if ( params.getEventStatus() == EventStatus.VISITED )
             {
                 sql = "and psi.status = '" + EventStatus.ACTIVE.name() + "' and psi.executiondate is not null ";
             }
-            else if ( status == EventStatus.COMPLETED )
+            else if ( params.getEventStatus() == EventStatus.COMPLETED )
             {
                 sql = "and psi.status = '" + EventStatus.COMPLETED.name() + "' ";
             }
-            else if ( status == EventStatus.SCHEDULE )
+            else if ( params.getEventStatus() == EventStatus.SCHEDULE )
             {
                 sql += "and psi.executiondate is null and date(now()) <= date(psi.duedate) and psi.status = '" + EventStatus.SCHEDULE
                     .name() + "' ";
             }
-            else if ( status == EventStatus.OVERDUE )
+            else if ( params.getEventStatus() == EventStatus.OVERDUE )
             {
                 sql += "and psi.executiondate is null and date(now()) > date(psi.duedate) and psi.status = '" + EventStatus.SCHEDULE.name
                     () + "' ";
             }
             else
             {
-                sql += "and psi.status = '" + status.name() + "' ";
+                sql += "and psi.status = '" + params.getEventStatus().name() + "' ";
             }
         }
 

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/AbstractEventRowService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/AbstractEventRowService.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/AbstractEventRowService.java	2015-03-12 11:03:32 +0000
@@ -29,25 +29,19 @@
  */
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 import org.hisp.dhis.common.IdentifiableObjectManager;
-import org.hisp.dhis.common.OrganisationUnitSelectionMode;
 import org.hisp.dhis.dxf2.events.event.Event;
+import org.hisp.dhis.dxf2.events.event.EventSearchParams;
 import org.hisp.dhis.dxf2.events.event.EventService;
 import org.hisp.dhis.dxf2.events.event.Events;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService;
-import org.hisp.dhis.event.EventStatus;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * @author Abyot Asalefew Gizaw <abyota@xxxxxxxxx>
- *
  */
 public class AbstractEventRowService
     implements EventRowService
@@ -66,26 +60,24 @@
     private TrackedEntityInstanceService trackedEntityInstanceService;
 
     @Override
-    public EventRows getEventRows( Program program, OrganisationUnit orgUnit, OrganisationUnitSelectionMode orgUnitSelectionMode,
-        ProgramStatus programStatus, EventStatus eventStatus, Date startDate, Date endDate )
+    public EventRows getEventRows( EventSearchParams params )
     {
         List<EventRow> eventRowList = new ArrayList<EventRow>();
         EventRows eventRows = new EventRows();
-
-        Events events = eventService.getEvents( program, null, programStatus, null, orgUnit, orgUnitSelectionMode, 
-            null, startDate, endDate, eventStatus, null, null );
+        
+        Events events = eventService.getEvents( params );
 
         for ( Event event : events.getEvents() )
         {
             if ( event.getTrackedEntityInstance() != null )
             {
-                TrackedEntityInstance tei = trackedEntityInstanceService.getTrackedEntityInstance( event
-                    .getTrackedEntityInstance() );
+                TrackedEntityInstance tei = trackedEntityInstanceService.getTrackedEntityInstance( event.getTrackedEntityInstance() );
+                
                 EventRow eventRow = new EventRow();
                 eventRow.setTrackedEntityInstance( event.getTrackedEntityInstance() );
                 eventRow.setAttributes( tei.getAttributes() );
                 eventRow.setEvent( event.getEvent() );
-                eventRow.setProgram( program.getUid() );
+                eventRow.setProgram( params.getProgram().getUid() );
                 eventRow.setProgramStage( event.getProgramStage() );                
                 eventRow.setRegistrationOrgUnit( tei.getOrgUnit() );
                 eventRow.setRegistrationDate( tei.getCreated() );

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/EventRowService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/EventRowService.java	2015-03-10 14:44:53 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/report/EventRowService.java	2015-03-12 11:03:32 +0000
@@ -28,19 +28,12 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import java.util.Date;
-
-import org.hisp.dhis.common.OrganisationUnitSelectionMode;
-import org.hisp.dhis.event.EventStatus;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStatus;
+import org.hisp.dhis.dxf2.events.event.EventSearchParams;
 
 /**
  * @author Abyot Asalefew Gizaw <abyota@xxxxxxxxx>
  */
 public interface EventRowService
 {
-    EventRows getEventRows( Program program, OrganisationUnit orgUnit, OrganisationUnitSelectionMode orgUnitSelectionMode, 
-        ProgramStatus programStatus, EventStatus eventStatus, Date startDate, Date endDate );
+    EventRows getEventRows( EventSearchParams params );
 }

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationMultiEventsServiceTest.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationMultiEventsServiceTest.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationMultiEventsServiceTest.java	2015-03-12 11:03:32 +0000
@@ -43,6 +43,7 @@
 import org.hisp.dhis.dxf2.events.enrollment.EnrollmentService;
 import org.hisp.dhis.dxf2.events.event.DataValue;
 import org.hisp.dhis.dxf2.events.event.Event;
+import org.hisp.dhis.dxf2.events.event.EventSearchParams;
 import org.hisp.dhis.dxf2.events.event.EventService;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService;
@@ -234,8 +235,13 @@
         importSummary = eventService.addEvent( event );
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
-        assertEquals( 1, eventService.getEvents( programA, programStageA, null, null, organisationUnitA, 
-            OrganisationUnitSelectionMode.SELECTED, null, null, null, null, null, null ).getEvents().size() );
+        EventSearchParams params = new EventSearchParams();
+        params.setProgram( programA );
+        params.setProgramStage( programStageA );
+        params.setOrgUnit( organisationUnitA );
+        params.setOrgUnitSelectionMode( OrganisationUnitSelectionMode.SELECTED );
+        
+        assertEquals( 1, eventService.getEvents( params ).getEvents().size() );
     }
 
     @Test
@@ -256,14 +262,21 @@
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
         sessionFactory.getCurrentSession().flush();
-        assertEquals( 2, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+        
+        EventSearchParams params = new EventSearchParams();
+        params.setProgram( programA );
+        params.setOrgUnit( organisationUnitA );
+        params.setOrgUnitSelectionMode( OrganisationUnitSelectionMode.SELECTED );
+        
+        assertEquals( 2, eventService.getEvents( params ).getEvents().size() );
 
         event = createEvent( programA.getUid(), programStageB.getUid(), organisationUnitA.getUid(),
             trackedEntityInstanceMaleA.getTrackedEntityInstance(), dataElementB.getUid() );
+        
         importSummary = eventService.addEvent( event );
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
-        assertEquals( 3, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+        assertEquals( 3, eventService.getEvents( params ).getEvents().size() );
     }
 
     @Test
@@ -284,7 +297,13 @@
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
         sessionFactory.getCurrentSession().flush();
-        assertEquals( 2, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+
+        EventSearchParams params = new EventSearchParams();
+        params.setProgram( programA );
+        params.setOrgUnit( organisationUnitA );
+        params.setOrgUnitSelectionMode( OrganisationUnitSelectionMode.SELECTED );
+        
+        assertEquals( 2, eventService.getEvents( params ).getEvents().size() );
 
         event = createEvent( programA.getUid(), programStageB.getUid(), organisationUnitA.getUid(),
             trackedEntityInstanceMaleA.getTrackedEntityInstance(), dataElementB.getUid() );
@@ -292,14 +311,14 @@
         importSummary = eventService.addEvent( event );
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
-        assertEquals( 2, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+        assertEquals( 2, eventService.getEvents( params ).getEvents().size() );
 
         event = createEvent( programA.getUid(), programStageA.getUid(), organisationUnitA.getUid(),
             trackedEntityInstanceMaleA.getTrackedEntityInstance(), dataElementA.getUid() );
         importSummary = eventService.addEvent( event );
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
-        assertEquals( 2, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+        assertEquals( 2, eventService.getEvents( params ).getEvents().size() );
     }
 
     private Enrollment createEnrollment( String program, String person )

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java	2015-03-10 14:44:53 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java	2015-03-12 11:03:32 +0000
@@ -43,6 +43,7 @@
 import org.hisp.dhis.dxf2.events.enrollment.EnrollmentService;
 import org.hisp.dhis.dxf2.events.event.DataValue;
 import org.hisp.dhis.dxf2.events.event.Event;
+import org.hisp.dhis.dxf2.events.event.EventSearchParams;
 import org.hisp.dhis.dxf2.events.event.EventService;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService;
@@ -189,19 +190,24 @@
         importSummary = eventService.addEvent( event );
         assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
 
-        assertEquals( 1, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
-
-        event = createEvent( programA.getUid(), organisationUnitA.getUid(), trackedEntityInstanceMaleA.getTrackedEntityInstance() );
-        importSummary = eventService.addEvent( event );
-        assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
-
-        assertEquals( 1, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
-
-        event = createEvent( programA.getUid(), organisationUnitA.getUid(), trackedEntityInstanceMaleA.getTrackedEntityInstance() );
-        importSummary = eventService.addEvent( event );
-        assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
-
-        assertEquals( 1, eventService.getEvents( programA, organisationUnitA, OrganisationUnitSelectionMode.SELECTED ).getEvents().size() );
+        EventSearchParams params = new EventSearchParams();
+        params.setProgram( programA );
+        params.setOrgUnit( organisationUnitA );
+        params.setOrgUnitSelectionMode( OrganisationUnitSelectionMode.SELECTED );
+        
+        assertEquals( 1, eventService.getEvents( params ).getEvents().size() );
+
+        event = createEvent( programA.getUid(), organisationUnitA.getUid(), trackedEntityInstanceMaleA.getTrackedEntityInstance() );
+        importSummary = eventService.addEvent( event );
+        assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
+
+        assertEquals( 1, eventService.getEvents( params ).getEvents().size() );
+
+        event = createEvent( programA.getUid(), organisationUnitA.getUid(), trackedEntityInstanceMaleA.getTrackedEntityInstance() );
+        importSummary = eventService.addEvent( event );
+        assertEquals( ImportStatus.SUCCESS, importSummary.getStatus() );
+
+        assertEquals( 1, eventService.getEvents( params ).getEvents().size() );
     }
 
     @Test

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java	2015-03-10 14:59:27 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/EventController.java	2015-03-12 11:03:32 +0000
@@ -50,6 +50,7 @@
 import org.hisp.dhis.dxf2.common.ImportOptions;
 import org.hisp.dhis.dxf2.common.JacksonUtils;
 import org.hisp.dhis.dxf2.events.event.Event;
+import org.hisp.dhis.dxf2.events.event.EventSearchParams;
 import org.hisp.dhis.dxf2.events.event.EventService;
 import org.hisp.dhis.dxf2.events.event.Events;
 import org.hisp.dhis.dxf2.events.event.ImportEventTask;
@@ -57,17 +58,14 @@
 import org.hisp.dhis.dxf2.events.event.csv.CsvEventService;
 import org.hisp.dhis.dxf2.events.report.EventRowService;
 import org.hisp.dhis.dxf2.events.report.EventRows;
-import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService;
 import org.hisp.dhis.dxf2.importsummary.ImportStatus;
 import org.hisp.dhis.dxf2.importsummary.ImportSummaries;
 import org.hisp.dhis.dxf2.importsummary.ImportSummary;
 import org.hisp.dhis.event.EventStatus;
 import org.hisp.dhis.importexport.ImportStrategy;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramStage;
 import org.hisp.dhis.program.ProgramStatus;
 import org.hisp.dhis.scheduling.TaskCategory;
 import org.hisp.dhis.scheduling.TaskId;
@@ -154,34 +152,10 @@
     {
         WebOptions options = new WebOptions( parameters );
 
-        Program pr = manager.get( Program.class, program );
-        ProgramStage prs = manager.get( ProgramStage.class, programStage );
-        TrackedEntityInstance tei = null;
-        OrganisationUnit ou = null;
-
-        if ( trackedEntityInstance != null )
-        {
-            tei = trackedEntityInstanceService.getTrackedEntityInstance( trackedEntityInstance );
-
-            if ( tei == null )
-            {
-                ContextUtils.conflictResponse( response, "Invalid trackedEntityInstance ID." );
-                return;
-            }
-        }
-
-        if ( orgUnit != null )
-        {
-            ou = manager.get( OrganisationUnit.class, orgUnit );
-
-            if ( ou == null )
-            {
-                ContextUtils.conflictResponse( response, "Invalid orgUnit ID." );
-                return;
-            }
-        }
-
-        Events events = eventService.getEvents( pr, prs, programStatus, followUp, ou, ouMode, tei, startDate, endDate, status, lastUpdated, idSchemes );
+        EventSearchParams params = eventService.getFromUrl( program, programStage, programStatus, followUp, orgUnit, ouMode, 
+            trackedEntityInstance, startDate, endDate, status, lastUpdated, idSchemes );
+        
+        Events events = eventService.getEvents( params );
 
         if ( options.hasPaging() )
         {
@@ -230,34 +204,10 @@
     {
         WebOptions options = new WebOptions( parameters );
 
-        Program pr = manager.get( Program.class, program );
-        ProgramStage prs = manager.get( ProgramStage.class, programStage );
-        TrackedEntityInstance tei = null;
-        OrganisationUnit ou = null;
-
-        if ( trackedEntityInstance != null )
-        {
-            tei = trackedEntityInstanceService.getTrackedEntityInstance( trackedEntityInstance );
-
-            if ( tei == null )
-            {
-                ContextUtils.conflictResponse( response, "Invalid trackedEntityInstance ID." );
-                return null;
-            }
-        }
-
-        if ( orgUnit != null )
-        {
-            ou = manager.get( OrganisationUnit.class, orgUnit );
-
-            if ( ou == null )
-            {
-                ContextUtils.conflictResponse( response, "Invalid orgUnit ID." );
-                return null;
-            }
-        }
-
-        Events events = eventService.getEvents( pr, prs, programStatus, followUp, ou, ouMode, tei, startDate, endDate, status, lastUpdated, idSchemes );
+        EventSearchParams params = eventService.getFromUrl( program, programStage, programStatus, followUp, orgUnit, ouMode, 
+            trackedEntityInstance, startDate, endDate, status, lastUpdated, idSchemes );
+        
+        Events events = eventService.getEvents( params );
 
         if ( options.hasLinks() )
         {
@@ -274,9 +224,9 @@
             events.setEvents( PagerUtils.pageCollection( events.getEvents(), pager ) );
         }
 
-        if ( !skipMeta && pr != null )
+        if ( !skipMeta && params.getProgram() != null )
         {
-            events.setMetaData( getMetaData( pr ) );
+            events.setMetaData( getMetaData( params.getProgram() ) );
         }
 
         model.addAttribute( "model", events );
@@ -304,15 +254,9 @@
     {
         WebOptions options = new WebOptions( parameters );
 
-        Program pr = manager.get( Program.class, program );
-        OrganisationUnit ou = null;
-
-        if ( orgUnit != null )
-        {
-            ou = manager.get( OrganisationUnit.class, orgUnit );
-        }
-
-        EventRows eventRows = eventRowService.getEventRows( pr, ou, ouMode, programStatus, eventStatus, startDate, endDate );
+        EventSearchParams params = eventService.getFromUrl( program, null, programStatus, false, orgUnit, ouMode, null, startDate, endDate, null, null, null );
+        
+        EventRows eventRows = eventRowService.getEventRows( params );
 
         if ( options.hasPaging() )
         {