# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jhansirk@thoughtworks.com-20160519111140-\
#   iio7kj9zcgheu39d
# target_branch: http://bazaar.launchpad.net/~dhis2-devs-\
#   core/dhis2/2.22/
# testament_sha1: 382e83a40cae642f91119c85703b498ed6220a2f
# timestamp: 2016-05-19 16:43:35 +0530
# base_revision_id: lars@dhis2.org-20160328125334-dodzbi16cz6kyhya
# 
# Begin patch
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java	2016-05-19 11:11:06 +0000
@@ -28,8 +28,10 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.hisp.dhis.common.IdentifiableObjectManager;
+import org.hisp.dhis.dataapproval.DataApprovalStateResponse;
 import org.hisp.dhis.datacompletion.CompleteDataSetRegistrationRequest;
 import org.hisp.dhis.datacompletion.CompleteDataSetRegistrationRequests;
 import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
@@ -41,21 +43,23 @@
 import org.hisp.dhis.dxf2.render.RenderService;
 import org.hisp.dhis.dxf2.utils.InputUtils;
 import org.hisp.dhis.dxf2.webmessage.WebMessageException;
+import org.hisp.dhis.fieldfilter.FieldFilterService;
 import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.i18n.I18nManager;
+import org.hisp.dhis.node.NodeUtils;
+import org.hisp.dhis.node.Preset;
+import org.hisp.dhis.node.types.RootNode;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.period.Period;
 import org.hisp.dhis.period.PeriodService;
 import org.hisp.dhis.period.PeriodType;
 import org.hisp.dhis.user.CurrentUserService;
+import org.hisp.dhis.webapi.service.ContextService;
 import org.hisp.dhis.webapi.utils.WebMessageUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-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 org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -105,8 +109,15 @@
     @Autowired
     private RenderService renderService;
 
+    @Autowired
+    private FieldFilterService fieldFilterService;
+
+    @Autowired
+    private ContextService contextService;
+
     @RequestMapping( method = RequestMethod.GET, produces = CONTENT_TYPE_JSON )
