=== modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/controller/FacilityController.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/controller/FacilityController.java 2012-12-12 07:57:09 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/controller/FacilityController.java 2012-12-13 09:18:43 +0000 @@ -52,7 +52,13 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.WebDataBinder; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import javax.validation.ConstraintViolation; import javax.validation.Validator; @@ -61,7 +67,12 @@ import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Set; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; @@ -129,9 +140,77 @@ // GET HTML //-------------------------------------------------------------------------- + private Facility filterFacility( Facility facility, boolean allProperties, String fields ) + { + // if allProperties=false is added, filter away the properties block, and don't care about fields + if ( !allProperties ) + { + facility.setProperties( null ); + + return facility; + } + + if ( fields == null ) + { + return facility; + } + + List strings = Arrays.asList( fields.split( "," ) ); + + // simple field filtering + if ( !strings.contains( "id" ) ) + { + facility.setId( null ); + } + + if ( !strings.contains( "name" ) ) + { + facility.setName( null ); + } + + if ( !strings.contains( "active" ) ) + { + facility.setActive( null ); + } + + if ( !strings.contains( "createdAt" ) ) + { + facility.setCreatedAt( null ); + } + + if ( !strings.contains( "updatedAt" ) ) + { + facility.setUpdatedAt( null ); + } + + if ( !strings.contains( "coordinates" ) ) + { + facility.setCoordinates( null ); + } + + if ( !strings.contains( "url" ) ) + { + facility.setUrl( null ); + } + + if ( !strings.contains( "identifiers" ) ) + { + facility.setIdentifiers( null ); + } + + if ( !strings.contains( "properties" ) ) + { + facility.setProperties( null ); + } + + return facility; + } + @RequestMapping( value = "", method = RequestMethod.GET ) public String readFacilities( Model model, @RequestParam( required = false ) Boolean active, - @RequestParam( value = "updatedSince", required = false ) Date lastUpdated ) + @RequestParam( value = "updatedSince", required = false ) Date lastUpdated, + @RequestParam( value = "allProperties", required = false, defaultValue = "true" ) Boolean allProperties, + @RequestParam( value = "fields", required = false ) String fields ) { Facilities facilities = new Facilities(); List allOrganisationUnits; @@ -158,6 +237,7 @@ for ( OrganisationUnit organisationUnit : allOrganisationUnits ) { Facility facility = conversionService.convert( organisationUnit, Facility.class ); + filterFacility( facility, allProperties, fields ); facilities.getFacilities().add( facility ); } @@ -174,11 +254,14 @@ } @RequestMapping( value = "/{id}", method = RequestMethod.GET ) - public String readFacility( Model model, @PathVariable String id ) + public String readFacility( Model model, @PathVariable String id, + @RequestParam( value = "allProperties", required = false, defaultValue = "true" ) Boolean allProperties, + @RequestParam( value = "fields", required = false ) String fields ) { OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit( id ); Facility facility = conversionService.convert( organisationUnit, Facility.class ); + filterFacility( facility, allProperties, fields ); setAccessRights( model ); === modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/ToFacilityConverter.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/ToFacilityConverter.java 2012-12-09 16:55:20 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/ToFacilityConverter.java 2012-12-13 09:18:43 +0000 @@ -29,14 +29,21 @@ import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitLevel; +import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.organisationunit.comparator.OrganisationUnitLevelComparator; import org.hisp.dhis.web.webapi.v1.controller.FacilityController; import org.hisp.dhis.web.webapi.v1.domain.Facility; import org.hisp.dhis.web.webapi.v1.domain.Identifier; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; @@ -46,6 +53,9 @@ @Component public class ToFacilityConverter implements Converter { + @Autowired + private OrganisationUnitService organisationUnitService; + @Override public Facility convert( OrganisationUnit organisationUnit ) { @@ -99,6 +109,25 @@ facility.getProperties().put( "dataSets", dataSets ); } + facility.getProperties().put( "level", organisationUnit.getOrganisationUnitLevel() ); + + List organisationUnitLevels = organisationUnitService.getOrganisationUnitLevels(); + Collections.sort( organisationUnitLevels, new OrganisationUnitLevelComparator() ); + + // TODO this probably belongs in "meta": {} + List> hierarchy = new ArrayList>(); + facility.getProperties().put( "hierarchy", hierarchy ); + + for ( OrganisationUnitLevel organisationUnitLevel : organisationUnitLevels ) + { + Map level = new HashMap(); + + level.put( "name", organisationUnitLevel.getName() ); + level.put( "level", organisationUnitLevel.getLevel() ); + + hierarchy.add( level ); + } + return facility; } }