From 0bb80b1a15e0cfb7cc01e5056d392359a9e36080 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 24 Sep 2018 10:48:28 +0100 Subject: [PATCH] Add JsonDict class for JSON output. --- .../bramble/identity/OutputAuthor.kt | 3 +- .../briar/headless/contact/OutputContact.kt | 3 +- .../briar/headless/forums/OutputForum.kt | 3 +- .../briar/headless/json/JsonDict.kt | 11 ++++ .../messaging/OutputPrivateMessage.kt | 11 ++-- .../messaging/OutputPrivateRequest.kt | 55 +++++++++---------- .../messaging/OutputPrivateResponse.kt | 55 +++++++++---------- .../messaging/MessagingControllerImplTest.kt | 7 ++- 8 files changed, 78 insertions(+), 70 deletions(-) create mode 100644 briar-headless/src/main/java/org/briarproject/briar/headless/json/JsonDict.kt diff --git a/briar-headless/src/main/java/org/briarproject/bramble/identity/OutputAuthor.kt b/briar-headless/src/main/java/org/briarproject/bramble/identity/OutputAuthor.kt index 7c0790ba1..049537cb5 100644 --- a/briar-headless/src/main/java/org/briarproject/bramble/identity/OutputAuthor.kt +++ b/briar-headless/src/main/java/org/briarproject/bramble/identity/OutputAuthor.kt @@ -1,8 +1,9 @@ package org.briarproject.bramble.identity import org.briarproject.bramble.api.identity.Author +import org.briarproject.briar.headless.json.JsonDict -fun Author.output() = mapOf( +fun Author.output() = JsonDict( "formatVersion" to formatVersion, "id" to id.bytes, "name" to name, diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt index 397a1fdc5..d0ec5898c 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt @@ -2,8 +2,9 @@ package org.briarproject.briar.headless.contact import org.briarproject.bramble.api.contact.Contact import org.briarproject.bramble.identity.output +import org.briarproject.briar.headless.json.JsonDict -internal fun Contact.output() = mapOf( +internal fun Contact.output() = JsonDict( "contactId" to id.int, "author" to author.output(), "verified" to isVerified diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/forums/OutputForum.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/forums/OutputForum.kt index 1def6f959..0ed5367cf 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/forums/OutputForum.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/forums/OutputForum.kt @@ -1,8 +1,9 @@ package org.briarproject.briar.headless.forums import org.briarproject.briar.api.forum.Forum +import org.briarproject.briar.headless.json.JsonDict -internal fun Forum.output() = mapOf( +internal fun Forum.output() = JsonDict( "name" to name, "id" to id.bytes ) diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/json/JsonDict.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/json/JsonDict.kt new file mode 100644 index 000000000..09a82d5d6 --- /dev/null +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/json/JsonDict.kt @@ -0,0 +1,11 @@ +package org.briarproject.briar.headless.json + +class JsonDict(vararg pairs: Pair) : HashMap(pairs.size) { + init { + putAll(pairs) + } + + fun putAll(vararg pairs: Pair) { + for (p in pairs) put(p.first, p.second) + } +} diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt index ff858c6b2..3f92192dd 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt @@ -3,9 +3,10 @@ package org.briarproject.briar.headless.messaging import org.briarproject.bramble.api.contact.ContactId import org.briarproject.briar.api.messaging.PrivateMessage import org.briarproject.briar.api.messaging.PrivateMessageHeader +import org.briarproject.briar.headless.json.JsonDict -internal fun PrivateMessageHeader.output(contactId: ContactId, body: String?): Map { - val map: HashMap = hashMapOf( +internal fun PrivateMessageHeader.output(contactId: ContactId, body: String?): JsonDict { + val dict = JsonDict( "type" to "org.briarproject.briar.api.messaging.PrivateMessageHeader", "contactId" to contactId.int, "timestamp" to timestamp, @@ -16,11 +17,11 @@ internal fun PrivateMessageHeader.output(contactId: ContactId, body: String?): M "id" to id.bytes, "groupId" to groupId.bytes ) - if (body != null) map.put("body", body) - return map + if (body != null) dict.put("body", body) + return dict } -internal fun PrivateMessage.output(contactId: ContactId, body: String) = mapOf( +internal fun PrivateMessage.output(contactId: ContactId, body: String) = JsonDict( "type" to "org.briarproject.briar.api.messaging.PrivateMessageHeader", "contactId" to contactId.int, "timestamp" to message.timestamp, diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt index 5d40f9c7b..70dc11375 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt @@ -10,52 +10,47 @@ import org.briarproject.briar.api.messaging.PrivateMessageHeader import org.briarproject.briar.api.messaging.PrivateRequest import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest import org.briarproject.briar.api.sharing.InvitationRequest +import org.briarproject.briar.headless.json.JsonDict -internal fun PrivateRequest<*>.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( +internal fun PrivateRequest<*>.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateMessageHeader).output(contactId, null) + dict.putAll( "sessionId" to sessionId.bytes, "name" to name, "answered" to wasAnswered() ) - map.putAll((this as PrivateMessageHeader).output(contactId, null)) - return map + return dict } -internal fun IntroductionRequest.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( +internal fun IntroductionRequest.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateRequest<*>).output(contactId) + dict.putAll( "type" to "org.briarproject.briar.api.introduction.IntroductionRequest", "alreadyContact" to isContact ) - map.putAll((this as PrivateRequest<*>).output(contactId)) - return map + return dict } -internal fun InvitationRequest<*>.output(contactId : ContactId): Map { - val map: HashMap = hashMapOf("canBeOpened" to canBeOpened()) - map.putAll((this as PrivateRequest<*>).output(contactId)) - return map +internal fun InvitationRequest<*>.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateRequest<*>).output(contactId) + dict.put("canBeOpened", canBeOpened()) + return dict } -internal fun BlogInvitationRequest.output(contactId : ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.blog.BlogInvitationRequest" - ) - map.putAll((this as InvitationRequest<*>).output(contactId)) - return map +internal fun BlogInvitationRequest.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationRequest<*>).output(contactId) + dict.put("type", "org.briarproject.briar.api.blog.BlogInvitationRequest") + return dict } -internal fun ForumInvitationRequest.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.forum.ForumInvitationRequest" - ) - map.putAll((this as InvitationRequest<*>).output(contactId)) - return map +internal fun ForumInvitationRequest.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationRequest<*>).output(contactId) + dict.put("type", "org.briarproject.briar.api.forum.ForumInvitationRequest") + return dict } -internal fun GroupInvitationRequest.output(contactId : ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest" - ) - map.putAll((this as InvitationRequest<*>).output(contactId)) - return map +internal fun GroupInvitationRequest.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationRequest<*>).output(contactId) + dict.put("type", "org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest") + return dict } \ No newline at end of file diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateResponse.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateResponse.kt index 158a9a761..2f98550e8 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateResponse.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateResponse.kt @@ -11,52 +11,47 @@ import org.briarproject.briar.api.messaging.PrivateMessageHeader import org.briarproject.briar.api.messaging.PrivateResponse import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse import org.briarproject.briar.api.sharing.InvitationResponse +import org.briarproject.briar.headless.json.JsonDict -internal fun PrivateResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( +internal fun PrivateResponse.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateMessageHeader).output(contactId, null) + dict.putAll( "sessionId" to sessionId.bytes, "accepted" to wasAccepted() ) - map.putAll((this as PrivateMessageHeader).output(contactId, null)) - return map + return dict } -internal fun IntroductionResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( +internal fun IntroductionResponse.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateResponse).output(contactId) + dict.putAll( "type" to "org.briarproject.briar.api.introduction.IntroductionResponse", "introducedAuthor" to introducedAuthor.output(), "introducer" to isIntroducer ) - map.putAll((this as PrivateResponse).output(contactId)) - return map + return dict } -internal fun InvitationResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf("shareableId" to shareableId.bytes) - map.putAll((this as PrivateResponse).output(contactId)) - return map +internal fun InvitationResponse.output(contactId: ContactId): JsonDict { + val dict = (this as PrivateResponse).output(contactId) + dict.put("shareableId", shareableId.bytes) + return dict } -internal fun BlogInvitationResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.blog.BlogInvitationResponse" - ) - map.putAll((this as InvitationResponse).output(contactId)) - return map +internal fun BlogInvitationResponse.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationResponse).output(contactId) + dict.put("type", "org.briarproject.briar.api.blog.BlogInvitationResponse") + return dict } -internal fun ForumInvitationResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.blog.BlogInvitationResponse" - ) - map.putAll((this as InvitationResponse).output(contactId)) - return map +internal fun ForumInvitationResponse.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationResponse).output(contactId) + dict.put("type", "org.briarproject.briar.api.blog.BlogInvitationResponse") + return dict } -internal fun GroupInvitationResponse.output(contactId: ContactId): Map { - val map: HashMap = hashMapOf( - "type" to "org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse" - ) - map.putAll((this as InvitationResponse).output(contactId)) - return map +internal fun GroupInvitationResponse.output(contactId: ContactId): JsonDict { + val dict = (this as InvitationResponse).output(contactId) + dict.put("type", "org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse") + return dict } \ No newline at end of file diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt index c1a4d62d5..8231a4fb6 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt @@ -15,6 +15,7 @@ import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent import org.briarproject.briar.headless.ControllerTest import org.briarproject.briar.headless.event.WebSocketController import org.briarproject.briar.headless.event.output +import org.briarproject.briar.headless.json.JsonDict import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test @@ -71,9 +72,9 @@ internal class MessagingControllerImplTest : ControllerTest() { } @Test - fun write() { + fun listPrivateMessage() { val privateMessage = PrivateMessage(message) - val slot = CapturingSlot>() + val slot = CapturingSlot() expectGetContact() every { ctx.formParam("text") } returns body @@ -95,6 +96,8 @@ internal class MessagingControllerImplTest : ControllerTest() { assertEquals(contact.id.int, output.get("contactId")) assertEquals(body, output.get("body")) assertEquals(message.id.bytes, output.get("id")) + assertEquals("org.briarproject.briar.api.messaging.PrivateMessageHeader", + output.get("type")) } @Test