← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 15335: [mobile] update message conversations for J2ME Agg

 

------------------------------------------------------------
revno: 15335
committer: Hong Em <em.hispvietnam@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2014-05-21 20:44:34 +0700
message:
  [mobile] update message conversations for J2ME Agg
added:
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Conversation.java
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MessageConversation.java
modified:
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Message.java
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java
  dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java
  dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java
  dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java
  dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java
  dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.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-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java	2014-05-21 13:44:34 +0000
@@ -35,6 +35,7 @@
 import org.hisp.dhis.api.mobile.model.ActivityPlan;
 import org.hisp.dhis.api.mobile.model.ActivityValue;
 import org.hisp.dhis.api.mobile.model.Message;
+import org.hisp.dhis.api.mobile.model.MessageConversation;
 import org.hisp.dhis.api.mobile.model.PatientAttribute;
 import org.hisp.dhis.api.mobile.model.User;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.LostEvent;
@@ -111,4 +112,9 @@
     String sendMessage( Message message )
         throws NotAllowedException;
 
+    public Collection<MessageConversation> downloadMessageConversation()
+        throws NotAllowedException;
+
+    public Collection<Message> getMessage( String conversationId )
+        throws NotAllowedException;
 }

=== added file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Conversation.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Conversation.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Conversation.java	2014-05-21 13:44:34 +0000
@@ -0,0 +1,196 @@
+package org.hisp.dhis.api.mobile.model;
+
+/*
+ * Copyright (c) 2004-2014, 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.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class Conversation
+    implements DataStreamSerializable
+{
+    private String clientVersion;
+
+    private Collection<MessageConversation> conversations;
+
+    private List<MessageConversation> conversationList = new ArrayList<MessageConversation>();
+
+    private Collection<Message> messages;
+
+    private List<Message> messageList = new ArrayList<Message>();
+
+    public Conversation( Collection<Message> messages )
+    {
+        this.messages = messages;
+    }
+
+    public Conversation( String clientVersion, Collection<MessageConversation> conversations )
+    {
+        this.clientVersion = clientVersion;
+        this.conversations = conversations;
+    }
+
+    public Conversation()
+    {
+
+    }
+
+    public String getClientVersion()
+    {
+        return clientVersion;
+    }
+
+    public void setClientVersion( String clientVersion )
+    {
+        this.clientVersion = clientVersion;
+    }
+
+    public Collection<MessageConversation> getConversations()
+    {
+        return conversations;
+    }
+
+    public void setConversations( Collection<MessageConversation> conversations )
+    {
+        this.conversations = conversations;
+    }
+
+    public List<MessageConversation> getConversationList()
+    {
+        return conversationList;
+    }
+
+    public void setConversationList( List<MessageConversation> conversationList )
+    {
+        this.conversationList = conversationList;
+    }
+
+    public Collection<Message> getMessages()
+    {
+        return messages;
+    }
+
+    public void setMessages( Collection<Message> messages )
+    {
+        this.messages = messages;
+    }
+
+    public List<Message> getMessageList()
+    {
+        return messageList;
+    }
+
+    public void setMessageList( List<Message> messageList )
+    {
+        this.messageList = messageList;
+    }
+
+    @Override
+    public void serialize( DataOutputStream dout )
+        throws IOException
+    {
+        if ( conversations == null )
+        {
+            dout.writeInt( 0 );
+        }
+        else
+        {
+            dout.writeInt( conversations.size() );
+            for ( MessageConversation conversation : conversations )
+            {
+                conversation.setClientVersion( DataStreamSerializable.TWO_POINT_TEN );
+                conversation.serialize( dout );
+            }
+        }
+
+        if ( messages == null )
+        {
+            dout.writeInt( 0 );
+        }
+        else
+        {
+            dout.writeInt( messages.size() );
+            for ( Message message : messages )
+            {
+                message.setClientVersion( DataStreamSerializable.TWO_POINT_TEN );
+                message.serialize( dout );
+            }
+        }
+
+    }
+
+    @Override
+    public void deSerialize( DataInputStream din )
+        throws IOException
+    {
+        int conversationSize = din.readInt();
+
+        for ( int i = 0; i < conversationSize; i++ )
+        {
+            MessageConversation conversation = new MessageConversation();
+            conversation.deSerialize( din );
+            conversationList.add( conversation );
+        }
+
+        int messageSize = din.readInt();
+
+        for ( int i = 0; i < messageSize; i++ )
+        {
+            Message message = new Message();
+            message.deSerialize( din );
+            messageList.add( message );
+        }
+
+    }
+
+    @Override
+    public void serializeVersion2_8( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_9( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_10( DataOutputStream dout )
+        throws IOException
+    {
+
+    }
+
+}

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Message.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Message.java	2014-05-16 06:06:48 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Message.java	2014-05-21 13:44:34 +0000
@@ -32,8 +32,6 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-import javax.xml.bind.annotation.XmlAttribute;
-
 public class Message
     implements DataStreamSerializable
 {
@@ -44,20 +42,10 @@
 
     private String text;
 
+    private String lastSenderName;
+
     private Recipient recipient;
 
-    public Message( String subject, String text, Recipient recipient )
-    {
-        super();
-        this.subject = subject;
-        this.text = text;
-        this.recipient = recipient;
-    }
-
-    public Message()
-    {
-    }
-
     public String getClientVersion()
     {
         return clientVersion;
@@ -68,7 +56,6 @@
         this.clientVersion = clientVersion;
     }
 
-    @XmlAttribute
     public String getSubject()
     {
         return subject;
@@ -79,7 +66,6 @@
         this.subject = subject;
     }
 
-    @XmlAttribute
     public String getText()
     {
         return text;
@@ -90,6 +76,16 @@
         this.text = text;
     }
 
+    public String getLastSenderName()
+    {
+        return lastSenderName;
+    }
+
+    public void setLastSenderName( String lastSenderName )
+    {
+        this.lastSenderName = lastSenderName;
+    }
+
     public Recipient getRecipient()
     {
         return recipient;
@@ -104,10 +100,21 @@
     public void serialize( DataOutputStream dout )
         throws IOException
     {
-        dout.writeUTF( this.subject );
-        dout.writeUTF( this.text );
-
-        this.getRecipient().serialize( dout );
+
+        dout.writeUTF( this.getSubject() );
+        dout.writeUTF( this.getText() );
+        if ( this.getLastSenderName() != null )
+        {
+            dout.writeUTF( this.getLastSenderName() );
+        }
+
+        int recipientSize = (this.recipient == null || this.recipient.getUserList() == null) ? 0 : this.recipient
+            .getUserList().size();
+        dout.writeInt( recipientSize );
+        if ( recipientSize > 0 )
+        {
+            this.getRecipient().serialize( dout );
+        }
 
     }
 
@@ -117,6 +124,10 @@
     {
         subject = din.readUTF();
         text = din.readUTF();
+        if ( lastSenderName != null )
+        {
+            lastSenderName = din.readUTF();
+        }
 
         int recipientSize = din.readInt();
 
@@ -150,10 +161,6 @@
     public void serializeVersion2_10( DataOutputStream dataOutputStream )
         throws IOException
     {
-        dataOutputStream.writeUTF( this.subject );
-        dataOutputStream.writeUTF( this.text );
-
-        this.getRecipient().serialize( dataOutputStream );
 
     }
 

=== added file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MessageConversation.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MessageConversation.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MessageConversation.java	2014-05-21 13:44:34 +0000
@@ -0,0 +1,114 @@
+package org.hisp.dhis.api.mobile.model;
+
+/*
+ * Copyright (c) 2004-2014, 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.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class MessageConversation
+    implements DataStreamSerializable
+{
+    private String clientVersion;
+
+    private int id;
+
+    private String subject;
+
+    public String getClientVersion()
+    {
+        return clientVersion;
+    }
+
+    public void setClientVersion( String clientVersion )
+    {
+        this.clientVersion = clientVersion;
+    }
+
+    public int getId()
+    {
+        return id;
+    }
+
+    public void setId( int id )
+    {
+        this.id = id;
+    }
+
+    public String getSubject()
+    {
+        return subject;
+    }
+
+    public void setSubject( String subject )
+    {
+        this.subject = subject;
+    }
+
+    @Override
+    public void serialize( DataOutputStream dout )
+        throws IOException
+    {
+        dout.writeInt( id );
+        dout.writeUTF( subject );
+
+    }
+
+    @Override
+    public void deSerialize( DataInputStream din )
+        throws IOException
+    {
+
+        this.id = din.readInt();
+        this.subject = din.readUTF();
+
+    }
+
+    @Override
+    public void serializeVersion2_8( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_9( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_10( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+}

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java	2014-05-21 13:44:34 +0000
@@ -68,9 +68,13 @@
     private String sendFeedbackUrl;
 
     private String findUserUrl;
-    
+
     private String sendMessageUrl;
 
+    private String downloadMessageConversationUrl;
+
+    private String getMessageUrl;
+
     private String updateContactUrl;
 
     private String findPatientUrl;
@@ -242,8 +246,6 @@
     {
         this.findUserUrl = findUserUrl;
     }
-    
-    
 
     public String getSendMessageUrl()
     {
@@ -255,6 +257,26 @@
         this.sendMessageUrl = sendMessageUrl;
     }
 
+    public String getDownloadMessageConversationUrl()
+    {
+        return downloadMessageConversationUrl;
+    }
+
+    public void setDownloadMessageConversationUrl( String downloadMessageConversationUrl )
+    {
+        this.downloadMessageConversationUrl = downloadMessageConversationUrl;
+    }
+
+    public String getGetMessageUrl()
+    {
+        return getMessageUrl;
+    }
+
+    public void setGetMessageUrl( String getMessageUrl )
+    {
+        this.getMessageUrl = getMessageUrl;
+    }
+
     public String getUpdateContactUrl()
     {
         return updateContactUrl;
@@ -422,6 +444,8 @@
         dataOutputStream.writeUTF( sendFeedbackUrl );
         dataOutputStream.writeUTF( findUserUrl );
         dataOutputStream.writeUTF( sendMessageUrl );
+        dataOutputStream.writeUTF( downloadMessageConversationUrl );
+        dataOutputStream.writeUTF( getMessageUrl );
         dataOutputStream.writeUTF( updateContactUrl );
         dataOutputStream.writeUTF( findPatientUrl );
         dataOutputStream.writeUTF( registerPersonUrl );
@@ -457,6 +481,8 @@
         sendFeedbackUrl = dataInputStream.readUTF();
         findUserUrl = dataInputStream.readUTF();
         sendMessageUrl = dataInputStream.readUTF();
+        downloadMessageConversationUrl = dataInputStream.readUTF();
+        getMessageUrl = dataInputStream.readUTF();
         updateContactUrl = dataInputStream.readUTF();
         findPatientUrl = dataInputStream.readUTF();
         registerPersonUrl = dataInputStream.readUTF();
@@ -509,6 +535,8 @@
         dataOutputStream.writeUTF( this.sendFeedbackUrl );
         dataOutputStream.writeUTF( this.findUserUrl );
         dataOutputStream.writeUTF( this.sendMessageUrl );
+        dataOutputStream.writeUTF( this.downloadMessageConversationUrl );
+        dataOutputStream.writeUTF( this.getMessageUrl );
         // dataOutputStream.writeUTF( this.updateContactUrl );
     }
 
@@ -530,6 +558,8 @@
         dataOutputStream.writeUTF( sendFeedbackUrl );
         dataOutputStream.writeUTF( findUserUrl );
         dataOutputStream.writeUTF( sendMessageUrl );
+        dataOutputStream.writeUTF( downloadMessageConversationUrl );
+        dataOutputStream.writeUTF( getMessageUrl );
         dataOutputStream.writeUTF( updateContactUrl );
         dataOutputStream.writeUTF( findPatientUrl );
         dataOutputStream.writeUTF( registerPersonUrl );

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java	2014-05-16 06:06:48 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java	2014-05-21 13:44:34 +0000
@@ -147,4 +147,4 @@
 
     }
 
-}
+}
\ No newline at end of file

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java	2014-05-21 09:48:18 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java	2014-05-21 13:44:34 +0000
@@ -1972,4 +1972,56 @@
 
         return MESSAGE_SENT;
     }
+
+    @Override
+    public Collection<org.hisp.dhis.api.mobile.model.MessageConversation> downloadMessageConversation()
+        throws NotAllowedException
+    {
+        Collection<MessageConversation> conversations = new HashSet<MessageConversation>();
+
+        Collection<org.hisp.dhis.api.mobile.model.MessageConversation> mobileConversationList = new HashSet<org.hisp.dhis.api.mobile.model.MessageConversation>();
+
+        conversations = new ArrayList<MessageConversation>( messageService.getMessageConversations( 0, 10 ) );
+
+        for ( MessageConversation conversation : conversations )
+        {
+            if ( conversation.getLastSenderFirstname() != null )
+            {
+                org.hisp.dhis.api.mobile.model.MessageConversation messConversation = new org.hisp.dhis.api.mobile.model.MessageConversation();
+                messConversation.setId( conversation.getId() );
+                messConversation.setSubject( conversation.getSubject() );
+                mobileConversationList.add( messConversation );
+            }
+
+        }
+
+        return mobileConversationList;
+    }
+
+    @Override
+    public Collection<org.hisp.dhis.api.mobile.model.Message> getMessage( String conversationId )
+        throws NotAllowedException
+    {
+
+        MessageConversation conversation = messageService.getMessageConversation( Integer.parseInt( conversationId ) );
+        List<Message> messageList = new ArrayList<Message>( conversation.getMessages() );
+
+        Collection<org.hisp.dhis.api.mobile.model.Message> messages = new HashSet<org.hisp.dhis.api.mobile.model.Message>();
+
+        for ( Message message : messageList )
+        {
+
+            if ( message.getSender().getFirstName() != null )
+            {
+
+                org.hisp.dhis.api.mobile.model.Message messageMobile = new org.hisp.dhis.api.mobile.model.Message();
+                messageMobile.setSubject( conversation.getSubject() );
+                messageMobile.setText( message.getText() );
+                messageMobile.setLastSenderName( message.getSender().getName() );
+                messages.add( messageMobile );
+            }
+        }
+
+        return messages;
+    }
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java	2014-05-21 13:44:34 +0000
@@ -62,6 +62,8 @@
         unit.setSendFeedbackUrl( "sendFeedbackUrl" );
         unit.setFindUserUrl( "findUserUrl" );
         unit.setSendMessageUrl( "sendMessageUrl" );
+        unit.setDownloadMessageConversationUrl( "downloadMessageConversationUrl" );
+        unit.setGetMessageUrl( "getMessageUrl" );
         unit.setUpdateContactUrl( "updateContactUrl" );
         unit.setFindPatientUrl( "findPatientUrl" );
         unit.setUploadProgramStageUrl( "uploadProgramStageUrl" );

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java	2014-05-21 13:44:34 +0000
@@ -88,6 +88,8 @@
         orgUnit.setSendFeedbackUrl( "sendFeedback" );
         orgUnit.setFindUserUrl( "findUser" );
         orgUnit.setSendMessageUrl( "sendMessage" );
+        orgUnit.setDownloadMessageConversationUrl( "downloadMessageConversation" );
+        orgUnit.setGetMessageUrl( "getMessage" );
         orgUnit.setUpdateContactUrl( "updateContactForMobile" );
         orgUnit.setFindPatientUrl( "findPatient" );
         orgUnit.setRegisterPersonUrl( "registerPerson" );

=== modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java'
--- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java	2014-05-21 13:44:34 +0000
@@ -149,7 +149,9 @@
         orgUnit.setUpdateNewVersionUrl( getUrl( request, unit.getId(), "updateNewVersionUrl" ) );
         orgUnit.setSendFeedbackUrl( getUrl( request, unit.getId(), "sendFeedback" ) );
         orgUnit.setFindUserUrl( getUrl( request, unit.getId(), "findUser" ) );
-        orgUnit.setSendMessageUrl(getUrl( request, unit.getId(), "sendMessage" ));
+        orgUnit.setSendMessageUrl( getUrl( request, unit.getId(), "sendMessage" ) );
+        orgUnit.setDownloadMessageConversationUrl( getUrl( request, unit.getId(), "downloadMessageConversation" ) );
+        orgUnit.setGetMessageUrl( getUrl( request, unit.getId(), "getMessage" ) );
         orgUnit.setUpdateContactUrl( getUrl( request, unit.getId(), "updateContactForMobile" ) );
         orgUnit.setFindPatientUrl( getUrl( request, unit.getId(), "findPatient" ) );
         orgUnit.setRegisterPersonUrl( getUrl( request, unit.getId(), "registerPerson" ) );

=== modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java'
--- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java	2014-05-21 09:03:33 +0000
+++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java	2014-05-21 13:44:34 +0000
@@ -40,6 +40,7 @@
 import org.hisp.dhis.api.mobile.NotAllowedException;
 import org.hisp.dhis.api.mobile.model.ActivityValue;
 import org.hisp.dhis.api.mobile.model.Contact;
+import org.hisp.dhis.api.mobile.model.Conversation;
 import org.hisp.dhis.api.mobile.model.DataSetList;
 import org.hisp.dhis.api.mobile.model.DataSetValue;
 import org.hisp.dhis.api.mobile.model.DataSetValueList;
@@ -112,7 +113,9 @@
     // For client version 2.8 and lower
     @RequestMapping( method = RequestMethod.GET, value = "orgUnits/{id}/all" )
     @ResponseBody
-    public MobileModel getAllDataForOrgUnit2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale )
+    public MobileModel getAllDataForOrgUnit2_8( @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale )
     {
         MobileModel mobileModel = new MobileModel();
         mobileModel.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT );
@@ -127,8 +130,10 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/updateDataSets" )
     @ResponseBody
-    public DataSetList checkUpdatedDataSet2_8( @PathVariable int id, @RequestBody DataSetList dataSetList,
-        @RequestHeader( "accept-language" ) String locale )
+    public DataSetList checkUpdatedDataSet2_8( @PathVariable
+    int id, @RequestBody
+    DataSetList dataSetList, @RequestHeader( "accept-language" )
+    String locale )
     {
         DataSetList returnList = facilityReportingService.getUpdatedDataSet( dataSetList, getUnit( id ), locale );
         returnList.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT );
@@ -143,7 +148,9 @@
      */
     @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/dataSets" )
     @ResponseBody
-    public String saveDataSetValues2_8( @PathVariable int id, @RequestBody DataSetValue dataSetValue )
+    public String saveDataSetValues2_8( @PathVariable
+    int id, @RequestBody
+    DataSetValue dataSetValue )
         throws NotAllowedException
     {
         facilityReportingService.saveDataSetValues( getUnit( id ), dataSetValue );
@@ -159,7 +166,9 @@
      */
     @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/activities" )
     @ResponseBody
-    public String saveActivityReport2_8( @PathVariable int id, @RequestBody ActivityValue activityValue )
+    public String saveActivityReport2_8( @PathVariable
+    int id, @RequestBody
+    ActivityValue activityValue )
         throws NotAllowedException
     {
         // FIXME set the last argument to 0 to fix compilation error
@@ -169,8 +178,10 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/activitiyplan" )
     @ResponseBody
-    public MobileModel updatePrograms2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale,
-        @RequestBody ModelList programsFromClient )
+    public MobileModel updatePrograms2_8( @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale, @RequestBody
+    ModelList programsFromClient )
     {
         MobileModel model = new MobileModel();
         model.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT );
@@ -182,7 +193,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "orgUnits/{id}/changeLanguageDataSet" )
     @ResponseBody
-    public DataSetList changeLanguageDataSet2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale )
+    public DataSetList changeLanguageDataSet2_8( @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale )
     {
         return facilityReportingService.getDataSetsForLocale( getUnit( id ), locale );
     }
@@ -191,8 +204,10 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/all" )
     @ResponseBody
-    public MobileModel getAllDataForOrgUnit( @PathVariable String clientVersion, @PathVariable int id,
-        @RequestHeader( "accept-language" ) String locale )
+    public MobileModel getAllDataForOrgUnit( @PathVariable
+    String clientVersion, @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale )
     {
         MobileModel mobileModel = new MobileModel();
         mobileModel.setClientVersion( clientVersion );
@@ -210,8 +225,11 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/updateDataSets" )
     @ResponseBody
-    public DataSetList checkUpdatedDataSet( @PathVariable String clientVersion, @PathVariable int id,
-        @RequestBody DataSetList dataSetList, @RequestHeader( "accept-language" ) String locale )
+    public DataSetList checkUpdatedDataSet( @PathVariable
+    String clientVersion, @PathVariable
+    int id, @RequestBody
+    DataSetList dataSetList, @RequestHeader( "accept-language" )
+    String locale )
     {
         DataSetList returnList = facilityReportingService.getUpdatedDataSet( dataSetList, getUnit( id ), locale );
         returnList.setClientVersion( clientVersion );
@@ -227,7 +245,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/dataSets" )
     @ResponseBody
-    public String saveDataSetValues( @PathVariable int id, @RequestBody DataSetValue dataSetValue )
+    public String saveDataSetValues( @PathVariable
+    int id, @RequestBody
+    DataSetValue dataSetValue )
         throws NotAllowedException
     {
         facilityReportingService.saveDataSetValues( getUnit( id ), dataSetValue );
@@ -236,7 +256,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/dataSetValue" )
     @ResponseBody
-    public DataSetValueList getDataSetValues( @PathVariable int id, @RequestBody DataSetList dataSetList )
+    public DataSetValueList getDataSetValues( @PathVariable
+    int id, @RequestBody
+    DataSetList dataSetList )
         throws NotAllowedException
     {
         return facilityReportingService.getDataSetValues( getUnit( id ), dataSetList );
@@ -244,8 +266,11 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activitiyplan" )
     @ResponseBody
-    public MobileModel updatePrograms( @PathVariable String clientVersion, @PathVariable int id,
-        @RequestHeader( "accept-language" ) String locale, @RequestBody ModelList programsFromClient )
+    public MobileModel updatePrograms( @PathVariable
+    String clientVersion, @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale, @RequestBody
+    ModelList programsFromClient )
     {
         MobileModel model = new MobileModel();
         model.setClientVersion( clientVersion );
@@ -283,7 +308,9 @@
      */
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activities" )
     @ResponseBody
-    public String saveActivityReport( @PathVariable int id, @RequestBody ActivityValue activityValue )
+    public String saveActivityReport( @PathVariable
+    int id, @RequestBody
+    ActivityValue activityValue )
         throws NotAllowedException
     {
         // FIXME set the last argument to 0 to fix compilation error
@@ -293,7 +320,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/changeLanguageDataSet" )
     @ResponseBody
-    public DataSetList changeLanguageDataSet( @PathVariable int id, @RequestHeader( "accept-language" ) String locale )
+    public DataSetList changeLanguageDataSet( @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale )
     {
         return facilityReportingService.getDataSetsForLocale( getUnit( id ), locale );
     }
@@ -307,8 +336,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/all" )
     @ResponseBody
-    public org.hisp.dhis.api.mobile.model.LWUITmodel.MobileModel getAllDataForOrgUnitLWUIT(
-        @PathVariable String clientVersion, @PathVariable int id )
+    public org.hisp.dhis.api.mobile.model.LWUITmodel.MobileModel getAllDataForOrgUnitLWUIT( @PathVariable
+    String clientVersion, @PathVariable
+    int id )
     {
         org.hisp.dhis.api.mobile.model.LWUITmodel.MobileModel mobileModel = new org.hisp.dhis.api.mobile.model.LWUITmodel.MobileModel();
         mobileModel.setClientVersion( clientVersion );
@@ -327,7 +357,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/findPatient" )
     @ResponseBody
-    public Patient findPatientByName( @PathVariable int id, @RequestHeader( "patientId" ) String patientId )
+    public Patient findPatientByName( @PathVariable
+    int id, @RequestHeader( "patientId" )
+    String patientId )
         throws NotAllowedException
     {
         return activityReportingService.findPatient( Integer.parseInt( patientId ) );
@@ -335,8 +367,10 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/findPatientInAdvanced/{programId}" )
     @ResponseBody
-    public String findPatientInAdvanced( @PathVariable int programId, @PathVariable int id,
-        @RequestHeader( "name" ) String keyword )
+    public String findPatientInAdvanced( @PathVariable
+    int programId, @PathVariable
+    int id, @RequestHeader( "name" )
+    String keyword )
         throws NotAllowedException
     {
         return activityReportingService.findPatientInAdvanced( keyword, id, programId );
@@ -344,8 +378,10 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/LWUIT/orgUnits/{id}/uploadProgramStage/{patientId}" )
     @ResponseBody
-    public String saveProgramStage( @PathVariable int patientId, @PathVariable int id,
-        @RequestBody ProgramStage programStage )
+    public String saveProgramStage( @PathVariable
+    int patientId, @PathVariable
+    int id, @RequestBody
+    ProgramStage programStage )
         throws NotAllowedException
     {
         return activityReportingService.saveProgramStage( programStage, patientId, id );
@@ -353,7 +389,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/LWUIT/orgUnits/{id}/uploadSingleEventWithoutRegistration" )
     @ResponseBody
-    public String saveSingleEventWithoutRegistration( @PathVariable int id, @RequestBody ProgramStage programStage )
+    public String saveSingleEventWithoutRegistration( @PathVariable
+    int id, @RequestBody
+    ProgramStage programStage )
         throws NotAllowedException
     {
         return activityReportingService.saveSingleEventWithoutRegistration( programStage, id );
@@ -361,7 +399,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/enrollProgram" )
     @ResponseBody
-    public Patient enrollProgram( @PathVariable int id, @RequestHeader( "enrollInfo" ) String enrollInfo )
+    public Patient enrollProgram( @PathVariable
+    int id, @RequestHeader( "enrollInfo" )
+    String enrollInfo )
         throws NotAllowedException
     {
         return activityReportingService.enrollProgram( enrollInfo, null, new Date() );
@@ -369,7 +409,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/LWUIT/orgUnits/{id}/addRelationship" )
     @ResponseBody
-    public Patient addRelationship( @PathVariable int id, @RequestBody Relationship enrollmentRelationship )
+    public Patient addRelationship( @PathVariable
+    int id, @RequestBody
+    Relationship enrollmentRelationship )
         throws NotAllowedException
     {
         return activityReportingService.addRelationship( enrollmentRelationship, id );
@@ -377,7 +419,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/downloadAnonymousProgram" )
     @ResponseBody
-    public Program getAnonymousProgram( @PathVariable int id, @RequestHeader( "programType" ) String programType )
+    public Program getAnonymousProgram( @PathVariable
+    int id, @RequestHeader( "programType" )
+    String programType )
         throws NotAllowedException
     {
         return activityReportingService.getAllProgramByOrgUnit( id, programType );
@@ -385,7 +429,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/findProgram" )
     @ResponseBody
-    public Program findProgram( @PathVariable int id, @RequestHeader( "info" ) String programInfo )
+    public Program findProgram( @PathVariable
+    int id, @RequestHeader( "info" )
+    String programInfo )
         throws NotAllowedException
     {
         return activityReportingService.findProgram( programInfo );
@@ -393,7 +439,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/findLostToFollowUp" )
     @ResponseBody
-    public String findLostToFollowUp( @PathVariable int id, @RequestHeader( "searchEventInfos" ) String searchEventInfos )
+    public String findLostToFollowUp( @PathVariable
+    int id, @RequestHeader( "searchEventInfos" )
+    String searchEventInfos )
         throws NotAllowedException
     {
         return activityReportingService.findLostToFollowUp( id, searchEventInfos );
@@ -401,7 +449,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/LWUIT/orgUnits/{id}/handleLostToFollowUp" )
     @ResponseBody
-    public Notification handleLostToFollowUp( @PathVariable int id, @RequestBody LostEvent lostEvent )
+    public Notification handleLostToFollowUp( @PathVariable
+    int id, @RequestBody
+    LostEvent lostEvent )
         throws NotAllowedException
     {
         return activityReportingService.handleLostToFollowUp( lostEvent );
@@ -409,7 +459,9 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/generateRepeatableEvent" )
     @ResponseBody
-    public Patient generateRepeatableEvent( @PathVariable int id, @RequestHeader( "eventInfo" ) String eventInfo )
+    public Patient generateRepeatableEvent( @PathVariable
+    int id, @RequestHeader( "eventInfo" )
+    String eventInfo )
         throws NotAllowedException
     {
         return activityReportingService.generateRepeatableEvent( id, eventInfo );
@@ -467,8 +519,10 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/LWUIT/orgUnits/{id}/registerPerson" )
     @ResponseBody
-    public Patient savePatient( @PathVariable int id, @RequestBody Patient patient,
-        @RequestHeader( "programid" ) String programId )
+    public Patient savePatient( @PathVariable
+    int id, @RequestBody
+    Patient patient, @RequestHeader( "programid" )
+    String programId )
         throws NotAllowedException
     {
         return activityReportingService.savePatient( patient, id, programId );
@@ -476,8 +530,11 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/getVariesInfo" )
     @ResponseBody
-    public PatientIdentifierAndAttribute getVariesInfo( @PathVariable String clientVersion, @PathVariable int id,
-        @RequestHeader( "accept-language" ) String locale, @RequestHeader( "programid" ) String programId )
+    public PatientIdentifierAndAttribute getVariesInfo( @PathVariable
+    String clientVersion, @PathVariable
+    int id, @RequestHeader( "accept-language" )
+    String locale, @RequestHeader( "programid" )
+    String programId )
     {
         PatientIdentifierAndAttribute patientIdentifierAndAttribute = new PatientIdentifierAndAttribute();
         patientIdentifierAndAttribute.setClientVersion( clientVersion );
@@ -489,7 +546,9 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/sendFeedback" )
     @ResponseBody
-    public String sendFeedback( @PathVariable int id, @RequestBody Message message )
+    public String sendFeedback( @PathVariable
+    int id, @RequestBody
+    Message message )
         throws NotAllowedException
     {
         return activityReportingService.sendFeedback( message );
@@ -498,19 +557,22 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/findUser" )
     @ResponseBody
-    public Recipient findUser( String clientVersion, @PathVariable int id, @RequestHeader( "name" ) String keyword )
+    public Recipient findUser( String clientVersion, @PathVariable
+    int id, @RequestHeader( "name" )
+    String keyword )
         throws NotAllowedException
     {
         Recipient recipient = new Recipient();
-        recipient.setClientVersion( clientVersion );
         recipient.setUsers( activityReportingService.findUser( keyword ) );
         return recipient;
     }
 
     @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/LWUIT/orgUnits/{id}/findVisitSchedule/{programId}" )
     @ResponseBody
-    public String findVisitSchedule( @PathVariable int programId, @PathVariable int id,
-        @RequestHeader( "details" ) String info )
+    public String findVisitSchedule( @PathVariable
+    int programId, @PathVariable
+    int id, @RequestHeader( "details" )
+    String info )
         throws NotAllowedException
     {
         return activityReportingService.findVisitSchedule( id, programId, info );
@@ -518,10 +580,41 @@
 
     @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/sendMessage" )
     @ResponseBody
-    public String sendMessage( @PathVariable int id, @RequestBody Message message )
+    public String sendMessage( @PathVariable
+    int id, @RequestBody
+    Message message )
         throws NotAllowedException
     {
         return activityReportingService.sendMessage( message );
     }
 
+    @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/downloadMessageConversation" )
+    @ResponseBody
+    public Conversation downloadConversation( String clientVersion )
+        throws NotAllowedException
+    {
+
+        Conversation conversation = new Conversation();
+        conversation.setClientVersion( clientVersion );
+        conversation.setConversations( activityReportingService.downloadMessageConversation() );
+
+        return conversation;
+
+    }
+
+    @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/getMessage" )
+    @ResponseBody
+    public Conversation getMessage( String clientVersion, @PathVariable
+    int id, @RequestHeader( "id" )
+    String conversationId )
+        throws NotAllowedException
+    {
+
+        Conversation conversation = new Conversation();
+        conversation.setMessages( activityReportingService.getMessage( conversationId ) );
+
+        return conversation;
+
+    }
+
 }