-    public void getCompleteDataSetRegistrationsJson(
+    public @ResponseBody
+    RootNode getCompleteDataSetRegistrationsJson(
         @RequestParam Set<String> dataSet,
         @RequestParam( required = false ) String period,
         @RequestParam Date startDate,
@@ -115,11 +126,32 @@
         @RequestParam( required = false ) boolean children,
         HttpServletResponse response ) throws IOException
     {
+        List<String> fields = Lists.newArrayList( contextService.getParameterValues( "fields" ) );
+
+        if ( fields.isEmpty() )
+        {
+            fields.addAll( Preset.ALL.getFields() );
+            List<String> defaults = new ArrayList<>();
+            defaults.add("dataSet[code,name,created,lastUpdated,publicAccess,externalAccess,displayName,id," +
+                    "user[name,created,lastUpdated,externalAccess,displayName,id]," +
+                    "attributeValues[created,lastUpdated,value,attribute[code,name,created,lastUpdated,externalAccess,displayName,id]]]," +
+                    "period[code,name,externalAccess,displayName,id]," +
+                    "attributeOptionCombo[code,name,created,lastUpdated,externalAccess,displayName,id]," +
+                    "date," +
+                    "storedBy," +
+                    "organisationUnit[name,created,lastUpdated,externalAccess,displayName,id," +
+                    "user[name,created,lastUpdated,externalAccess,displayName,id]," +
+                    "attributeValues[created,lastUpdated,value,attribute[code,name,created,lastUpdated,externalAccess,displayName,id]]]");
+            fields.addAll(defaults);
+        }
+
         response.setContentType( CONTENT_TYPE_JSON );
         CompleteDataSetRegistrations completeDataSetRegistrations = getCompleteDataSetRegistrations( dataSet, period,
             startDate, endDate, orgUnit, children );
 
-        renderService.toJson( response.getOutputStream(), completeDataSetRegistrations );
+        RootNode rootNode = NodeUtils.createMetadata();
+        rootNode.addChild( fieldFilterService.filter( CompleteDataSetRegistration.class, completeDataSetRegistrations.getCompleteDataSetRegistrations(), fields ) );
+        return rootNode;
     }
 
     private CompleteDataSetRegistrations getCompleteDataSetRegistrations( Set<String> dataSet, String period,

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataApprovalController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataApprovalController.java	2016-03-04 12:13:37 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DataApprovalController.java	2016-05-19 11:11:40 +0000
@@ -79,6 +79,14 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.hisp.dhis.node.types.RootNode;
+import org.hisp.dhis.webapi.service.ContextService;
+import org.hisp.dhis.fieldfilter.FieldFilterService;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.google.common.collect.Lists;
+import org.hisp.dhis.node.Preset;
+import org.hisp.dhis.node.types.RootNode;
+import org.hisp.dhis.node.NodeUtils;
 
 import static com.google.common.collect.Lists.newArrayList;
 
@@ -128,6 +136,12 @@
     @Autowired
     private RenderService renderService;
 
+    @Autowired
+    private FieldFilterService fieldFilterService;
+
+    @Autowired
+    private ContextService contextService;
+
     // -------------------------------------------------------------------------
     // Get
     // -------------------------------------------------------------------------
@@ -178,7 +192,7 @@
     }
 
     @RequestMapping( value = STATUS_PATH, method = RequestMethod.GET, produces = ContextUtils.CONTENT_TYPE_JSON )
-    public void getApproval(
+    public @ResponseBody RootNode getApproval(
         @RequestParam Set<String> ds,
         @RequestParam( required = false ) String pe,
         @RequestParam Date startDate,
@@ -188,6 +202,28 @@
         HttpServletResponse response )
         throws IOException, WebMessageException
     {
+
+        List<String> fields = Lists.newArrayList( contextService.getParameterValues( "fields" ) );
+
+        if ( fields.isEmpty() )
+        {
+            fields.addAll( Preset.ALL.getFields() );
+            List<String> defaults = new ArrayList<>();
+
+            defaults.add("dataSet[code,name,created,lastUpdated,publicAccess,externalAccess,displayName,id," +
+                    "user[name,created,lastUpdated,externalAccess,displayName,id]," +
+                    "attributeValues[created,lastUpdated,value,attribute[code,name,created,lastUpdated,externalAccess,displayName,id]]]," +
+                    "period[code,name,externalAccess,displayName,id]," +
+                    "organisationUnit[name,created,lastUpdated,externalAccess,displayName,id," +
+                    "user[name,created,lastUpdated,externalAccess,displayName,id]," +
+                    "attributeValues[created,lastUpdated,value,attribute[code,name,created,lastUpdated,externalAccess,displayName,id]]]," +
+                    "state," +
+                    "createdByUsername," +
+                    "createdDate," +
+                    "permissions[mayApprove,mayUnapprove,mayAccept,mayUnaccept,mayReadData]");
+            fields.addAll(defaults);
+        }
+
         Set<DataSet> dataSets = parseDataSetsWithWorkflow( ds );
 
         Set<Period> periods = new HashSet<>();
@@ -229,7 +265,12 @@
         }
 
         response.setContentType( MediaType.APPLICATION_JSON_VALUE );
-        renderService.toJson( response.getOutputStream(), dataApprovalStateResponses );
+
+        RootNode rootNode = NodeUtils.createMetadata();
+
+        rootNode.addChild( fieldFilterService.filter( DataApprovalStateResponse.class, dataApprovalStateResponses.getDataApprovalStateResponses(), fields ) );
+
+        return rootNode;
     }
 
     private DataApprovalStateResponse getDataApprovalStateResponse( DataSet dataSet,

# Begin bundle
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
