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());
+ }
}