← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 2082: Some more refactoring, now on the web-api service side

 

------------------------------------------------------------
revno: 2082
committer: Jo Størset <storset@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2010-11-16 23:56:11 +0530
message:
  Some more refactoring, now on the web-api service side
removed:
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataSetService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataValueService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataSetService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataValueService.java
added:
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MediaType.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingServiceImpl.java
modified:
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnit.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MobileResource.java
  dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/beans.xml


--
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-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnit.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnit.java	2010-11-16 16:28:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnit.java	2010-11-16 18:26:11 +0000
@@ -38,10 +38,6 @@
 
     private String name;
 
-    private String programFormsLink;
-    
-    private String activitiesLink;
-
     public int getId()
     {
         return id;
@@ -62,34 +58,12 @@
         this.name = name;
     }
 
-    public String getProgramFormsLink()
-    {
-        return programFormsLink;
-    }
-
-    public void setProgramFormsLink( String programFormsLink )
-    {
-        this.programFormsLink = programFormsLink;
-    }
-
-    public String getActivitiesLink()
-    {
-        return activitiesLink;
-    }
-
-    public void setActivitiesLink( String activitiesLink )
-    {
-        this.activitiesLink = activitiesLink;
-    }
-
     @Override
     public void serialize( DataOutputStream dataOutputStream )
         throws IOException
     {
         dataOutputStream.write( this.id );
         dataOutputStream.writeUTF( this.name );
-        dataOutputStream.writeUTF( this.activitiesLink );
-        dataOutputStream.writeUTF( this.programFormsLink );
     }
 
     @Override
@@ -98,8 +72,6 @@
     {
         this.id = dataInputStream.readInt();
         this.name = dataInputStream.readUTF();
-        this.activitiesLink = dataInputStream.readUTF();
-        this.programFormsLink = dataInputStream.readUTF();
     }
 
 }

=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MediaType.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MediaType.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MediaType.java	2010-11-16 18:26:11 +0000
@@ -0,0 +1,13 @@
+package org.hisp.dhis.web.api.resources;
+
+public class MediaType
+{
+    public static final String ACTIVITYVALUELIST_SERIALIZED = "application/vnd.org.dhis2.activityvaluelist+serialized";
+
+    public static final String DATASETVALUE_SERIALIZED = "application/vnd.org.dhis2.datasetvalue+serialized";
+
+    public static final String ACTIVITYPLAN_SERIALIZED = "application/vnd.org.dhis2.activityplan+serialized";
+
+    public static final String MOBILE_SERIALIZED = "application/vnd.org.dhis2.mobile+serialized";
+
+}

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MobileResource.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MobileResource.java	2010-11-16 16:28:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MobileResource.java	2010-11-16 18:26:11 +0000
@@ -35,11 +35,8 @@
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
 
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.user.CurrentUserService;
@@ -49,10 +46,9 @@
 import org.hisp.dhis.web.api.model.DataSetValue;
 import org.hisp.dhis.web.api.model.MobileModel;
 import org.hisp.dhis.web.api.model.OrgUnit;
+import org.hisp.dhis.web.api.service.FacilityReportingService;
 import org.hisp.dhis.web.api.service.IActivityPlanService;
 import org.hisp.dhis.web.api.service.IActivityValueService;
-import org.hisp.dhis.web.api.service.IDataSetService;
-import org.hisp.dhis.web.api.service.IDataValueService;
 import org.hisp.dhis.web.api.service.IProgramService;
 import org.springframework.beans.factory.annotation.Required;
 
