------------------------------------------------------------ revno: 18185 committer: Morten Olav Hansen <morte...@gmail.com> branch nick: dhis2 timestamp: Fri 2015-02-06 10:50:03 +0700 message: support field filter in /api/trackedEntityInstances/ID endpoint, wip modified: dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/DefaultFieldFilterService.java dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/FieldFilterService.java dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/DefaultObjectFilterService.java dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/ObjectFilterService.java dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/TrackedEntityInstanceController.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-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/DefaultFieldFilterService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/DefaultFieldFilterService.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/DefaultFieldFilterService.java 2015-02-06 03:50:03 +0000 @@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.PresetProvider; import org.hisp.dhis.dxf2.parser.ParserService; import org.hisp.dhis.node.AbstractNode; @@ -48,6 +47,7 @@ import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.system.util.ReflectionUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; import java.util.Collection; @@ -114,7 +114,7 @@ } @Override - public <T extends IdentifiableObject> CollectionNode filter( Class<?> klass, List<T> objects, List<String> fieldList ) + public CollectionNode filter( Class<?> klass, List<?> objects, List<String> fieldList ) { String fields = fieldList == null ? "" : Joiner.on( "," ).join( fieldList ); @@ -131,7 +131,7 @@ FieldMap fieldMap = new FieldMap(); Schema schema = schemaService.getDynamicSchema( objects.get( 0 ).getClass() ); - if ( fields == null ) + if ( StringUtils.isEmpty( fields ) ) { for ( Property property : schema.getProperties() ) { === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/FieldFilterService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/FieldFilterService.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/fieldfilter/FieldFilterService.java 2015-02-06 03:50:03 +0000 @@ -28,7 +28,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.node.types.CollectionNode; import java.util.List; @@ -45,5 +44,5 @@ * @param fieldList Field filter * @return List of objects with only wanted properties */ - <T extends IdentifiableObject> CollectionNode filter( Class<?> klass, List<T> objects, List<String> fieldList ); + CollectionNode filter( Class<?> klass, List<?> objects, List<String> fieldList ); } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/DefaultObjectFilterService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/DefaultObjectFilterService.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/DefaultObjectFilterService.java 2015-02-06 03:50:03 +0000 @@ -29,8 +29,6 @@ */ import com.google.common.collect.Lists; - -import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.dxf2.objectfilter.ops.Op; import org.hisp.dhis.dxf2.objectfilter.ops.OpStatus; import org.hisp.dhis.dxf2.parser.ParserService; @@ -56,7 +54,7 @@ private SchemaService schemaService; @Override - public <T extends IdentifiableObject> List<T> filter( List<T> objects, List<String> filters ) + public <T> List<T> filter( List<T> objects, List<String> filters ) { if ( objects == null || objects.isEmpty() ) { @@ -78,7 +76,7 @@ return list; } - @SuppressWarnings("unchecked") + @SuppressWarnings( "unchecked" ) private <T> boolean evaluateWithFilters( T object, Filters filters ) { if ( object == null ) @@ -180,7 +178,7 @@ for ( Op op : ops ) { OpStatus status = op.evaluate( value ); - + if ( OpStatus.INCLUDE.equals( status ) ) { include = true; === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/ObjectFilterService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/ObjectFilterService.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/objectfilter/ObjectFilterService.java 2015-02-06 03:50:03 +0000 @@ -28,8 +28,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import org.hisp.dhis.common.IdentifiableObject; - import java.util.List; /** @@ -45,5 +43,5 @@ * @param filters Filter string * @return Filtered object list */ - <T extends IdentifiableObject> List<T> filter( List<T> objects, List<String> filters ); + <T extends Object> List<T> filter( List<T> objects, List<String> filters ); } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/TrackedEntityInstanceController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/TrackedEntityInstanceController.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/event/TrackedEntityInstanceController.java 2015-02-06 03:50:03 +0000 @@ -28,25 +28,30 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.google.common.collect.Lists; +import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.IllegalQueryException; import org.hisp.dhis.common.OrganisationUnitSelectionMode; import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance; import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService; +import org.hisp.dhis.dxf2.fieldfilter.FieldFilterService; 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.dxf2.objectfilter.ObjectFilterService; import org.hisp.dhis.dxf2.utils.JacksonUtils; import org.hisp.dhis.event.EventStatus; import org.hisp.dhis.importexport.ImportStrategy; +import org.hisp.dhis.node.types.RootNode; import org.hisp.dhis.program.ProgramStatus; import org.hisp.dhis.schema.descriptors.TrackedEntityInstanceSchemaDescriptor; import org.hisp.dhis.system.grid.GridUtils; import org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams; import org.hisp.dhis.webapi.controller.exception.NotFoundException; +import org.hisp.dhis.webapi.service.ContextService; import org.hisp.dhis.webapi.utils.ContextUtils; import org.hisp.dhis.webapi.utils.ContextUtils.CacheStrategy; -import org.hisp.dhis.webapi.webdomain.WebOptions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; @@ -59,13 +64,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; -import java.util.Map; +import java.util.List; import java.util.Set; /** @@ -85,6 +91,15 @@ @Autowired private ContextUtils contextUtils; + @Autowired + private FieldFilterService fieldFilterService; + + @Autowired + private ObjectFilterService objectFilterService; + + @Autowired + private ContextService contextService; + // ------------------------------------------------------------------------- // READ // ------------------------------------------------------------------------- @@ -226,16 +241,24 @@ @RequestMapping( value = "/{id}", method = RequestMethod.GET ) @PreAuthorize( "hasRole('ALL') or hasRole('F_TRACKED_ENTITY_INSTANCE_SEARCH')" ) - public String getTrackedEntityInstance( @PathVariable String id, @RequestParam Map<String, String> parameters, Model model ) + public @ResponseBody RootNode getTrackedEntityInstanceById( @PathVariable( "id" ) String pvId ) throws NotFoundException { - WebOptions options = new WebOptions( parameters ); - TrackedEntityInstance trackedEntityInstance = getTrackedEntityInstance( id ); - - model.addAttribute( "model", trackedEntityInstance ); - model.addAttribute( "viewClass", options.getViewClass( "detailed" ) ); - - return "trackedEntityInstance"; + List<TrackedEntityInstance> trackedEntityInstances = Lists.newArrayList( getTrackedEntityInstance( pvId ) ); + List<String> fields = Lists.newArrayList( contextService.getParameterValues( "fields" ) ); + + if ( fields.isEmpty() ) + { + fields.add( ":all" ); + } + + RootNode rootNode = new RootNode( "metadata" ); + rootNode.setDefaultNamespace( DxfNamespaces.DXF_2_0 ); + rootNode.setNamespace( DxfNamespaces.DXF_2_0 ); + + rootNode.addChild( fieldFilterService.filter( TrackedEntityInstance.class, trackedEntityInstances, fields ) ); + + return rootNode; } // ------------------------------------------------------------------------- @@ -282,7 +305,7 @@ @RequestMapping( value = "", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE ) @PreAuthorize( "hasRole('ALL') or hasRole('F_TRACKED_ENTITY_INSTANCE_ADD')" ) - public void postTrackedEntityInstanceJson( @RequestParam( defaultValue = "CREATE" ) ImportStrategy strategy,HttpServletRequest request, HttpServletResponse response ) + public void postTrackedEntityInstanceJson( @RequestParam( defaultValue = "CREATE" ) ImportStrategy strategy, HttpServletRequest request, HttpServletResponse response ) throws IOException { ImportSummaries importSummaries = trackedEntityInstanceService.addTrackedEntityInstanceJson( request.getInputStream(), strategy );
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp