You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by an...@apache.org on 2014/02/24 20:19:52 UTC

svn commit: r1571404 - in /shindig/trunk/java/social-api/src: main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java

Author: ankon
Date: Mon Feb 24 19:19:52 2014
New Revision: 1571404

URL: http://svn.apache.org/r1571404
Log:
SHINDIG-1960: Fix JsonDbOpensocialService#createMessage()

Review: https://reviews.apache.org/r/15960/


Modified:
    shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
    shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java

Modified: shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java?rev=1571404&r1=1571403&r2=1571404&view=diff
==============================================================================
--- shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java (original)
+++ shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java Mon Feb 24 19:19:52 2014
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.Future;
 
 import javax.servlet.http.HttpServletResponse;
@@ -138,11 +139,16 @@ public class JsonDbOpensocialService imp
   private static final String FRIEND_LINK_TABLE = "friendLinks";
 
   /**
-   * db["messages"] -> Map<Person.Id, Array<Message>>
+   * db["messages"] -> Map<Person.Id, Map<MessageCollection.Id, MessageCollection>>
    */
   private static final String MESSAGE_TABLE = "messages";
 
   /**
+   * Attribute that contains the messages of a specific MessageCollection.
+   */
+  private static final String MESSAGES_ARRAY = "messages";
+
+  /**
    * db["passwords"] -> Map<Person.Id, String>
    */
   private static final String PASSWORDS_TABLE = "passwords";
@@ -616,19 +622,26 @@ public class JsonDbOpensocialService imp
    */
   public Future<Void> createMessage(UserId userId, String appId, String msgCollId, Message message,
       SecurityToken token) throws ProtocolException {
-    for (String recipient : message.getRecipients()) {
-      try {
-        JSONArray outbox = db.getJSONObject(MESSAGE_TABLE).getJSONArray(recipient);
+    if (message.getId() == null) {
+      // Assign a new ID to the message
+      message.setId(UUID.randomUUID().toString());
+    }
+    try {
+      JSONObject messagesTable = db.getJSONObject(MESSAGE_TABLE);
+      JSONObject messageObject = convertToJson(message);
+      for (String recipient : message.getRecipients()) {
+        JSONObject collection = messagesTable.getJSONObject(recipient).getJSONObject(msgCollId);
+        JSONArray outbox = collection.getJSONArray(MESSAGES_ARRAY);
         if (outbox == null) {
           outbox = new JSONArray();
-          db.getJSONObject(MESSAGE_TABLE).put(recipient, outbox);
+          collection.put(MESSAGES_ARRAY, outbox);
         }
 
-        outbox.put(message);
-      } catch (JSONException je) {
-        throw new ProtocolException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, je.getMessage(),
-            je);
+        outbox.put(messageObject);
       }
+    } catch (JSONException je) {
+      throw new ProtocolException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, je.getMessage(),
+          je);
     }
 
     return Futures.immediateFuture(null);
@@ -644,7 +657,7 @@ public class JsonDbOpensocialService imp
       for (String msgCollId : JSONObject.getNames(messageCollections)) {
         JSONObject msgColl = messageCollections.getJSONObject(msgCollId);
         msgColl.put("id", msgCollId);
-        JSONArray messages = msgColl.getJSONArray("messages");
+        JSONArray messages = msgColl.getJSONArray(MESSAGES_ARRAY);
         int numMessages = (messages == null) ? 0 : messages.length();
         msgColl.put("total", String.valueOf(numMessages));
         msgColl.put("unread", String.valueOf(numMessages));
@@ -676,7 +689,7 @@ public class JsonDbOpensocialService imp
     try {
       List<Message> result = Lists.newArrayList();
       JSONArray messages = db.getJSONObject(MESSAGE_TABLE).getJSONObject(userId.getUserId(token))
-          .getJSONObject(msgCollId).getJSONArray("messages");
+          .getJSONObject(msgCollId).getJSONArray(MESSAGES_ARRAY);
 
       // TODO: special case @all
 

Modified: shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java?rev=1571404&r1=1571403&r2=1571404&view=diff
==============================================================================
--- shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java (original)
+++ shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java Mon Feb 24 19:19:52 2014
@@ -405,4 +405,20 @@ public class JsonDbOpensocialServiceTest
     assertEquals(1, messages.getList().size());
     assertEquals("1", messages.getList().get(0).getId());
   }
+
+  @Test
+  public void testCreateMessage() throws Exception {
+    // Create a new private message
+    Message msg = new MessageImpl();
+    msg.setBody("Hello");
+    msg.setRecipients(Collections.singletonList(JANE_DOE.getUserId()));
+    db.createMessage(JOHN_DOE, APP_ID, "privateMessage", msg, token).get();
+
+    // Check that the message was created
+    RestfulCollection<Message> messages = db.getMessages(
+        JANE_DOE, "privateMessage",
+        Collections.<String>emptySet(), Collections.<String>singletonList(msg.getId()),
+        new CollectionOptions(), token).get();
+    assertEquals(1, messages.getList().size());
+  }
 }