# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: jhansirk@thoughtworks.com-20160426073701-\
#   3hywxxygkv8kqy9r
# target_branch: http://bazaar.launchpad.net/~dhis2-devs-\
#   core/dhis2/2.22/
# testament_sha1: 800aece116fdbff8cec76c45598873ccb6693d6a
# timestamp: 2016-05-19 17:28:42 +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-04-26 07:37:01 +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,23 @@
         @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("period[id,name,code],organisationUnit[id,name,created,lastUpdated],dataSet[code,name,created,lastUpdated,id],attributeOptionCombo[code,name,created,lastUpdated,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-04-26 07:37:01 +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,17 @@
         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("period[id,name,code],organisationUnit[id,name,created,lastUpdated],dataSet[code,name,created,lastUpdated,id]");
+            fields.addAll(defaults);
+        }
+
         Set<DataSet> dataSets = parseDataSetsWithWorkflow( ds );
 
         Set<Period> periods = new HashSet<>();
@@ -229,7 +254,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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
pJitQA==
