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 77a19c8868c4bfee7b2cf4d9f1086a0e69ac0f31..41ca15ebd2660f865803d2958a555a4217754010 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java @@ -119,6 +119,6 @@ public interface Management { void deleteGroupMember(User groupMember, int groupId); - List<Group> getGroups(String projectId); + List<Group> getGroupsByProjectId(String projectId); } 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 aaa48ca4d28f4101f7c4db7b150169b0c3b1d7e0..e18557bcfcaa107a9d8eab392a99c4a3bd6dfc67 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -165,6 +165,13 @@ public class ManagementImpl implements Management { return new Project(id, password, active, timestamp, author, adminPassword, token); } + private Group getGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + int id = vereinfachtesResultSet.getInt("id"); + String projectId = vereinfachtesResultSet.getString("projectId"); + String chatRoomId = vereinfachtesResultSet.getString("chatRoomId"); + // TODO: determine how to get all User + return new Group(id, new ArrayList<>(), projectId, chatRoomId); + } @Override public String getUserToken(User user) { MysqlConnect connect = new MysqlConnect(); @@ -227,6 +234,7 @@ public class ManagementImpl implements Management { } } + @Override public void createGroup(Group group, String projectId) { MysqlConnect connect = new MysqlConnect(); @@ -252,7 +260,23 @@ public class ManagementImpl implements Management { } @Override - public List<Group> getGroups(String projectId) { - return null; + public List<Group> getGroupsByProjectId(String projectId) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + // TODO: implement correct join and finish implementation + String mysqlRequest = "SELECT * FROM groups g " + + "JOIN groupuser gu u ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + + "where g.projectId = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectId); + ArrayList<Group> groups = new ArrayList<>(); + while (vereinfachtesResultSet.next()) { + //groups.add() + } + if (groups.isEmpty()) { + return null; + } else { + 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 781c92a711dbf837dbf6ee4eed15229bc6d4d8aa..ea56b43196cd93b3c87518dfa55ab58e2840c8b9 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 @@ -2,16 +2,35 @@ package unipotsdam.gf.core.management.group; import unipotsdam.gf.core.management.user.User; -import java.util.*; +import java.util.List; public class Group { + private int id; // do not set yourself, autoincrement + private List<User> members; + private String projectId; + private String chatRoomId; + public Group() { + } + + public Group(List<User> members, String projectId) { + this.members = members; + this.projectId = projectId; + this.chatRoomId = ""; + } - List<User> members; + public Group(List<User> members, String projectId, String chatRoomId) { + this.members = members; + this.projectId = projectId; + this.chatRoomId = chatRoomId; + } - public Group(List<User> members) { + public Group(int id, List<User> members, String projectId, String chatRoomId) { + this.id = id; this.members = members; + this.projectId = projectId; + this.chatRoomId = chatRoomId; } public List<User> getMembers() { @@ -22,5 +41,27 @@ public class Group { this.members = members; } + public String getChatRoomId() { + return chatRoomId; + } + + public void setChatRoomId(String chatRoomId) { + this.chatRoomId = chatRoomId; + } + + public void addMember(User user) { + members.add(user); + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + public int getId() { + return id; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java index 99e4d8a49be2b4db41fb821b8f81a2d5e124f3b4..682b5c40b13472a4bc3369eb7970ddb9bce428fd 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java @@ -20,6 +20,16 @@ public class Project { public Project() { } + public Project(String id, String password, Boolean active, String author, String adminPassword) { + this.id = id; + this.password = password; + this.active = active; + this.author = author; + this.adminPassword = adminPassword; + + this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); + } + public Project(String id, String password, Boolean active, String author, String adminPassword, String token) { this.id = id; this.password = password; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java new file mode 100644 index 0000000000000000000000000000000000000000..23127b12dc29e93f9d76e299c81619229fab16e4 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java @@ -0,0 +1,97 @@ +package unipotsdam.gf.modules.groupCreation.service; + +import unipotsdam.gf.core.management.Management; +import unipotsdam.gf.core.management.group.Group; +import unipotsdam.gf.core.management.project.Project; +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.user.UserProfile; +import unipotsdam.gf.interfaces.ICommunication; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Inject; +import javax.inject.Singleton; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ManagedBean +@Resource +@Singleton +public class GroupCreationService { + + @Inject + private ICommunication communicationService; + + @Inject + private Management management; + + public boolean createExampleProject() { + + User docentUser = getDocentUser(); + Project project = new Project("1", "", true, docentUser.getEmail(), "admin"); + + List<Group> groups = createDummyGroups(project.getId()); + + if (!management.exists(project)) { + management.create(project); + } + + groups.forEach(group -> management.createGroup(group, project.getId())); + + // TODO: read List<Group> of database to get Id for chatRoomName (Should be ProjectName - GroupId) + // TODO: add projectName as DatabaseEntry + // 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; + } + + + return true; + } + + private List<Group> createDummyGroups(String projectId) { + Group group1 = new Group(new ArrayList<>(), projectId); + Group group2 = new Group(new ArrayList<>(), projectId); + Group group3 = new Group(new ArrayList<>(), projectId); + Group group4 = new Group(new ArrayList<>(), projectId); + List<Group> groups = Arrays.asList(group1, group2, group3, group4); + + String baseUserName = "Name "; + String password = "test123"; + String baseEMailFront = "test"; + String baseEMailDomain = "@example.com"; + boolean isStudentValue = true; + for (int userNumber = 0; userNumber < groups.size() * 5; userNumber++) { + String userName = baseUserName + (userNumber + 1); + String email = baseEMailFront + (userNumber + 1) + baseEMailDomain; + User user = new User(userName, password, email, isStudentValue); + if (!management.exists(user)) { + saveUserToDatabase(user); + int groupPosition = userNumber % groups.size(); + groups.get(groupPosition).addMember(user); + } + } + return groups; + } + + private User getDocentUser() { + User docent = new User("Julian", "docent", "docent@docent.com", false); + if (!management.exists(docent)) { + saveUserToDatabase(docent); + } else { + docent = management.getUserByEmail(docent.getEmail()); + } + return docent; + } + + private void saveUserToDatabase(User user) { + communicationService.registerAndLoginUser(user); + management.create(user, new UserProfile()); + } +}