From 20e8dcffdc11455e14d916204a0596d4f070b4ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20St=C3=A4hr?= <software@mstaehr.net>
Date: Thu, 14 Jun 2018 10:25:19 +0200
Subject: [PATCH] feat: dummy tagLib integration for chatWindow with service
 #42

---
 .../java/unipotsdam/gf/config/Constants.java  |  6 +++
 .../gf/config/GFApplicationBinder.java        |  3 ++
 .../gf/core/management/ManagementImpl.java    |  4 ++
 .../gf/interfaces/ICommunication.java         |  2 +
 .../gf/modules/communication/ChatWindow.java  | 42 +++++++++++++++++++
 .../service/CommunicationDummyService.java    | 15 +++++++
 .../communication/view/CommunicationView.java |  4 +-
 .../main/webapp/communication/chatWindow.tld  | 16 +++++++
 .../main/webapp/pages/overview-docent.html    |  4 +-
 .../main/webapp/pages/overview-student.html   |  4 +-
 ...project-docent.html => project-docent.jsp} |  2 +
 11 files changed, 97 insertions(+), 5 deletions(-)
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java
 create mode 100644 gemeinsamforschen/src/main/webapp/communication/chatWindow.tld
 rename gemeinsamforschen/src/main/webapp/pages/{project-docent.html => project-docent.jsp} (94%)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java
