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 d43eb07a82fde220e816f8e5b314900365a9c0fe..17049249f83b82a452f31e805723a65bf11f7678 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java @@ -37,7 +37,12 @@ public interface Management { */ void create(Project project); - void create(Group group, String projectId); + /** + * create a Group in the database + * + * @param group + */ + void create(Group group); /** * Delete a Project in the database 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 1a65714f1dd012270d0a597085d84742e4ab746e..16cfe59be2f9f392fca1172f156fcd6321f3ef2c 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -18,6 +18,8 @@ import javax.annotation.Resource; import javax.inject.Singleton; import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.UUID; @@ -53,7 +55,6 @@ public class ManagementImpl implements Management { // TODO implmement UserProfile @Mar } - // TODO: naming convention discussion? all is named create, but group is named createGroup @Override public void create(Project project) { UUID uuid = UUID.randomUUID(); @@ -77,6 +78,9 @@ public class ManagementImpl implements Management { connect.connect(); String mysqlRequest = "DELETE FROM projects where id = (?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId()); + + // TODO: delete all groups of project? + connect.close(); } @@ -93,8 +97,11 @@ public class ManagementImpl implements Management { public void update(User user) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?, `rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1"; + String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?," + + "`rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1"; //TODO: maybe add handling if a line is actually updated + //TODO: if user is updated, it also must update all other tables which includes some information about the user, for example project user + connect.issueUpdateStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), user.getToken(), user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken(), user.getEmail()); connect.close(); @@ -157,10 +164,11 @@ public class ManagementImpl implements Management { String name = vereinfachtesResultSet.getString("name"); String password = vereinfachtesResultSet.getString("password"); String email = vereinfachtesResultSet.getString("email"); + String token = vereinfachtesResultSet.getString("token"); String rocketChatId = vereinfachtesResultSet.getString("rocketChatId"); String rocketChatAuthToken = vereinfachtesResultSet.getString("rocketChatAuthToken"); Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent"); - return new User(name, password, email, rocketChatId, rocketChatAuthToken, isStudent); + return new User(name, password, email, token, rocketChatId, rocketChatAuthToken, isStudent); } private Project getProjectFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { @@ -173,15 +181,21 @@ public class ManagementImpl implements Management { String token = vereinfachtesResultSet.getString("token"); String phase = vereinfachtesResultSet.getString("phase"); - return new Project(id, password, active, timestamp, author, adminPassword, token); + return new Project(id, password, active, timestamp, author, adminPassword, token, phase); } - private Group getGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + private void fillGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet, HashMap<Integer, Group> existingGroups) { 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); + if (existingGroups.containsKey(id)) { + existingGroups.get(id).addMember(getUserFromResultSet(vereinfachtesResultSet)); + } else { + String projectId = vereinfachtesResultSet.getString("projectId"); + User user = getUserFromResultSet(vereinfachtesResultSet); + String chatRoomId = vereinfachtesResultSet.getString("chatRoomId"); + ArrayList<User> userList = new ArrayList<>(Collections.singletonList(user)); + Group group = new Group(userList, projectId, chatRoomId); + existingGroups.put(id, group); + } } @Override @@ -214,14 +228,15 @@ public class ManagementImpl implements Management { /** * TODO @Axel bitte in modules/asessment verschieben + * * @param projectId * @param quizId * @return */ - public Quiz getQuizByProjectGroupId(String projectId, String quizId){ + public Quiz getQuizByProjectGroupId(String projectId, String quizId) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question="+quizId; + String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question=" + quizId; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, ""); boolean next = vereinfachtesResultSet.next(); @@ -236,14 +251,14 @@ public class ManagementImpl implements Management { question = vereinfachtesResultSet.getString("question"); answer = vereinfachtesResultSet.getString("answer"); correct = vereinfachtesResultSet.getBoolean("correct"); - if (correct){ + if (correct) { correctAnswers.add(answer); - }else{ + } else { incorrectAnswers.add(answer); } next = vereinfachtesResultSet.next(); } - Quiz quiz = new Quiz(mcType,question, correctAnswers, incorrectAnswers); + Quiz quiz = new Quiz(mcType, question, correctAnswers, incorrectAnswers); connect.close(); return quiz; } @@ -283,61 +298,57 @@ public class ManagementImpl implements Management { } } - @Override - public void create(Group group, String projectId) { + public void create(Group group) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - Project project = getProjectById(projectId); - - Group newGroup = new Group(projectId); String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequestGroup, newGroup.getProjectId(), newGroup.getChatRoomId()); + connect.issueInsertOrDeleteStatement(mysqlRequestGroup, group.getProjectId(), group.getChatRoomId()); for (User groupMember : group.getMembers()) { String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), project.getId()); + connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), group.getProjectId()); } connect.close(); } @Override public void addGroupMember(User groupMember, int groupId) { - + // TODO: implement } @Override public void deleteGroupMember(User groupMember, int groupId) { - + // TODO: implement } @Override public List<Group> getGroupsByProjectId(String projectId) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - // TODO: implement correct join and finish implementation - //SELECT * FROM groupuser gu JOIN groups g ON g.id=gu.groupId JOIN users u ON u.email=gu.userEmail WHERE g.projectId = '1' String mysqlRequest = "SELECT * FROM groups g " + - "JOIN groupuser gu u ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + + "JOIN groupuser gu 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<>(); + HashMap<Integer, Group> groupHashMap = new HashMap<>(); while (vereinfachtesResultSet.next()) { - //groups.add() + fillGroupFromResultSet(vereinfachtesResultSet, groupHashMap); } + ArrayList<Group> groups = new ArrayList<>(); + groupHashMap.forEach((key, group) -> groups.add(group)); if (groups.isEmpty()) { return null; - } else { - return groups; } + + return groups; } @Override public void create(ProjectConfiguration projectConfiguration, Project project) { ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO(); - projectConfigurationDAO.persistProjectConfiguration(projectConfiguration,project); + projectConfigurationDAO.persistProjectConfiguration(projectConfiguration, project); } @Override 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 64c6c9926e17e9ca4abb1cc56d965f14f76df2a3..d98a0d85649f9c2fd76ca978c592a6f03b0307ce 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 @@ -17,8 +17,6 @@ public class Group { public Group(String projectId) { this(new ArrayList<>(), projectId); - - } public Group(List<User> members, String projectId) { 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 06bd24d75edced5f007ff2db5a58b1bbcd6b30ab..0a81ca70bee352031b17dbf485866de1962bcbde 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 @@ -18,7 +18,7 @@ public class Project { private String author; private String adminPassword; private String token; - // using enum ProjectPhase + // TODO: using enum ProjectPhase private String phase; public Project() { @@ -35,31 +35,19 @@ public class Project { this.setPhase(ProjectPhase.CourseCreation); } - public String getPhase() { - return phase; - } - - /** - * setting phase only with enum - * @param phase - */ - public void setPhase(ProjectPhase phase) { - this.phase = phase.name(); - } - - public Project(String id, String password, Boolean active, String author, String adminPassword, String token) { + public Project(String id, String password, Boolean active, String author, String adminPassword, String token, ProjectPhase projectPhase) { this.id = id; this.password = password; this.active = active; this.author = author; this.adminPassword = adminPassword; this.token = token; + this.phase = projectPhase.name(); this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); } - public Project(String id, String password, Boolean active, Timestamp timecreated, String author, - String adminPassword, String token) { + public Project(String id, String password, Boolean active, Timestamp timecreated, String author, String adminPassword, String token, String phase) { this.id = id; this.password = password; this.active = active; @@ -67,6 +55,7 @@ public class Project { this.author = author; this.adminPassword = adminPassword; this.token = token; + this.phase = phase; } public String getId() { @@ -117,10 +106,22 @@ public class Project { this.token = token; } - public Timestamp getTimecreated() { return timecreated; } + public String getPhase() { + return phase; + } + + /** + * setting phase only with enum + * + * @param phase + */ + public void setPhase(ProjectPhase phase) { + this.phase = phase.name(); + } + } \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java index ef9531d231c70944f627ee6afbaeb26ee1eb5ac5..812cbe6c04522a18b5f469bbbf7fe1cc14e1a90f 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java @@ -20,20 +20,20 @@ public class User { } public User(String name, String password, String email, Boolean isStudent) { - this.name = name; - this.password = password; - this.email = email; - this.isStudent = isStudent; - this.rocketChatAuthToken = ""; - this.rocketChatId = ""; + this(name, password, email, "", "", isStudent); } public User(String name, String password, String email, String rocketChatId, String rocketChatAuthToken, Boolean isStudent) { + this(name, password, email, "", rocketChatAuthToken, rocketChatId, isStudent); + } + + public User(String name, String password, String email, String token, String rocketChatAuthToken, String rocketChatId, Boolean isStudent) { this.name = name; this.password = password; this.email = email; - this.rocketChatId = rocketChatId; + this.token = token; this.rocketChatAuthToken = rocketChatAuthToken; + this.rocketChatId = rocketChatId; this.isStudent = isStudent; } 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 63095a393c2173a9c58180ff22e7be7b8d420a15..09fba126c48b52b04893ac4d08a4f207ffe478a5 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 @@ -38,10 +38,8 @@ public class GroupCreationService { management.create(project); } - groups.forEach(group -> management.create(group, project.getId())); - + groups.forEach(group -> management.create(group)); // 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