From 2f313a8682caf35dedf3a1a8051117a08bd9fdb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20St=C3=A4hr?= <software@mstaehr.net>
Date: Thu, 7 Jun 2018 23:25:01 +0200
Subject: [PATCH] feat: implementing communicationView completely

---
 .../service/CommunicationDummyService.java    |  6 +-
 .../communication/view/CommunicationView.java | 83 +++++++++++++++++--
 .../view/CommunicationViewTest.java           |  5 +-
 3 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
index c2786f87..8a61d26d 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
@@ -32,7 +32,7 @@ public class CommunicationDummyService implements ICommunication {
 
     @Override
     public boolean sendMessageToChat(Message message) {
-        throw new RuntimeException("Do not call this method without implementation");
+        return true;
     }
 
     @Override
@@ -46,12 +46,12 @@ public class CommunicationDummyService implements ICommunication {
 
     @Override
     public boolean addUserToChatRoom(String roomId, User user) {
-        throw new RuntimeException("Do not call this method without implementation");
+        return true;
     }
 
     @Override
     public boolean setChatRoomTopic(String roomId, String topic) {
-        throw new RuntimeException("Do not call this method without implementation");
+        return true;
     }
 
     @Override
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java
index 0dcda801..e62754a0 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java
@@ -4,6 +4,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.interfaces.ICommunication;
+import unipotsdam.gf.modules.communication.model.Message;
 import unipotsdam.gf.modules.communication.model.chat.ChatMessage;
 import unipotsdam.gf.modules.communication.model.chat.ChatRoom;
 import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
@@ -41,7 +42,7 @@ public class CommunicationView {
             log.error("chatRoom not found for roomId: {}", roomId);
             return Response.status(Response.Status.NOT_FOUND).build();
         }
-        log.debug("getChatRoomInformationResponse: {}", chatRoom);
+        log.trace("getChatRoomInformationResponse: {}", chatRoom);
         return Response.ok(chatRoom).build();
     }
 
@@ -51,28 +52,98 @@ public class CommunicationView {
     public Response getChatHistory(@PathParam("roomId") String roomId) {
         List<ChatMessage> chatMessages = communicationService.getChatHistory(roomId);
         if (isNull(chatMessages)) {
-            log.error("chatRoom not found for roomId: {}", roomId);
+            log.error("getChatHistory: chatRoom not found for roomId: {}", roomId);
             return Response.status(Response.Status.NOT_FOUND).build();
         }
-        log.debug("response for getChatHistory: {}", chatMessages);
+        log.trace("response for getChatHistory: {}", chatMessages);
         return Response.ok(chatMessages).build();
     }
 
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/send")
+    public Response sendMessage(Message message) {
+        if (isNull(message)) {
+            log.trace("sendMessage message object was null");
+            return Response.status(Response.Status.BAD_REQUEST).entity("must provide message").build();
+        }
+        boolean wasSend = communicationService.sendMessageToChat(message);
+        Response response;
+        if (wasSend) {
+            log.error("error while sending message for message: {}", message);
+            response = Response.ok(wasSend).build();
+        } else {
+            log.trace("response for sendMessage: {}", wasSend);
+            response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while sending message").build();
+        }
+        return response;
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/addUser/{roomId}")
+    public Response addUserToChatRoom(@PathParam("roomId") String roomId, User user) {
+        if (isNull(user)) {
+            log.trace("addUser user object was null");
+            return Response.status(Response.Status.BAD_REQUEST).entity("must provide user").build();
+        }
+        boolean wasAdded = communicationService.addUserToChatRoom(roomId, user);
+        if (isNull(wasAdded)) {
+            log.error("addUserToChatRoom: chatRoom not found for roomId: {}, user: {}", roomId, user);
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
+        Response response;
+        if (wasAdded) {
+            log.trace("response for addUser: {}", wasAdded);
+            response = Response.ok(wasAdded).build();
+        } else {
+            log.error("error while adding user to chat room");
+            response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while adding user to chatRoom").build();
+        }
+        return response;
+    }
+
+    @POST
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/setTopic/{roomId}")
+    public Response setChatRoomTopic(@PathParam("roomId") String roomId, @QueryParam("topic") String topic) {
+        if (isNull(topic)) {
+            log.trace("setTopic param not given");
+            return Response.status(Response.Status.BAD_REQUEST).entity("topic must be not empty").build();
+        }
+        boolean wasSet = communicationService.setChatRoomTopic(roomId, topic);
+        if (isNull(wasSet)) {
+            log.error("addChatRoomTopic: chatRoom not found for roomId: {}, topic: {}", roomId, topic);
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
+        Response response;
+        if (wasSet) {
+            log.trace("response for setTopic: {}", wasSet);
+            response = Response.ok(wasSet).build();
+        } else {
+            log.error("error while setting topic to chat room");
+            response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while setting topic to chat room").build();
+        }
+        return response;
+    }
+
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/create")
     public Response createChatRoom(@QueryParam("name") String name, List<User> users) {
         if (isNull(name)) {
-            return Response.status(Response.Status.BAD_REQUEST).entity("no name is not allowed").build();
+            return Response.status(Response.Status.BAD_REQUEST).entity("must provide name as queryParam").build();
         }
         String chatId = communicationService.createChatRoom(name, users);
         if (isNull(chatId)) {
             log.error("error while creating chatRoom for: name: {}, users: {}", name, users);
             return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
         }
-        log.debug("response for createChatRoom: {}", chatId);
-        return Response.ok(chatId).build();
+        log.trace("response for createChatRoom: {}", chatId);
+        return Response.status(Response.Status.CREATED).entity(chatId).build();
     }
 
     // Temp: just get user as json
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java
index 930c1c0e..726beabf 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+import static javax.ws.rs.core.Response.Status.CREATED;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.hamcrest.Matchers.is;
@@ -59,13 +60,13 @@ public class CommunicationViewTest extends JerseyTest {
     public void createChatRoom() {
         String path = "chat/create";
         Response responseOk = target().path(path).queryParam("name", "test").request().post(null);
-        assertThat(responseOk.getStatus(), is(OK.getStatusCode()));
+        assertThat(responseOk.getStatus(), is(CREATED.getStatusCode()));
         assertNotNull(responseOk.readEntity(String.class));
 
         ArrayList<User> users = new ArrayList<>();
         users.add(new User("test", "test", "test", true));
         responseOk = target().path(path).queryParam("name", "test").request().post(Entity.json(users));
-        assertThat(responseOk.getStatus(), is(OK.getStatusCode()));
+        assertThat(responseOk.getStatus(), is(CREATED.getStatusCode()));
         assertNotNull(responseOk.readEntity(String.class));
 
         Response responseBadRequest = target().path(path).request().post(Entity.json(users));
-- 
GitLab