@@ -60,29 +56,19 @@
 public class MobileResource
 {
 
-    private static final String MEDIA_TYPE_MOBILE_SERIALIZED = "application/vnd.org.dhis2.mobile+serialized";
-
     // Dependencies
 
-    private IDataValueService idataValueService;
-
     private IActivityValueService iactivityValueService;
 
     private IProgramService programService;
 
     private IActivityPlanService activityPlanService;
 
-    private IDataSetService idataSetService;
+    private FacilityReportingService facilityReportingService;
 
     private CurrentUserService currentUserService;
 
     @Required
-    public void setIdataValueService( IDataValueService idataValueService )
-    {
-        this.idataValueService = idataValueService;
-    }
-
-    @Required
     public void setProgramService( IProgramService programService )
     {
         this.programService = programService;
@@ -101,9 +87,9 @@
     }
 
     @Required
-    public void setIdataSetService( IDataSetService idataSetService )
+    public void setFacilityReportingService( FacilityReportingService facilityReportingService )
     {
-        this.idataSetService = idataSetService;
+        this.facilityReportingService = facilityReportingService;
     }
 
     @Required
@@ -114,11 +100,8 @@
 
     // Resource methods
 
-    @Context
-    private UriInfo uriInfo;
-
     @GET
-    @Produces( MEDIA_TYPE_MOBILE_SERIALIZED )
+    @Produces( MediaType.MOBILE_SERIALIZED )
     public Response getOrgUnitForUser()
     {
         User user = currentUserService.getCurrentUser();
@@ -150,41 +133,63 @@
 
     @GET
     @Path( "all" )
-    @Produces( MEDIA_TYPE_MOBILE_SERIALIZED )
+    @Produces( MediaType.MOBILE_SERIALIZED )
     public MobileModel getAllDataForUser( @HeaderParam( "accept-language" ) String locale )
     {
+        
+        
         MobileModel mobileWrapper = new MobileModel();
         mobileWrapper.setActivityPlan( activityPlanService.getCurrentActivityPlan( locale ) );
 
         mobileWrapper.setPrograms( programService.getAllProgramsForLocale( locale ) );
 
-        mobileWrapper.setDatasets( idataSetService.getAllMobileDataSetsForLocale( locale ) );
+        Collection<OrganisationUnit> units = currentUserService.getCurrentUser().getOrganisationUnits();
+
+        if ( units.size() == 1 )
+        {
+            OrganisationUnit unit = units.iterator().next();
+            mobileWrapper.setDatasets( facilityReportingService.getMobileDataSetsForUnit( unit, locale )  );
+        }
+        else
+        {
+            // FIXME: Should handle multiple explicitly;
+        }
+
 
         return mobileWrapper;
     }
 
-    @POST
-    @Path( "dataSets" )
-    @Consumes( "application/vnd.org.dhis2.datasetvalue+serialized" )
-    @Produces( "application/xml" )
-    public String getValues( DataSetValue dataSetValue )
-    {
-        return idataValueService.saveValues( dataSetValue );
-    }
-
     @GET
     @Path( "activities/currentplan" )
-    @Produces( "application/vnd.org.dhis2.activityplan+serialized" )
+    @Produces( MediaType.ACTIVITYPLAN_SERIALIZED )
     public ActivityPlan getCurrentActivityPlan( @HeaderParam( "accept-language" ) String locale )
     {
         return activityPlanService.getCurrentActivityPlan( locale );
     }
 
     @POST
+    @Path( "dataSets" )
+    @Consumes( MediaType.DATASETVALUE_SERIALIZED )
+    @Produces( "application/xml" )
+    public String saveDataSetValues( DataSetValue dataSetValue )
+    {
+        Collection<OrganisationUnit> units = currentUserService.getCurrentUser().getOrganisationUnits();
+
+        if ( units.size() != 1 )
+        {
+            return "INVALID_REPORTING_UNIT";
+        }
+
+        OrganisationUnit unit = units.iterator().next();
+        
+        return facilityReportingService.saveDataSetValues( unit, dataSetValue );
+    }
+
+    @POST
     @Path( "activities" )
-    @Consumes( "application/vnd.org.dhis2.activityvaluelist+serialized" )
+    @Consumes( MediaType.ACTIVITYVALUELIST_SERIALIZED )
     @Produces( "application/xml" )
-    public String getValues( ActivityValue activityValue )
+    public String saveActivityReport( ActivityValue activityValue )
     {
         return iactivityValueService.saveValues( activityValue );
     }
@@ -195,8 +200,6 @@
 
         m.setId( unit.getId() );
         m.setName( unit.getShortName() );
-        m.setProgramFormsLink( uriInfo.getRequestUriBuilder().path( "programforms" ).build().toString() );
-        m.setActivitiesLink( uriInfo.getRequestUriBuilder().path( "activityplan/current" ).build().toString() );
 
         return m;
     }

=== removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataSetService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataSetService.java	2010-11-16 16:28:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataSetService.java	1970-01-01 00:00:00 +0000
@@ -1,223 +0,0 @@
-package org.hisp.dhis.web.api.service;
-
-import static org.hisp.dhis.i18n.I18nUtils.i18n;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.dataelement.comparator.DataElementSortOrderComparator;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.user.CurrentUserService;
-import org.hisp.dhis.web.api.model.DataElement;
-import org.hisp.dhis.web.api.model.DataSet;
-import org.hisp.dhis.web.api.model.Model;
-import org.hisp.dhis.web.api.model.ModelList;
-import org.hisp.dhis.web.api.model.Section;
-import org.hisp.dhis.web.api.utils.LocaleUtil;
-
-public class DefaultDataSetService
-    implements IDataSetService
-{
-
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-    private DataElementSortOrderComparator dataElementComparator = new DataElementSortOrderComparator();
-
-    
-    private org.hisp.dhis.dataset.DataSetService dataSetService;
-    
-    public org.hisp.dhis.dataset.DataSetService getDataSetService()
-    {
-        return dataSetService;
-    }
-
-    public void setDataSetService( org.hisp.dhis.dataset.DataSetService dataSetService )
-    {
-        this.dataSetService = dataSetService;
-    }
-
-    private org.hisp.dhis.i18n.I18nService i18nService;
-    
-    public org.hisp.dhis.i18n.I18nService getI18nService()
-    {
-        return i18nService;
-    }
-
-    public void setI18nService( org.hisp.dhis.i18n.I18nService i18nService )
-    {
-        this.i18nService = i18nService;
-    }
-
-    private CurrentUserService currentUserService;
-    public CurrentUserService getCurrentUserService()
-    {
-        return currentUserService;
-    }
-
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    // -------------------------------------------------------------------------
-    // MobileDataSetService
-    // -------------------------------------------------------------------------
-
-    
-    public List<DataSet> getAllMobileDataSetsForLocale( String localeString )
-    {
-        Collection<OrganisationUnit> units = currentUserService.getCurrentUser().getOrganisationUnits();
-
-        OrganisationUnit unit = null;
-
-        if ( units.size() > 0 )
-        {
-            unit = units.iterator().next();
-        }
-        else
-        {
-            return null;
-        }
-
-        List<DataSet> datasets = new ArrayList<DataSet>();
-        Locale locale = LocaleUtil.getLocale( localeString );
-        // AbstractModelList abstractModelList = new AbstractModelList();
-        //
-        // List<AbstractModel> abstractModels = new ArrayList<AbstractModel>();
-        //
-        for ( org.hisp.dhis.dataset.DataSet dataSet : dataSetService.getDataSetsForMobile( unit ) )
-        {
-            if ( dataSet.getPeriodType().getName().equals( "Daily" )
-                || dataSet.getPeriodType().getName().equals( "Weekly" )
-                || dataSet.getPeriodType().getName().equals( "Monthly" )
-                || dataSet.getPeriodType().getName().equals( "Yearly" )
-                || dataSet.getPeriodType().getName().equals( "Quarterly" ) )
-            {
-                datasets.add( getDataSetForLocale( dataSet.getId(), locale ) );
-            }
-        }
-        //
-        // abstractModelList.setAbstractModels(abstractModels);
-
-        return datasets;
-    }
-
-    public DataSet getDataSetForLocale( int dataSetId, Locale locale )
-    {
-        org.hisp.dhis.dataset.DataSet dataSet = dataSetService.getDataSet( dataSetId );
-        dataSet = i18n( i18nService, locale, dataSet );
-        Set<org.hisp.dhis.dataset.Section> sections = dataSet.getSections();
-
-        // Collection<org.hisp.dhis.dataelement.DataElement> dataElements =
-        // dataSet.getDataElements();
-
-        // Mobile
-        DataSet ds = new DataSet();
-
-        ds.setId( dataSet.getId() );
-        ds.setName( dataSet.getName() );
-        ds.setPeriodType( dataSet.getPeriodType().getName() );
-
-        // Mobile
-        List<Section> sectionList = new ArrayList<Section>();
-        ds.setSections( sectionList );
-
-        if ( sections.size() == 0 || sections == null )
-        {
-            // Collection<org.hisp.dhis.dataelement.DataElement> dataElements =
-            // new ArrayList<org.hisp.dhis.dataelement.DataElement>();
-            List<org.hisp.dhis.dataelement.DataElement> dataElements = new ArrayList<org.hisp.dhis.dataelement.DataElement>(
-                dataSet.getDataElements() );
-
-            Collections.sort( dataElements, dataElementComparator );
-
-            // Fake Section to store Data Elements
-            Section section = new Section();
-
-            sectionList.add( section );
-            section.setId( 0 );
-            section.setName( "" );
-
-            List<DataElement> dataElementList = new ArrayList<DataElement>();
-            section.setDataElements( dataElementList );
-
-            for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
-            {
-                // Server DataElement
-                dataElement = i18n( i18nService, locale, dataElement );
-                Set<DataElementCategoryOptionCombo> deCatOptCombs = dataElement.getCategoryCombo().getOptionCombos();
-                // Client DataElement
-                ModelList deCateOptCombo = new ModelList();
-                List<Model> listCateOptCombo = new ArrayList<Model>();
-                deCateOptCombo.setModels( listCateOptCombo );
-
-                for ( DataElementCategoryOptionCombo oneCatOptCombo : deCatOptCombs )
-                {
-                    Model oneCateOptCombo = new Model();
-                    oneCateOptCombo.setId( oneCatOptCombo.getId() );
-                    oneCateOptCombo.setName( oneCatOptCombo.getName() );
-                    listCateOptCombo.add( oneCateOptCombo );
-                }
-
-                DataElement de = new DataElement();
-                de.setId( dataElement.getId() );
-                de.setName( dataElement.getName() );
-                de.setType( dataElement.getType() );
-                de.setCategoryOptionCombos( deCateOptCombo );
-                dataElementList.add( de );
-            }
-        }
-        else
-        {
-            for ( org.hisp.dhis.dataset.Section each : sections )
-            {
-                List<org.hisp.dhis.dataelement.DataElement> dataElements = each.getDataElements();
-
-                Section section = new Section();
-                section.setId( each.getId() );
-                section.setName( each.getName() );
-                // Mobile
-                List<DataElement> dataElementList = new ArrayList<DataElement>();
-                section.setDataElements( dataElementList );
-
-                for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
-                {
-                    // Server DataElement
-                    dataElement = i18n( i18nService, locale, dataElement );
-                    Set<DataElementCategoryOptionCombo> deCatOptCombs = dataElement.getCategoryCombo()
-                        .getOptionCombos();
-
-                    // Client DataElement
-                    ModelList deCateOptCombo = new ModelList();
-                    List<Model> listCateOptCombo = new ArrayList<Model>();
-                    deCateOptCombo.setModels( listCateOptCombo );
-
-                    for ( DataElementCategoryOptionCombo oneCatOptCombo : deCatOptCombs )
-                    {
-                        Model oneCateOptCombo = new Model();
-                        oneCateOptCombo.setId( oneCatOptCombo.getId() );
-                        oneCateOptCombo.setName( oneCatOptCombo.getName() );
-                        listCateOptCombo.add( oneCateOptCombo );
-                    }
-
-                    DataElement de = new DataElement();
-                    de.setId( dataElement.getId() );
-                    de.setName( dataElement.getName() );
-                    de.setType( dataElement.getType() );
-                    de.setCategoryOptionCombos( deCateOptCombo );
-                    dataElementList.add( de );
-                }
-                sectionList.add( section );
-            }
-        }
-
-        return ds;
-    }
-
-}

=== removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataValueService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataValueService.java	2010-11-15 08:35:53 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultDataValueService.java	1970-01-01 00:00:00 +0000
@@ -1,199 +0,0 @@
-package org.hisp.dhis.web.api.service;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.period.Period;
-import org.hisp.dhis.user.CurrentUserService;
-import org.hisp.dhis.web.api.model.DataSetValue;
-import org.hisp.dhis.web.api.model.DataValue;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class DefaultDataValueService
-    implements IDataValueService
-{
-
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private org.hisp.dhis.dataset.DataSetService dataSetService;
-
-    public org.hisp.dhis.dataset.DataSetService getDataSetService()
-    {
-        return dataSetService;
-    }
-
-    public void setDataSetService( org.hisp.dhis.dataset.DataSetService dataSetService )
-    {
-        this.dataSetService = dataSetService;
-    }
-
-    private IPeriodService periodService;
-
-    public IPeriodService getPeriodService()
-    {
-        return periodService;
-    }
-
-    public void setPeriodService( IPeriodService periodService )
-    {
-        this.periodService = periodService;
-    }
-
-    private org.hisp.dhis.dataelement.DataElementCategoryService categoryService;
-
-    public org.hisp.dhis.dataelement.DataElementCategoryService getCategoryService()
-    {
-        return categoryService;
-    }
-
-    public void setCategoryService( org.hisp.dhis.dataelement.DataElementCategoryService categoryService )
-    {
-        this.categoryService = categoryService;
-    }
-
-    private org.hisp.dhis.datavalue.DataValueService dataValueService;
-
-    public org.hisp.dhis.datavalue.DataValueService getDataValueService()
-    {
-        return dataValueService;
-    }
-
-    public void setDataValueService( org.hisp.dhis.datavalue.DataValueService dataValueService )
-    {
-        this.dataValueService = dataValueService;
-    }
-
-    private CurrentUserService currentUserService;
-
-    public CurrentUserService getCurrentUserService()
-    {
-        return currentUserService;
-    }
-
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    // -------------------------------------------------------------------------
-    // DataValueService
-    // -------------------------------------------------------------------------
-
-    @Override
-    public String saveValues( DataSetValue dataSetValue )
-    {
-
-        Collection<OrganisationUnit> units = currentUserService.getCurrentUser().getOrganisationUnits();
-        OrganisationUnit unit = null;
-
-        if ( units.size() > 0 )
-        {
-            unit = units.iterator().next();
-        }
-        else
-        {
-            return "INVALID_REPORTING_UNIT";
-        }
-
-        org.hisp.dhis.dataset.DataSet dataSet = dataSetService.getDataSet( dataSetValue.getId() );
-
-        if ( !dataSetService.getDataSetsBySource( unit ).contains( dataSet ) )
-        {
-            return "INVALID_DATASET_ASSOCIATION";
-        }
-
-        org.hisp.dhis.period.Period selectedPeriod = periodService.getPeriod( dataSetValue.getpName(), dataSet );
-
-        if ( selectedPeriod == null )
-        {
-            return "INVALID_PERIOD";
-        }
-
-        Collection<org.hisp.dhis.dataelement.DataElement> dataElements = dataSet.getDataElements();
-        Collection<Integer> dataElementIds = new ArrayList<Integer>( dataSetValue.getDataValues().size() );
-
-        for ( DataValue dv : dataSetValue.getDataValues() )
-        {
-            dataElementIds.add( dv.getId() );
-        }
-
-        // if ( dataElements.size() != dataElementIds.size() )
-        // {
-        // return "INVALID_DATASET";
-        // }
-
-        Map<Integer, org.hisp.dhis.dataelement.DataElement> dataElementMap = new HashMap<Integer, org.hisp.dhis.dataelement.DataElement>();
-        for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
-        {
-            if ( !dataElementIds.contains( dataElement.getId() ) )
-            {
-                return "INVALID_DATASET";
-            }
-            dataElementMap.put( dataElement.getId(), dataElement );
-        }
-
-        // Everything is fine, hence save
-        saveDataValues( dataSetValue, dataElementMap, selectedPeriod, unit,
-            categoryService.getDefaultDataElementCategoryOptionCombo() );
-
-        return "SUCCESS";
-
-    }
-
-    // -------------------------------------------------------------------------
-    // Supportive method
-    // -------------------------------------------------------------------------
-
-    private void saveDataValues( DataSetValue dataSetValue, Map<Integer, DataElement> dataElementMap, Period period,
-        OrganisationUnit orgUnit, DataElementCategoryOptionCombo optionCombo )
-    {
-
-        org.hisp.dhis.dataelement.DataElement dataElement;
-        String value;
-
-        for ( DataValue dv : dataSetValue.getDataValues() )
-        {
-            value = dv.getVal();
-            DataElementCategoryOptionCombo cateOptCombo = categoryService.getDataElementCategoryOptionCombo( dv
-                .getCategoryOptComboID() );
-            if ( value != null && value.trim().length() == 0 )
-            {
-                value = null;
-            }
-
-            if ( value != null )
-            {
-                value = value.trim();
-            }
-
-            dataElement = dataElementMap.get( dv.getId() );
-            org.hisp.dhis.datavalue.DataValue dataValue = dataValueService.getDataValue( orgUnit, dataElement, period,
-                cateOptCombo );
-
-            if ( dataValue == null )
-            {
-                if ( value != null )
-                {
-                    dataValue = new org.hisp.dhis.datavalue.DataValue( dataElement, period, orgUnit, value, "",
-                        new Date(), "", cateOptCombo );
-                    dataValueService.addDataValue( dataValue );
-                }
-            }
-            else
-            {
-                dataValue.setValue( value );
-                dataValue.setTimestamp( new Date() );
-                dataValueService.updateDataValue( dataValue );
-            }
-
-        }
-    }
-}

=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingService.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingService.java	2010-11-16 18:26:11 +0000
@@ -0,0 +1,46 @@
+package org.hisp.dhis.web.api.service;
+
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.util.List;
+import java.util.Locale;
+
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.web.api.model.DataSet;
+import org.hisp.dhis.web.api.model.DataSetValue;
+
+public interface FacilityReportingService
+{
+
+    public List<DataSet> getMobileDataSetsForUnit( OrganisationUnit unit, String localeString );
+
+    public DataSet getDataSetForLocale( int dataSetId, Locale locale );
+
+    public String saveDataSetValues( OrganisationUnit unit, DataSetValue dataSetValue );
+
+}

=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingServiceImpl.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingServiceImpl.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingServiceImpl.java	2010-11-16 18:26:11 +0000
@@ -0,0 +1,346 @@
+package org.hisp.dhis.web.api.service;
+
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import static org.hisp.dhis.i18n.I18nUtils.i18n;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
+import org.hisp.dhis.dataelement.comparator.DataElementSortOrderComparator;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.web.api.model.DataElement;
+import org.hisp.dhis.web.api.model.DataSet;
+import org.hisp.dhis.web.api.model.DataSetValue;
+import org.hisp.dhis.web.api.model.DataValue;
+import org.hisp.dhis.web.api.model.Model;
+import org.hisp.dhis.web.api.model.ModelList;
+import org.hisp.dhis.web.api.model.Section;
+import org.hisp.dhis.web.api.utils.LocaleUtil;
+import org.springframework.beans.factory.annotation.Required;
+
+public class FacilityReportingServiceImpl
+    implements FacilityReportingService
+{
+
+    private DataElementSortOrderComparator dataElementComparator = new DataElementSortOrderComparator();
+
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private IPeriodService periodService;
+
+    private org.hisp.dhis.dataelement.DataElementCategoryService categoryService;
+
+    private org.hisp.dhis.datavalue.DataValueService dataValueService;
+
+    private org.hisp.dhis.dataset.DataSetService dataSetService;
+
+    private org.hisp.dhis.i18n.I18nService i18nService;
+
+    // -------------------------------------------------------------------------
+    // Service methods
+    // -------------------------------------------------------------------------
+
+    public List<DataSet> getMobileDataSetsForUnit( OrganisationUnit unit, String localeString )
+    {
+
+        List<DataSet> datasets = new ArrayList<DataSet>();
+        Locale locale = LocaleUtil.getLocale( localeString );
+
+        for ( org.hisp.dhis.dataset.DataSet dataSet : dataSetService.getDataSetsForMobile( unit ) )
+        {
+            if ( dataSet.getPeriodType().getName().equals( "Daily" )
+                || dataSet.getPeriodType().getName().equals( "Weekly" )
+                || dataSet.getPeriodType().getName().equals( "Monthly" )
+                || dataSet.getPeriodType().getName().equals( "Yearly" )
+                || dataSet.getPeriodType().getName().equals( "Quarterly" ) )
+            {
+                datasets.add( getDataSetForLocale( dataSet.getId(), locale ) );
+            }
+        }
+
+        return datasets;
+    }
+
+    public DataSet getDataSetForLocale( int dataSetId, Locale locale )
+    {
+        org.hisp.dhis.dataset.DataSet dataSet = dataSetService.getDataSet( dataSetId );
+        dataSet = i18n( i18nService, locale, dataSet );
+        Set<org.hisp.dhis.dataset.Section> sections = dataSet.getSections();
+
+        // Collection<org.hisp.dhis.dataelement.DataElement> dataElements =
+        // dataSet.getDataElements();
+
+        // Mobile
+        DataSet ds = new DataSet();
+
+        ds.setId( dataSet.getId() );
+        ds.setName( dataSet.getName() );
+        ds.setPeriodType( dataSet.getPeriodType().getName() );
+
+        // Mobile
+        List<Section> sectionList = new ArrayList<Section>();
+        ds.setSections( sectionList );
+
+        if ( sections.size() == 0 || sections == null )
+        {
+            // Collection<org.hisp.dhis.dataelement.DataElement> dataElements =
+            // new ArrayList<org.hisp.dhis.dataelement.DataElement>();
+            List<org.hisp.dhis.dataelement.DataElement> dataElements = new ArrayList<org.hisp.dhis.dataelement.DataElement>(
+                dataSet.getDataElements() );
+
+            Collections.sort( dataElements, dataElementComparator );
+
+            // Fake Section to store Data Elements
+            Section section = new Section();
+
+            sectionList.add( section );
+            section.setId( 0 );
+            section.setName( "" );
+
+            List<DataElement> dataElementList = new ArrayList<DataElement>();
+            section.setDataElements( dataElementList );
+
+            for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
+            {
+                // Server DataElement
+                dataElement = i18n( i18nService, locale, dataElement );
+                Set<DataElementCategoryOptionCombo> deCatOptCombs = dataElement.getCategoryCombo().getOptionCombos();
+                // Client DataElement
+                ModelList deCateOptCombo = new ModelList();
+                List<Model> listCateOptCombo = new ArrayList<Model>();
+                deCateOptCombo.setModels( listCateOptCombo );
+
+                for ( DataElementCategoryOptionCombo oneCatOptCombo : deCatOptCombs )
+                {
+                    Model oneCateOptCombo = new Model();
+                    oneCateOptCombo.setId( oneCatOptCombo.getId() );
+                    oneCateOptCombo.setName( oneCatOptCombo.getName() );
+                    listCateOptCombo.add( oneCateOptCombo );
+                }
+
+                DataElement de = new DataElement();
+                de.setId( dataElement.getId() );
+                de.setName( dataElement.getName() );
+                de.setType( dataElement.getType() );
+                de.setCategoryOptionCombos( deCateOptCombo );
+                dataElementList.add( de );
+            }
+        }
+        else
+        {
+            for ( org.hisp.dhis.dataset.Section each : sections )
+            {
+                List<org.hisp.dhis.dataelement.DataElement> dataElements = each.getDataElements();
+
+                Section section = new Section();
+                section.setId( each.getId() );
+                section.setName( each.getName() );
+                // Mobile
+                List<DataElement> dataElementList = new ArrayList<DataElement>();
+                section.setDataElements( dataElementList );
+
+                for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
+                {
+                    // Server DataElement
+                    dataElement = i18n( i18nService, locale, dataElement );
+                    Set<DataElementCategoryOptionCombo> deCatOptCombs = dataElement.getCategoryCombo()
+                        .getOptionCombos();
+
+                    // Client DataElement
+                    ModelList deCateOptCombo = new ModelList();
+                    List<Model> listCateOptCombo = new ArrayList<Model>();
+                    deCateOptCombo.setModels( listCateOptCombo );
+
+                    for ( DataElementCategoryOptionCombo oneCatOptCombo : deCatOptCombs )
+                    {
+                        Model oneCateOptCombo = new Model();
+                        oneCateOptCombo.setId( oneCatOptCombo.getId() );
+                        oneCateOptCombo.setName( oneCatOptCombo.getName() );
+                        listCateOptCombo.add( oneCateOptCombo );
+                    }
+
+                    DataElement de = new DataElement();
+                    de.setId( dataElement.getId() );
+                    de.setName( dataElement.getName() );
+                    de.setType( dataElement.getType() );
+                    de.setCategoryOptionCombos( deCateOptCombo );
+                    dataElementList.add( de );
+                }
+                sectionList.add( section );
+            }
+        }
+
+        return ds;
+    }
+
+    @Override
+    public String saveDataSetValues( OrganisationUnit unit, DataSetValue dataSetValue )
+    {
+
+        org.hisp.dhis.dataset.DataSet dataSet = dataSetService.getDataSet( dataSetValue.getId() );
+
+        if ( !dataSetService.getDataSetsBySource( unit ).contains( dataSet ) )
+        {
+            return "INVALID_DATASET_ASSOCIATION";
+        }
+
+        org.hisp.dhis.period.Period selectedPeriod = periodService.getPeriod( dataSetValue.getpName(), dataSet );
+
+        if ( selectedPeriod == null )
+        {
+            return "INVALID_PERIOD";
+        }
+
+        Collection<org.hisp.dhis.dataelement.DataElement> dataElements = dataSet.getDataElements();
+        Collection<Integer> dataElementIds = new ArrayList<Integer>( dataSetValue.getDataValues().size() );
+
+        for ( DataValue dv : dataSetValue.getDataValues() )
+        {
+            dataElementIds.add( dv.getId() );
+        }
+
+        // if ( dataElements.size() != dataElementIds.size() )
+        // {
+        // return "INVALID_DATASET";
+        // }
+
+        Map<Integer, org.hisp.dhis.dataelement.DataElement> dataElementMap = new HashMap<Integer, org.hisp.dhis.dataelement.DataElement>();
+        for ( org.hisp.dhis.dataelement.DataElement dataElement : dataElements )
+        {
+            if ( !dataElementIds.contains( dataElement.getId() ) )
+            {
+                return "INVALID_DATASET";
+            }
+            dataElementMap.put( dataElement.getId(), dataElement );
+        }
+
+        // Everything is fine, hence save
+        saveDataValues( dataSetValue, dataElementMap, selectedPeriod, unit,
+            categoryService.getDefaultDataElementCategoryOptionCombo() );
+
+        return "SUCCESS";
+
+    }
+
+    // -------------------------------------------------------------------------
+    // Supportive method
+    // -------------------------------------------------------------------------
+
+    private void saveDataValues( DataSetValue dataSetValue,
+        Map<Integer, org.hisp.dhis.dataelement.DataElement> dataElementMap, Period period, OrganisationUnit orgUnit,
+        DataElementCategoryOptionCombo optionCombo )
+    {
+
+        org.hisp.dhis.dataelement.DataElement dataElement;
+        String value;
+
+        for ( DataValue dv : dataSetValue.getDataValues() )
+        {
+            value = dv.getVal();
+            DataElementCategoryOptionCombo cateOptCombo = categoryService.getDataElementCategoryOptionCombo( dv
+                .getCategoryOptComboID() );
+            if ( value != null && value.trim().length() == 0 )
+            {
+                value = null;
+            }
+
+            if ( value != null )
+            {
+                value = value.trim();
+            }
+
+            dataElement = dataElementMap.get( dv.getId() );
+            org.hisp.dhis.datavalue.DataValue dataValue = dataValueService.getDataValue( orgUnit, dataElement, period,
+                cateOptCombo );
+
+            if ( dataValue == null )
+            {
+                if ( value != null )
+                {
+                    dataValue = new org.hisp.dhis.datavalue.DataValue( dataElement, period, orgUnit, value, "",
+                        new Date(), "", cateOptCombo );
+                    dataValueService.addDataValue( dataValue );
+                }
+            }
+            else
+            {
+                dataValue.setValue( value );
+                dataValue.setTimestamp( new Date() );
+                dataValueService.updateDataValue( dataValue );
+            }
+
+        }
+    }
+
+    // -------------------------------------------------------------------------
+    // Dependency setters
+    // -------------------------------------------------------------------------
+
+    @Required
+    public void setPeriodService( IPeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    @Required
+    public void setCategoryService( org.hisp.dhis.dataelement.DataElementCategoryService categoryService )
+    {
+        this.categoryService = categoryService;
+    }
+
+    @Required
+    public void setDataValueService( org.hisp.dhis.datavalue.DataValueService dataValueService )
+    {
+        this.dataValueService = dataValueService;
+    }
+
+    @Required
+    public void setDataSetService( org.hisp.dhis.dataset.DataSetService dataSetService )
+    {
+        this.dataSetService = dataSetService;
+    }
+
+    @Required
+    public void setI18nService( org.hisp.dhis.i18n.I18nService i18nService )
+    {
+        this.i18nService = i18nService;
+    }
+
+}

=== removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataSetService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataSetService.java	2010-11-16 16:28:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataSetService.java	1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-package org.hisp.dhis.web.api.service;
-
-import java.util.List;
-import java.util.Locale;
-
-import org.hisp.dhis.web.api.model.ModelList;
-import org.hisp.dhis.web.api.model.DataSet;
-
-public interface IDataSetService {
-
-	List<DataSet> getAllMobileDataSetsForLocale( String localeString );
-	
-	DataSet getDataSetForLocale( int dataSetId,Locale locale);
-}

=== removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataValueService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataValueService.java	2010-09-24 11:12:49 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/IDataValueService.java	1970-01-01 00:00:00 +0000
@@ -1,9 +0,0 @@
-package org.hisp.dhis.web.api.service;
-
-import org.hisp.dhis.web.api.model.DataSetValue;
-
-public interface IDataValueService {
-
-	public String saveValues( DataSetValue dataSetValue );
-	
-}

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/beans.xml	2010-11-16 16:28:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/beans.xml	2010-11-16 18:26:11 +0000
@@ -7,11 +7,10 @@
 
     <bean id="org.hisp.dhis.web.api.resources.MobileResource" class="org.hisp.dhis.web.api.resources.MobileResource"
         scope="prototype">
-        <property name="idataValueService" ref="org.hisp.dhis.web.api.service.IDataValueService" />
+        <property name="facilityReportingService" ref="org.hisp.dhis.web.api.service.FacilityReportingService" />
         <property name="iactivityValueService" ref="org.hisp.dhis.web.api.service.IActivityValueService" />
         <property name="programService" ref="org.hisp.dhis.web.api.service.IProgramService" />
         <property name="activityPlanService" ref="org.hisp.dhis.web.api.service.IActivityPlanService" />
-        <property name="idataSetService" ref="org.hisp.dhis.web.api.service.IDataSetService" />
         <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
     </bean>
 
@@ -34,28 +33,12 @@
         <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
     </bean>
 
-    <bean id="org.hisp.dhis.web.api.service.IDataSetService" class="org.hisp.dhis.web.api.service.DefaultDataSetService">
+    <bean id="org.hisp.dhis.web.api.service.FacilityReportingService" class="org.hisp.dhis.web.api.service.FacilityReportingServiceImpl">
         <property name="dataSetService" ref="org.hisp.dhis.dataset.DataSetService" />
         <property name="i18nService" ref="org.hisp.dhis.i18n.I18nService" />
-        <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-    </bean>
-
-    <bean id="org.hisp.dhis.web.api.service.IDataValueService" class="org.hisp.dhis.web.api.service.DefaultDataValueService">
-        <property name="dataSetService">
-            <ref bean="org.hisp.dhis.dataset.DataSetService" />
-        </property>
-        <property name="periodService">
-            <ref bean="org.hisp.dhis.web.api.service.IPeriodService" />
-        </property>
-        <property name="categoryService">
-            <ref bean="org.hisp.dhis.dataelement.DataElementCategoryService" />
-        </property>
-        <property name="dataValueService">
-            <ref bean="org.hisp.dhis.datavalue.DataValueService" />
-        </property>
-        <property name="currentUserService">
-            <ref bean="org.hisp.dhis.user.CurrentUserService" />
-        </property>
+        <property name="periodService" ref="org.hisp.dhis.web.api.service.IPeriodService" />
+        <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
+        <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
     </bean>
 
     <bean id="org.hisp.dhis.web.api.service.IActivityValueService" class="org.hisp.dhis.web.api.service.DefaultActivityValueService">