=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java 2014-03-18 11:26:41 +0000 @@ -51,6 +51,8 @@ public static final String TRACKED_ENTITY_ATTRIBUTE_ID = "teattribute"; public static final String TRACKED_ENTITY_ATTRIBUTE_VALUE_ID = "tevalue"; + private String query; + private List items = new ArrayList(); private Set organisationUnits = new HashSet(); @@ -92,6 +94,27 @@ return setMap; } + public boolean isOrQuery() + { + return hasQuery(); + } + + /** + * Indicates whether this params specifies a query. + */ + public boolean hasQuery() + { + return query != null && !query.isEmpty(); + } + + /** + * Indicates whether this params specifies any query items. + */ + public boolean hasItems() + { + return items != null && !items.isEmpty(); + } + /** * Indicates whether this params specifies a program. */ @@ -152,6 +175,16 @@ // Getters and setters // ------------------------------------------------------------------------- + public String getQuery() + { + return query; + } + + public void setQuery( String query ) + { + this.query = query; + } + public List getItems() { return items; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java 2014-03-18 11:26:41 +0000 @@ -55,7 +55,7 @@ Grid getTrackedEntityInstances( TrackedEntityInstanceQueryParams params ); - TrackedEntityInstanceQueryParams getFromUrl( Set items, Set ou, String ouMode, + TrackedEntityInstanceQueryParams getFromUrl( String query, Set items, Set ou, String ouMode, String program, String trackedEntity, Integer page, Integer pageSize ); /** === modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java' --- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java 2014-03-18 11:26:41 +0000 @@ -44,6 +44,8 @@ import java.util.Set; import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hisp.dhis.common.DimensionalObjectUtils; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.GridHeader; @@ -72,6 +74,8 @@ public class DefaultTrackedEntityInstanceService implements TrackedEntityInstanceService { + private static final Log log = LogFactory.getLog( DefaultTrackedEntityInstanceService.class ); + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -139,6 +143,8 @@ @Override public Grid getTrackedEntityInstances( TrackedEntityInstanceQueryParams params ) { + validate( params ); + Grid grid = new ListGrid(); grid.addHeader( new GridHeader( TRACKED_ENTITY_INSTANCE_ID, "Instance" ) ); @@ -172,8 +178,36 @@ return grid; } + public void validate( TrackedEntityInstanceQueryParams params ) + throws IllegalQueryException + { + String violation = null; + + if ( params == null ) + { + throw new IllegalQueryException( "Params cannot be null" ); + } + + if ( params.hasQuery() && params.hasItems() ) + { + violation = "Query and items cannot be specified simultaneously"; + } + + if ( params.hasProgram() && params.hasTrackedEntity() ) + { + violation = "Program and tracked entity cannot be specified simultaneously"; + } + + if ( violation != null ) + { + log.warn( "Validation failed: " + violation ); + + throw new IllegalQueryException( violation ); + } + } + @Override - public TrackedEntityInstanceQueryParams getFromUrl( Set items, Set ou, String ouMode, + public TrackedEntityInstanceQueryParams getFromUrl( String query, Set items, Set ou, String ouMode, String program, String trackedEntity, Integer page, Integer pageSize ) { TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams(); @@ -213,6 +247,7 @@ throw new IllegalQueryException( "Tracked entity does not exist: " + program ); } + params.setQuery( query ); params.setProgram( pr ); params.setTrackedEntity( te ); params.setOrganisationUnitMode( ouMode ); === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/TrackedEntityInstanceController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/TrackedEntityInstanceController.java 2014-03-18 08:10:10 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/TrackedEntityInstanceController.java 2014-03-18 11:26:41 +0000 @@ -97,7 +97,8 @@ @RequestMapping( method = RequestMethod.GET, produces = { ContextUtils.CONTENT_TYPE_JSON, ContextUtils.CONTENT_TYPE_JAVASCRIPT } ) public String queryTrackedEntityInstancesJson( - @RequestParam Set item, + @RequestParam(required=false) String query, + @RequestParam(required=false) Set item, @RequestParam String ou, @RequestParam(required=false, defaultValue=DimensionalObject.OU_MODE_SELECTED) String ouMode, @RequestParam(required=false) String program, @@ -108,7 +109,7 @@ HttpServletResponse response ) throws Exception { Set orgUnits = new HashSet( ContextUtils.getQueryParamValues( ou ) ); - TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); + TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( query, item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_JSON, CacheStrategy.NO_CACHE ); Grid grid = instanceService.getTrackedEntityInstances( params ); @@ -120,7 +121,8 @@ @RequestMapping( method = RequestMethod.GET, produces = ContextUtils.CONTENT_TYPE_EXCEL ) public void queryTrackedEntityInstancesXls( - @RequestParam Set item, + @RequestParam(required=false) String query, + @RequestParam(required=false) Set item, @RequestParam String ou, @RequestParam(required=false, defaultValue=DimensionalObject.OU_MODE_SELECTED) String ouMode, @RequestParam(required=false) String program, @@ -131,7 +133,7 @@ HttpServletResponse response ) throws Exception { Set orgUnits = new HashSet( ContextUtils.getQueryParamValues( ou ) ); - TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); + TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( query, item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_EXCEL, CacheStrategy.NO_CACHE ); Grid grid = instanceService.getTrackedEntityInstances( params ); @@ -140,7 +142,8 @@ @RequestMapping( method = RequestMethod.GET, produces = ContextUtils.CONTENT_TYPE_CSV ) public void queryTrackedEntityInstancesCsv( - @RequestParam Set item, + @RequestParam(required=false) String query, + @RequestParam(required=false) Set item, @RequestParam String ou, @RequestParam(required=false, defaultValue=DimensionalObject.OU_MODE_SELECTED) String ouMode, @RequestParam(required=false) String program, @@ -151,7 +154,7 @@ HttpServletResponse response ) throws Exception { Set orgUnits = new HashSet( ContextUtils.getQueryParamValues( ou ) ); - TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); + TrackedEntityInstanceQueryParams params = instanceService.getFromUrl( query, item, orgUnits, ouMode, program, trackedEntity, page, pageSize ); contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_CSV, CacheStrategy.NO_CACHE ); Grid grid = instanceService.getTrackedEntityInstances( params );