From aaae912c82a19014d1a892bc2263723960ffe256 Mon Sep 17 00:00:00 2001
From: Martin Staehr <software@mstaehr.net>
Date: Sun, 9 Sep 2018 21:47:13 +0200
Subject: [PATCH] #40 feat: finish implementation of dummy project creation

---
 .../gf/core/management/Management.java        |  4 ++++
 .../gf/core/management/ManagementImpl.java    | 17 ++++++++++++++++
 .../gf/core/management/group/Group.java       | 16 +++++++++++++++
 .../service/GroupCreationService.java         | 20 +++++++++----------
 .../src/scripts/dbschema/fltrail.sql          |  2 +-
 5 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
index 17049249..442f743a 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
@@ -58,6 +58,8 @@ public interface Management {
      */
     void update(User user);
 
+    void update(Group group);
+
     /**
      * Add an entry in the M:N table linking users and projects
      *
@@ -81,6 +83,8 @@ public interface Management {
 
     Boolean exists(Project project);
 
+    Boolean exists(Group group);
+
     /**
      * Get all the users linked to a project
      *
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 16cfe59b..5159addd 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
@@ -107,6 +107,16 @@ public class ManagementImpl implements Management {
         connect.close();
     }
 
+    @Override
+    public void update(Group group) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "UPDATE group SET projectId=?,chatRoomid=?";
+        connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId());
+
+        // TODO: implement update of groupuser if needed later (if member list need to be updated)
+    }
+
     @Override
     public Boolean exists(User user) {
         Boolean result;
@@ -133,6 +143,12 @@ public class ManagementImpl implements Management {
         return result;
     }
 
+    @Override
+    public Boolean exists(Group group) {
+        List<Group> groups = getGroupsByProjectId(group.getProjectId());
+        return groups.contains(group);
+    }
+
     @Override
     public List<User> getUsers(Project project) {
         String query =
@@ -341,6 +357,7 @@ public class ManagementImpl implements Management {
         if (groups.isEmpty()) {
             return null;
         }
+        connect.close();
 
         return groups;
     }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java
index d98a0d85..fe513b53 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java
@@ -4,6 +4,7 @@ import unipotsdam.gf.core.management.user.User;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class Group {
 
@@ -36,6 +37,21 @@ public class Group {
         this.chatRoomId = chatRoomId;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Group group = (Group) o;
+        return Objects.equals(members, group.members) &&
+                Objects.equals(projectId, group.projectId) &&
+                Objects.equals(chatRoomId, group.chatRoomId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(members, projectId, chatRoomId);
+    }
+
     public List<User> getMembers() {
         return members;
     }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
index 09fba126..3e948c29 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
@@ -30,25 +30,25 @@ public class GroupCreationService {
     public boolean createExampleProject() {
 
         User docentUser = getDocentUser();
-        Project project = new Project("1", "", true, docentUser.getEmail(), "admin");
+        Project project = new Project("1", "password", true, docentUser.getEmail(), "admin");
 
         List<Group> groups = createDummyGroups(project.getId());
 
         if (!management.exists(project)) {
             management.create(project);
         }
+        List<Group> nonCreatedGroups = groups.stream().filter(group -> management.exists(group)).collect(Collectors.toList());
 
-        groups.forEach(group -> management.create(group));
-        // TODO: read List<Group> of database to get Id for chatRoomName (Should be ProjectName - GroupId)
-        // TODO: implement sql service injection for, so connection is only done once in app
-
-
-        List<Group> nonEmptyGroups = groups.stream().filter(group -> group.getMembers().isEmpty())
-                .collect(Collectors.toList());
-        if (nonEmptyGroups.isEmpty()) {
-            return false;
+        if (!nonCreatedGroups.isEmpty()) {
+            nonCreatedGroups.forEach(group -> management.create(group));
         }
 
+        List<Group> groupsWithId = management.getGroupsByProjectId(project.getId());
+        groupsWithId.forEach(group -> {
+            String chatRoomName = String.join(" - ", project.getId(), String.valueOf(group.getId()));
+            group.setChatRoomId(communicationService.createChatRoom(chatRoomName, group.getMembers()));
+            management.update(group);
+        });
 
         return true;
     }
diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
index 2a353a77..22a07cbc 100644
--- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
+++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
@@ -22,7 +22,7 @@ CREATE TABLE if not exists `projects` (
 CREATE TABLE if not exists `groups` (
   `id`         int          NOT NULL AUTO_INCREMENT,
   `projectId`  varchar(400) NOT NULL,
-  `chatRoomId` varchar(400) NOT NULL,
+  `chatRoomId` varchar(400),
   PRIMARY KEY (id)
 ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
 
-- 
GitLab