← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 2183: Serving xml as well (for better visibility), cleaned up, refactored, small fixes.

 

------------------------------------------------------------
revno: 2183
committer: Jo Størset <storset@xxxxxxxxx>
branch nick: dhis2
timestamp: Fri 2010-11-26 16:30:40 +0530
message:
  Serving xml as well (for better visibility), cleaned up, refactored, small fixes.
modified:
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ActivityPlan.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Beneficiary.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/MobileModel.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ModelList.java
  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/OrgUnits.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/PatientIdentifier.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ProgramStage.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Section.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/comparator/ActivityComparator.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/provider/AbstractDataSerializableConsumer.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/java/org/hisp/dhis/web/api/resources/OrgUnitResource.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/ActivityReportingServiceImpl.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultProgramService.java
  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/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-api/src/test/java/org/hisp/dhis/web/api/model/OrgUnitsTest.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-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ActivityPlan.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ActivityPlan.java	2010-11-21 11:37:49 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ActivityPlan.java	2010-11-26 11:00:40 +0000
@@ -32,6 +32,8 @@
 import java.io.IOException;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlRootElement;
+@XmlRootElement
 public class ActivityPlan
     implements DataStreamSerializable
 {

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Beneficiary.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Beneficiary.java	2010-11-25 08:05:58 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Beneficiary.java	2010-11-26 11:00:40 +0000
@@ -50,19 +50,19 @@
     private List<PatientAttribute> patientAttValues;
 
     private PatientAttribute groupAttribute;
-    
-    private List<PatientIdentifier> identifiers;    
+
+    private List<PatientIdentifier> identifiers;
 
     private String gender;
 
     private Date birthDate;
 
     private String bloodGroup;
-    
+
     private Date registrationDate;
-    
+
     private Character dobType;
-    
+
     public List<PatientIdentifier> getIdentifiers()
     {
         return identifiers;
@@ -73,6 +73,32 @@
         this.identifiers = identifiers;
     }
 
+    public String getFullName()
+    {
+        boolean space = false;
+        String name = "";
+
+        if ( firstName != null && firstName.length() != 0 )
+        {
+            name = firstName;
+            space = true;
+        }
+        if ( middleName != null && middleName.length() != 0 )
+        {
+            if ( space )
+                name += " ";
+            name += middleName;
+            space = true;
+        }
+        if ( lastName != null && lastName.length() != 0 )
+        {
+            if ( space )
+                name += " ";
+            name += lastName;
+        }
+        return name;
+    }
+
     public int getAge()
     {
         return age;
@@ -205,48 +231,60 @@
         dout.writeUTF( this.getMiddleName() );
         dout.writeUTF( this.getLastName() );
         dout.writeInt( this.getAge() );
-        
-        // Write static attributes if it is required (gender, dobtype, birthdate, bloodgroup, registrationdate)
-        if(gender != null){
-            dout.writeBoolean( true );
-            dout.writeUTF(gender);
-        }else{
-            dout.writeBoolean( false );
-        }
-        
-        if(dobType != null){
-            dout.writeBoolean( true );
-            dout.writeChar(dobType);
-        }else{
-            dout.writeBoolean( false );
-        }
-        
-        if(birthDate != null){
-            dout.writeBoolean( true );
-            dout.writeLong(birthDate.getTime());
-        }else{
-            dout.writeBoolean( false );
-        }
-        
-        if(bloodGroup != null){
-            dout.writeBoolean( true );
-            dout.writeUTF(bloodGroup);
-        }else{
-            dout.writeBoolean( false );
-        }
-        
-        if(registrationDate != null){
-            dout.writeBoolean( true );
-            dout.writeLong(registrationDate.getTime());
-        }else{
-            dout.writeBoolean( false );
-        }
-        //End
-        
-        
-        // Write attribute which is used as group factor of beneficiary.
+
+        if ( gender != null )
+        {
+            dout.writeBoolean( true );
+            dout.writeUTF( gender );
+        }
+        else
+        {
+            dout.writeBoolean( false );
+        }
+
+        if ( dobType != null )
+        {
+            dout.writeBoolean( true );
+            dout.writeChar( dobType );
+        }
+        else
+        {
+            dout.writeBoolean( false );
+        }
+
+        if ( birthDate != null )
+        {
+            dout.writeBoolean( true );
+            dout.writeLong( birthDate.getTime() );
+        }
+        else
+        {
+            dout.writeBoolean( false );
+        }
+
+        if ( bloodGroup != null )
+        {
+            dout.writeBoolean( true );
+            dout.writeUTF( bloodGroup );
+        }
+        else
+        {
+            dout.writeBoolean( false );
+        }
+
+        if ( registrationDate != null )
+        {
+            dout.writeBoolean( true );
+            dout.writeLong( registrationDate.getTime() );
+        }
+        else
+        {
+            dout.writeBoolean( false );
+        }
+
         /*
-         * False: no group factor True: with group factor
+         * Write attribute which is used as group factor of beneficiary - false:
+         * no group factor, true: with group factor
          */
         if ( this.getGroupAttribute() != null )
         {
@@ -264,10 +302,11 @@
         {
             dout.writeUTF( att.getName() + ":" + att.getValue() );
         }
-        
-        //Write PatientIdentifier
+
+        // Write PatientIdentifier
         dout.writeInt( identifiers.size() );
-        for(PatientIdentifier each : identifiers){
+        for ( PatientIdentifier each : identifiers )
+        {
             each.serialize( dout );
         }
 
@@ -283,5 +322,4 @@
 
     }
 
-
 }

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/MobileModel.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/MobileModel.java	2010-11-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/MobileModel.java	2010-11-26 11:00:40 +0000
@@ -32,6 +32,9 @@
 import java.io.IOException;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
 public class MobileModel
     implements DataStreamSerializable
 {

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ModelList.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ModelList.java	2010-11-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ModelList.java	2010-11-26 11:00:40 +0000
@@ -39,7 +39,7 @@
 
     private List<Model> models;
 
-    public List<Model> getAbstractModels()
+    public List<Model> getModels()
     {
         return models;
     }

=== 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-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnit.java	2010-11-26 11:00:40 +0000
@@ -31,6 +31,9 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 
+import javax.xml.bind.annotation.XmlAttachmentRef;
+import javax.xml.bind.annotation.XmlAttribute;
+
 
 public class OrgUnit implements DataStreamSerializable {
 
@@ -46,6 +49,7 @@
     
     private String uploadActivityReportUrl;
     
+    @XmlAttribute
     public int getId()
     {
         return id;
@@ -56,6 +60,7 @@
         this.id = id;
     }
 
+    @XmlAttribute
     public String getName()
     {
         return name;

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnits.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnits.java	2010-11-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/OrgUnits.java	2010-11-26 11:00:40 +0000
@@ -4,19 +4,33 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
-
-
-public class OrgUnits
-    extends ArrayList<OrgUnit>
-    implements DataStreamSerializable
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+
+@XmlRootElement
+public class OrgUnits implements DataStreamSerializable
 {
+    private List<OrgUnit> orgUnits = new ArrayList<OrgUnit>();
+    
+    @XmlElement(name="orgUnit")
+    public List<OrgUnit> getOrgUnits() {
+        return orgUnits;
+    }
+    
+    public void setOrgUnits( List<OrgUnit> orgUnits )
+    {
+        this.orgUnits = orgUnits;
+    }
 
     @Override
     public void serialize( DataOutputStream dataOutputStream )
         throws IOException
     {
-        dataOutputStream.writeInt( size() );
-        for ( OrgUnit unit : this )
+        dataOutputStream.writeInt( orgUnits.size() );
+        for ( OrgUnit unit : orgUnits )
         {
             unit.serialize( dataOutputStream );
         }
@@ -27,14 +41,14 @@
     public void deSerialize( DataInputStream dataInputStream )
         throws IOException
     {
-        this.clear();
+        orgUnits = new ArrayList<OrgUnit>();
         int size = dataInputStream.readInt();
 
         for ( int i = 0; i < size; i++ )
         {
             OrgUnit unit = new OrgUnit();
             unit.deSerialize( dataInputStream );
-            add( unit );
+            orgUnits.add( unit );
         }
     }
 

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/PatientIdentifier.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/PatientIdentifier.java	2010-11-25 08:05:58 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/PatientIdentifier.java	2010-11-26 11:00:40 +0000
@@ -4,18 +4,25 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 
+import javax.xml.bind.annotation.XmlAttribute;
+
 public class PatientIdentifier implements DataStreamSerializable
 {
     private String identifierType;
     
     private String identifier;
     
+    public PatientIdentifier( )
+    {
+    }
+
     public PatientIdentifier( String identifierType, String identifier )
     {
         this.identifierType = identifierType;
         this.identifier = identifier;
     }
 
+    @XmlAttribute
     public String getIdentifierType()
     {
         return identifierType;
@@ -26,6 +33,7 @@
         this.identifierType = identifierType;
     }
 
+    @XmlAttribute
     public String getIdentifier()
     {
         return identifier;
@@ -48,7 +56,8 @@
     public void deSerialize( DataInputStream dataInputStream )
         throws IOException
     {
-        
+        identifierType = dataInputStream.readUTF();
+        identifier = dataInputStream.readUTF();
     }
     
     

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ProgramStage.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ProgramStage.java	2010-11-18 04:09:03 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/ProgramStage.java	2010-11-26 11:00:40 +0000
@@ -66,7 +66,7 @@
             dout.writeUTF( de.getType() );
             dout.writeBoolean( de.isCompulsory() );
             
-            List<Model> cateOptCombos = de.getCategoryOptionCombos().getAbstractModels();
+            List<Model> cateOptCombos = de.getCategoryOptionCombos().getModels();
             if ( cateOptCombos == null || cateOptCombos.size() <= 0 )
             {
                 dout.writeInt( 0 );

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Section.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Section.java	2010-11-18 04:09:03 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/Section.java	2010-11-26 11:00:40 +0000
@@ -65,7 +65,7 @@
                 dout.writeUTF( de.getType() );
                 dout.writeBoolean( de.isCompulsory() );
                 
-                List<Model> cateOptCombos = de.getCategoryOptionCombos().getAbstractModels();
+                List<Model> cateOptCombos = de.getCategoryOptionCombos().getModels();
                 if ( cateOptCombos == null || cateOptCombos.size() <= 0 )
                 {
                     dout.writeInt( 0 );

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/comparator/ActivityComparator.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/comparator/ActivityComparator.java	2010-11-18 03:02:18 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/model/comparator/ActivityComparator.java	2010-11-26 11:00:40 +0000
@@ -10,6 +10,6 @@
     @Override
     public int compare( Activity act1, Activity act2 )
     {
-        return act2.getBeneficiary().getFirstName().compareToIgnoreCase( act1.getBeneficiary().getFirstName() );
+        return act2.getBeneficiary().getFullName().compareToIgnoreCase( act1.getBeneficiary().getFullName() );
     }
 }

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/provider/AbstractDataSerializableConsumer.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/provider/AbstractDataSerializableConsumer.java	2010-11-20 08:35:36 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/provider/AbstractDataSerializableConsumer.java	2010-11-26 11:00:40 +0000
@@ -53,7 +53,6 @@
     @Override
     public boolean isReadable( Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType )
     {
-        System.out.println("****" + type.getName() + " - " + this.getClass().getName());
         return DataStreamSerializable.class.isAssignableFrom( type );
     }
 

=== 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-18 11:32:14 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/MobileResource.java	2010-11-26 11:00:40 +0000
@@ -27,13 +27,16 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriInfo;
 
 import org.hisp.dhis.organisationunit.OrganisationUnit;
@@ -47,7 +50,7 @@
 import com.sun.jersey.api.core.ResourceContext;
 
 @Path( "/" )
-@Produces( DhisMediaType.MOBILE_SERIALIZED )
+@Produces( { DhisMediaType.MOBILE_SERIALIZED, MediaType.APPLICATION_XML } )
 public class MobileResource
 {
 
@@ -73,11 +76,15 @@
 
         OrgUnits orgUnits = new OrgUnits();
 
+        List<OrgUnit> unitList = new ArrayList<OrgUnit>();
+        
         for ( OrganisationUnit unit : units )
         {
-            orgUnits.add( getOrgUnit( unit ) );
+            unitList.add( getOrgUnit( unit ) );
         }
 
+        orgUnits.setOrgUnits( unitList );
+
         return orgUnits;
     }
 

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/OrgUnitResource.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/OrgUnitResource.java	2010-11-18 11:32:14 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/resources/OrgUnitResource.java	2010-11-26 11:00:40 +0000
@@ -8,21 +8,28 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.web.api.model.ActivityPlan;
 import org.hisp.dhis.web.api.model.ActivityValue;
 import org.hisp.dhis.web.api.model.DataSetValue;
 import org.hisp.dhis.web.api.model.MobileModel;
 import org.hisp.dhis.web.api.service.ActivityReportingService;
+import org.hisp.dhis.web.api.service.ActivityReportingServiceImpl;
 import org.hisp.dhis.web.api.service.FacilityReportingService;
 import org.hisp.dhis.web.api.service.IProgramService;
 import org.springframework.beans.factory.annotation.Required;
 
-@Produces( DhisMediaType.MOBILE_SERIALIZED )
+@Produces( { DhisMediaType.MOBILE_SERIALIZED, MediaType.APPLICATION_XML } )
 @Consumes( DhisMediaType.MOBILE_SERIALIZED )
 public class OrgUnitResource
 {
 
+    private static Log log = LogFactory.getLog( ActivityReportingServiceImpl.class );
+
+    private static final boolean DEBUG = log.isDebugEnabled();
+
     private IProgramService programService;
 
     private ActivityReportingService activityReportingService;
@@ -31,8 +38,9 @@
 
     // Set by parent resource
     private OrganisationUnit unit;
-    
-    public void setOrgUnit(OrganisationUnit unit) {
+
+    public void setOrgUnit( OrganisationUnit unit )
+    {
         this.unit = unit;
     }
 
@@ -42,9 +50,12 @@
     {
         MobileModel mobileModel = new MobileModel();
 
+        if ( DEBUG )
+            log.debug( "Getting all resources for org unit " + unit.getName() );
+
         mobileModel.setActivityPlan( activityReportingService.getCurrentActivityPlan( unit, locale ) );
         mobileModel.setPrograms( programService.getPrograms( unit, locale ) );
-        mobileModel.setDatasets( facilityReportingService.getMobileDataSetsForUnit( unit, locale )  );
+        mobileModel.setDatasets( facilityReportingService.getMobileDataSetsForUnit( unit, locale ) );
 
         return mobileModel;
     }
@@ -58,7 +69,7 @@
 
     @POST
     @Path( "dataSets" )
-    @Produces(MediaType.TEXT_PLAIN)
+    @Produces( MediaType.TEXT_PLAIN )
     public String saveDataSetValues( DataSetValue dataSetValue )
     {
         return facilityReportingService.saveDataSetValues( unit, dataSetValue );
@@ -66,14 +77,14 @@
 
     @POST
     @Path( "activities" )
-    @Produces(MediaType.TEXT_PLAIN)
+    @Produces( MediaType.TEXT_PLAIN )
     public String saveActivityReport( ActivityValue activityValue )
     {
         return activityReportingService.saveActivityReport( unit, activityValue );
     }
 
     // Setters...
-    
+
     @Required
     public void setProgramService( IProgramService programService )
     {

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/ActivityReportingServiceImpl.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/ActivityReportingServiceImpl.java	2010-11-25 08:05:58 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/ActivityReportingServiceImpl.java	2010-11-26 11:00:40 +0000
@@ -1,5 +1,32 @@
 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.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -9,6 +36,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.hisp.dhis.activityplan.Activity;
 import org.hisp.dhis.activityplan.ActivityPlanService;
 import org.hisp.dhis.dataelement.DataElement;
@@ -17,7 +46,6 @@
 import org.hisp.dhis.patient.Patient;
 import org.hisp.dhis.patient.PatientAttributeService;
 import org.hisp.dhis.patient.PatientIdentifier;
-import org.hisp.dhis.patient.PatientIdentifierService;
 import org.hisp.dhis.patient.PatientMobileSetting;
 import org.hisp.dhis.patient.PatientMobileSettingService;
 import org.hisp.dhis.patientattributevalue.PatientAttributeValue;
@@ -25,7 +53,6 @@
 import org.hisp.dhis.patientdatavalue.PatientDataValue;
 import org.hisp.dhis.program.ProgramStageDataElement;
 import org.hisp.dhis.program.ProgramStageInstance;
-import org.hisp.dhis.user.CurrentUserService;
 import org.hisp.dhis.web.api.model.ActivityPlan;
 import org.hisp.dhis.web.api.model.ActivityValue;
 import org.hisp.dhis.web.api.model.Beneficiary;
@@ -35,12 +62,17 @@
 import org.hisp.dhis.web.api.model.comparator.ActivityComparator;
 import org.joda.time.DateMidnight;
 import org.joda.time.DateTime;
+import org.joda.time.Period;
 import org.springframework.beans.factory.annotation.Required;
 
 public class ActivityReportingServiceImpl
     implements ActivityReportingService
 {
 
+    private static Log log = LogFactory.getLog( ActivityReportingServiceImpl.class );
+
+    private static final boolean DEBUG = log.isDebugEnabled();
+
     private ActivityComparator activityComparator = new ActivityComparator();
 
     // -------------------------------------------------------------------------
@@ -59,11 +91,7 @@
 
     private org.hisp.dhis.patientdatavalue.PatientDataValueService dataValueService;
 
-    private CurrentUserService currentUserService;
-    
     private PatientMobileSettingService patientMobileSettingService;
-    
-//    private PatientIdentifierService patientIdentifierService;
 
     // -------------------------------------------------------------------------
     // MobileDataSetService
@@ -81,43 +109,49 @@
 
         List<org.hisp.dhis.web.api.model.Activity> items = new ArrayList<org.hisp.dhis.web.api.model.Activity>();
 
-        int i = 0;
+        if (DEBUG)
+            log.debug( "Filtering through " + allActivities.size() + " activities" );
+
         for ( Activity activity : allActivities )
         {
-            // there are error on db with patientattributeid 14, so I limit the
-            // patient to be downloaded
-            if ( i > 10 )
-            {
-                break;
-            }
-
             long dueTime = activity.getDueDate().getTime();
+            
             if ( to.isBefore( dueTime ) )
             {
                 continue;
             }
 
+
+            if (DEBUG)
+                log.debug( "Activity " + activity.getBeneficiary().getFirstName() + ", " + activity.getTask().getProgramStage().getName() );
+
             if ( from.isBefore( dueTime ) )
             {
                 items.add( getActivityModel( activity ) );
-                i++;
             }
             else if ( !activity.getTask().isCompleted() )
             {
                 org.hisp.dhis.web.api.model.Activity a = getActivityModel( activity );
+                a.setLate( true );
                 items.add( a );
-                a.setLate( true );
-                i++;
             }
+            
+            if (items.size() > 10)
+                break;
         }
-        if ( !items.isEmpty() )
+
+        if (DEBUG)
+            log.debug( "Found " + items.size() + " current activities" );
+
+        if ( items.isEmpty() )
         {
-            Collections.sort( items, activityComparator );
-            plan.setActivitiesList( items );
+            return null;
         }
 
+        Collections.sort( items, activityComparator );
+        plan.setActivitiesList( items );
+
         return plan;
-
     }
 
     private org.hisp.dhis.web.api.model.Activity getActivityModel( org.hisp.dhis.activityplan.Activity activity )
@@ -151,10 +185,8 @@
         return task;
     }
 
-    private org.hisp.dhis.web.api.model.Beneficiary getBeneficiaryModel( Patient patient )
+    private Beneficiary getBeneficiaryModel( Patient patient )
     {
-        PatientMobileSetting setting = patientMobileSettingService.getCurrentSetting()==null?null:patientMobileSettingService.getCurrentSetting().iterator().next();
-        
         Beneficiary beneficiary = new Beneficiary();
 
         List<PatientAttribute> patientAtts = new ArrayList<PatientAttribute>();
@@ -163,33 +195,34 @@
         beneficiary.setFirstName( patient.getFirstName() );
         beneficiary.setLastName( patient.getLastName() );
         beneficiary.setMiddleName( patient.getMiddleName() );
-        int currentYear = new Date().getYear();
-        int age = currentYear - patient.getBirthDate().getYear();
-        beneficiary.setAge( age );
-        
-        // Set static attributes if it is required (gender, dobtype, birthdate, bloodgroup, registrationdate)
-        if(setting != null){
-            if(setting.getGender()){
+
+        Period period = new Period( new DateTime(patient.getBirthDate()), new DateTime());
+        beneficiary.setAge( period.getYears() );
+
+        PatientMobileSetting setting = getSettings();
+
+        if ( setting != null )
+        {
+            if ( setting.getGender() )
+            {
                 beneficiary.setGender( patient.getGender() );
             }
-            if(setting.getDobtype()){
+            if ( setting.getDobtype() )
+            {
                 beneficiary.setDobType( patient.getDobType() );
             }
-            if(setting.getBirthdate()){
+            if ( setting.getBirthdate() )
+            {
                 beneficiary.setBirthDate( patient.getBirthDate() );
             }
-            if(setting.getBloodgroup()){
+            if ( setting.getBloodgroup() )
+            {
                 beneficiary.setBloodGroup( patient.getBloodGroup() );
             }
-            if(setting.getRegistrationdate()){
+            if ( setting.getRegistrationdate() )
+            {
                 beneficiary.setRegistrationDate( patient.getRegistrationDate() );
             }
-        }else{
-            beneficiary.setGender(null);
-            beneficiary.setBirthDate( null );
-            beneficiary.setDobType( null );
-            beneficiary.setBloodGroup( null );
-            beneficiary.setRegistrationDate( null );
         }
 
         // Set attribute which is used to group beneficiary on mobile (only if
@@ -208,11 +241,13 @@
         patientAttribute = null;
 
         // Set all attributes
-        
+
         List<org.hisp.dhis.patient.PatientAttribute> atts;
-        if(setting != null){
+        if ( setting != null )
+        {
             atts = setting.getPatientAttributes();
-            for(org.hisp.dhis.patient.PatientAttribute each : atts){
+            for ( org.hisp.dhis.patient.PatientAttribute each : atts )
+            {
                 PatientAttributeValue value = patientAttValueService.getPatientAttributeValue( patient, each );
                 if ( value != null )
                 {
@@ -220,23 +255,36 @@
                 }
             }
         }
-        
+
         // Set all identifier
         Set<PatientIdentifier> patientIdentifiers = patient.getIdentifiers();
         List<org.hisp.dhis.web.api.model.PatientIdentifier> identifiers = new ArrayList<org.hisp.dhis.web.api.model.PatientIdentifier>();
-        if(patientIdentifiers.size() > 0){
-            
-            for(PatientIdentifier each : patientIdentifiers){
-                identifiers.add( new org.hisp.dhis.web.api.model.PatientIdentifier(each.getIdentifierType().getName(), each.getIdentifier()) );
+        if ( patientIdentifiers.size() > 0 )
+        {
+
+            for ( PatientIdentifier id : patientIdentifiers )
+            {
+                identifiers.add( new org.hisp.dhis.web.api.model.PatientIdentifier( id.getIdentifierType().getName(),
+                    id.getIdentifier() ) );
             }
-            
+
             beneficiary.setIdentifiers( identifiers );
         }
-        
+
         beneficiary.setPatientAttValues( patientAtts );
         return beneficiary;
     }
 
+    private PatientMobileSetting getSettings()
+    {
+        PatientMobileSetting setting = null;
+
+        Collection<PatientMobileSetting> currentSetting = patientMobileSettingService.getCurrentSetting();
+        if ( currentSetting != null && !currentSetting.isEmpty() )
+            setting = currentSetting.iterator().next();
+        return setting;
+    }
+
     // -------------------------------------------------------------------------
     // DataValueService
     // -------------------------------------------------------------------------
@@ -337,7 +385,7 @@
 
                     dataValue = new PatientDataValue( programStageInstance, dataElement, cateOptCombo, orgUnit,
                         new Date(), value, false );
-                    
+
                     dataValueService.savePatientDataValue( dataValue );
                 }
             }
@@ -399,25 +447,9 @@
     }
 
     @Required
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    @Required
     public void setPatientMobileSettingService( PatientMobileSettingService patientMobileSettingService )
     {
         this.patientMobileSettingService = patientMobileSettingService;
     }
 
-//    @Required
-//    public void setPatientIdentifierService( PatientIdentifierService patientIdentifierService )
-//    {
-//        this.patientIdentifierService = patientIdentifierService;
-//    }
-    
-    
-    
-    
-
 }

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultProgramService.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultProgramService.java	2010-11-20 08:35:36 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/DefaultProgramService.java	2010-11-26 11:00:40 +0000
@@ -83,7 +83,7 @@
                     Model mobileCategpryOptCombo = new Model();
                     mobileCategpryOptCombo.setId( categoryOptCombo.getId() );
                     mobileCategpryOptCombo.setName( categoryOptCombo.getName() );
-                    mobileCategpryOptCombos.getAbstractModels().add( mobileCategpryOptCombo );
+                    mobileCategpryOptCombos.getModels().add( mobileCategpryOptCombo );
                 }
 
                 DataElement de = new DataElement();

=== modified 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	2010-11-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/web/api/service/FacilityReportingServiceImpl.java	2010-11-26 11:00:40 +0000
@@ -127,7 +127,7 @@
         List<Section> sectionList = new ArrayList<Section>();
         ds.setSections( sectionList );
 
-        if ( sections.size() == 0 || sections == null )
+        if ( sections == null || sections.size() == 0 )
         {
             // Collection<org.hisp.dhis.dataelement.DataElement> dataElements =
             // new ArrayList<org.hisp.dhis.dataelement.DataElement>();

=== 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-23 07:16:02 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/beans.xml	2010-11-26 11:00:40 +0000
@@ -3,7 +3,7 @@
   xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd";>
 
-  <!-- Resource -->
+  <!-- Resources -->
 
   <bean id="org.hisp.dhis.web.api.resources.MobileResource" class="org.hisp.dhis.web.api.resources.MobileResource"
     scope="prototype">
@@ -32,7 +32,6 @@
     <property name="activityPlanService" ref="org.hisp.dhis.activityplan.ActivityPlanService" />
     <property name="patientAttValueService" ref="org.hisp.dhis.patientattributevalue.PatientAttributeValueService" />
     <property name="patientAttService" ref="org.hisp.dhis.patient.PatientAttributeService" />
-    <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
     <property name="programStageInstanceService" ref="org.hisp.dhis.program.ProgramStageInstanceService" />
     <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
     <property name="dataValueService" ref="org.hisp.dhis.patientdatavalue.PatientDataValueService" />
@@ -58,23 +57,11 @@
   <!-- ImportDataValue beans -->
 
   <bean id="org.hisp.dhis.web.api.action.ImportDataValueAction" class="org.hisp.dhis.web.api.action.ImportDataValueAction">
-
-    <property name="programStageInstanceService">
-      <ref bean="org.hisp.dhis.program.ProgramStageInstanceService" />
-    </property>
-    <property name="patientDataValueService">
-      <ref bean="org.hisp.dhis.patientdatavalue.PatientDataValueService" />
-    </property>
-    <property name="dataElementService">
-      <ref bean="org.hisp.dhis.dataelement.DataElementService" />
-    </property>
-    <property name="orgUnitService">
-      <ref bean="org.hisp.dhis.organisationunit.OrganisationUnitService" />
-    </property>
-    <property name="dataElementCategoryService">
-      <ref bean="org.hisp.dhis.dataelement.DataElementCategoryService" />
-    </property>
-
+    <property name="programStageInstanceService" ref="org.hisp.dhis.program.ProgramStageInstanceService" />
+    <property name="patientDataValueService" ref="org.hisp.dhis.patientdatavalue.PatientDataValueService" />
+    <property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />
+    <property name="orgUnitService" ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
+    <property name="dataElementCategoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
   </bean>
 
 </beans>

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/test/java/org/hisp/dhis/web/api/model/OrgUnitsTest.java'
--- dhis-2/dhis-web/dhis-web-api/src/test/java/org/hisp/dhis/web/api/model/OrgUnitsTest.java	2010-11-18 06:08:29 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/test/java/org/hisp/dhis/web/api/model/OrgUnitsTest.java	2010-11-26 11:00:40 +0000
@@ -7,6 +7,8 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
 
 import org.hisp.dhis.web.api.model.OrgUnit;
 import org.hisp.dhis.web.api.model.OrgUnits;
@@ -25,14 +27,15 @@
         DataOutputStream dos = new DataOutputStream( baos );
         
         OrgUnits units = new OrgUnits();
-        units.add( unit );
+        units.setOrgUnits( Arrays.asList( new OrgUnit[] {unit} ));
         units.serialize( dos );
         dos.flush();
         OrgUnits units2 = new OrgUnits( );
         units2.deSerialize( new DataInputStream( new ByteArrayInputStream( baos.toByteArray() ) ) );
-        assertEquals( 1, units2.size() );
+        List<OrgUnit> unitList = units2.getOrgUnits();
+        assertEquals( 1, unitList.size() );
 
-        OrgUnit unit2 = units2.get( 0 );
+        OrgUnit unit2 = unitList.get( 0 );
         assertEquals( unit.getName(), unit2.getName() );
         assertEquals( unit.getId(), unit2.getId() );