new file mode 100644
index 00000000..12586278
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java
@@ -0,0 +1,6 @@
+package unipotsdam.gf.config;
+
+public interface Constants {
+
+    String ROCKET_CHAT_URL = "http://rocketchat.westeurope.cloudapp.azure.com";
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
index 89178403..554cf050 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
@@ -1,6 +1,8 @@
 package unipotsdam.gf.config;
 
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import unipotsdam.gf.core.management.Management;
+import unipotsdam.gf.core.management.ManagementImpl;
 import unipotsdam.gf.interfaces.ICommunication;
 import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
 
@@ -8,5 +10,6 @@ public class GFApplicationBinder extends AbstractBinder {
     @Override
     protected void configure() {
         bind(CommunicationDummyService.class).to(ICommunication.class);
+        bind(ManagementImpl.class).to(Management.class);
     }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
index 2e23b8f5..01135265 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
@@ -9,6 +9,8 @@ import unipotsdam.gf.core.management.user.UserInterests;
 import unipotsdam.gf.core.management.user.UserProfile;
 import unipotsdam.gf.modules.assessment.controller.StudentIdentifier;
 
+import javax.annotation.ManagedBean;
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
@@ -16,6 +18,8 @@ import java.util.UUID;
 /**
  * Created by dehne on 31.05.2018.
  */
+@ManagedBean
+@Resource
 public class ManagementImpl implements Management {
     @Override
     public void delete(StudentIdentifier identifier) {
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
index 8a07add1..923f3597 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
@@ -79,4 +79,6 @@ public interface ICommunication {
      */
     boolean registerUser(User user);
 
+    String getChatRoomLink(String userToken,String projectToken, String groupToken);
+
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java
new file mode 100644
index 00000000..9e342d98
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java
@@ -0,0 +1,42 @@
+package unipotsdam.gf.modules.communication;
+
+import unipotsdam.gf.core.management.ManagementImpl;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.interfaces.ICommunication;
+import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
+
+import javax.annotation.ManagedBean;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.tagext.*;
+import javax.servlet.jsp.*;
+import java.io.*;
+
+public class ChatWindow extends SimpleTagSupport {
+
+    private String orientation;
+
+    public void doTag() throws JspException, IOException {
+        PageContext pageContext = (PageContext) getJspContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        String token = request.getParameter("token");
+        ManagementImpl management = new ManagementImpl();
+        //User user = management.getUser(token);
+        String groupToken = request.getParameter("groupToken");
+        String projectToken = request.getParameter("projectToken");
+        //get ProjetbyToken
+        ICommunication communicationService = new CommunicationDummyService();
+        String chatRoomLink = communicationService.getChatRoomLink(token,projectToken,groupToken);
+
+        JspWriter out = getJspContext().getOut();
+        out.println("<iframe width=\"30%\" height=\"100%\" src=\""+chatRoomLink+"\"/>");
+    }
+
+    public void setOrientation(String orientation) {
+        this.orientation = orientation;
+    }
+
+    public String getOrientation() {
+        return orientation;
+    }
+}
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 8a61d26d..da54f55c 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
@@ -1,5 +1,7 @@
 package unipotsdam.gf.modules.communication.service;
 
+import unipotsdam.gf.config.Constants;
+import unipotsdam.gf.core.management.Management;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.interfaces.ICommunication;
 import unipotsdam.gf.modules.communication.model.Message;
@@ -8,6 +10,7 @@ import unipotsdam.gf.modules.communication.model.chat.ChatRoom;
 
 import javax.annotation.ManagedBean;
 import javax.annotation.Resource;
+import javax.inject.Inject;
 import javax.inject.Singleton;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -19,6 +22,9 @@ import java.util.Objects;
 @Singleton
 public class CommunicationDummyService implements ICommunication {
 
+    @Inject
+    Management managementService;
+
     @Override
     public List<ChatMessage> getChatHistory(String roomId) {
         ArrayList<ChatMessage> chatMessages = new ArrayList<>();
@@ -72,6 +78,15 @@ public class CommunicationDummyService implements ICommunication {
         return true;
     }
 
+    public String getChatRoomLink(String userToken, String projectToken, String groupToken) {
+        //User user = managementService.getUser(userToken);
+        // TODO: Implement getProjectbyToken and getGroupByToken
+        //Project project = managementService.getProject(projectToken
+        String channelName = "general";
+        String fullUrl = Constants.ROCKET_CHAT_URL + "/channel/" + channelName + "?layout=embedded";
+        return fullUrl;
+    }
+
     // TODO: remove after done implementing
     // just for postman testing
     public User getUser() {
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 e62754a0..16e00c61 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
@@ -28,7 +28,7 @@ import static java.util.Objects.isNull;
 @ManagedBean
 public class CommunicationView {
 
-    private static final Logger log = LoggerFactory.getLogger(SampleView.class);
+    private static final Logger log = LoggerFactory.getLogger(CommunicationView.class);
 
     @Inject
     private ICommunication communicationService;
@@ -105,6 +105,8 @@ public class CommunicationView {
         return response;
     }
 
+    // TODO: remove user from chatroom
+
     @POST
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/setTopic/{roomId}")
diff --git a/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld b/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld
new file mode 100644
index 00000000..e98a7ae4
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld
@@ -0,0 +1,16 @@
+<taglib>
+    <tlib-version>1.0</tlib-version>
+    <jsp-version>2.0</jsp-version>
+    <short-name>chatWindow</short-name>
+
+    <tag>
+        <name>chatWindow</name>
+        <tag-class>unipotsdam.gf.modules.communication.ChatWindow</tag-class>
+        <body-content>empty</body-content>
+        <attribute>
+            <name>orientation</name>
+            <required>yes</required>
+            <rtexprvalue>no</rtexprvalue>
+        </attribute>
+    </tag>
+</taglib>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html
index 09976e3d..5ed91721 100644
--- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html
+++ b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html
@@ -20,7 +20,7 @@
     <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
         <tr style="cursor:pointer" role="button">
             <td>
-                <a href="project-docent.html">
+                <a href="project-docent.jsp">
                     <h1>dummy Projekt1</h1>
                 </a>
             </td>
@@ -51,7 +51,7 @@
         </tr>
         <tr style="cursor:pointer" role="button">
             <td>
-                <a href="project-docent.html">
+                <a href="project-docent.jsp">
                     <h1>dummy Projekt2</h1>
                 </a>
             </td>
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.html b/gemeinsamforschen/src/main/webapp/pages/overview-student.html
index 5c56a572..cc4ec5a3 100644
--- a/gemeinsamforschen/src/main/webapp/pages/overview-student.html
+++ b/gemeinsamforschen/src/main/webapp/pages/overview-student.html
@@ -20,7 +20,7 @@
     <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
         <tr style="cursor:pointer" role="button">
             <td>
-                <a href="project-docent.html">
+                <a href="project-docent.jsp">
                     <h1>dummy Projekt1</h1>
                 </a>
             </td>
@@ -51,7 +51,7 @@
         </tr>
         <tr style="cursor:pointer" role="button">
             <td>
-                <a href="project-docent.html">
+                <a href="project-docent.jsp">
                     <h1>dummy Projekt2</h1>
                 </a>
             </td>
diff --git a/gemeinsamforschen/src/main/webapp/pages/project-docent.html b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
similarity index 94%
rename from gemeinsamforschen/src/main/webapp/pages/project-docent.html
rename to gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
index 232c9e77..95dcf5e7 100644
--- a/gemeinsamforschen/src/main/webapp/pages/project-docent.html
+++ b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<%@ taglib prefix = "communication" uri = "/communication/chatWindow.tld"%>
 <html>
 
 <head>
@@ -73,6 +74,7 @@
                 </tbody>
             </table>
         </div>
+    <communication:chatWindow orientation="right"></communication:chatWindow>
         <script src="../assets/js/jquery.min.js"></script>
         <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
 </body>
-- 
GitLab