diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java index 676469c699f92317fc319900d99ad2952ecba628..5e74d0320fd482029e50d3369650343a55131550 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -3,6 +3,9 @@ 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.core.management.group.GroupDAO; +import unipotsdam.gf.core.management.project.ProjectDAO; +import unipotsdam.gf.core.management.user.UserDAO; import unipotsdam.gf.core.states.PhasesImpl; import unipotsdam.gf.core.testsandbox.TestList; import unipotsdam.gf.core.testsandbox.TestListInterface; @@ -39,6 +42,9 @@ public class GFApplicationBinder extends AbstractBinder { bind(TestList.class).to(TestListInterface.class); bind(DummyGroupfinding.class).to(IGroupFinding.class); bind(DummyProjectCreationService.class); + bind(UserDAO.class).to(UserDAO.class); + bind(ProjectDAO.class).to(ProjectDAO.class); + bind(GroupDAO.class).to(GroupDAO.class); } } 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 442f743a44e161ebf614b94e2332dea460a7f573..c919c527a0453673341c3547314d1250e891c325 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java @@ -6,9 +6,6 @@ import unipotsdam.gf.core.management.project.ProjectConfiguration; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserInterests; import unipotsdam.gf.core.management.user.UserProfile; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; - -import java.util.List; /** * Created by dehne on 31.05.2018. @@ -18,9 +15,9 @@ public interface Management { /** * delete a User in the database * - * @param identifier + * @param user */ - void delete(StudentIdentifier identifier); + void delete(User user); /** * create a User in the database @@ -85,52 +82,6 @@ public interface Management { Boolean exists(Group group); - /** - * Get all the users linked to a project - * - * @param project - * @return - */ - List<User> getUsers(Project project); - - /** - * get the token for the user - * - * @param user - * @return - */ - String getUserToken(User user); - - /** - * get the user given his http token - * - * @param token - * @return - */ - User getUserByToken(String token); - - /** - * get user by its email address - * - * @param email - * @return - */ - User getUserByEmail(String email); - - /** - * get project by its id - * - * @param id - * @return - */ - Project getProjectById(String id); - - void addGroupMember(User groupMember, int groupId); - - void deleteGroupMember(User groupMember, int groupId); - - List<Group> getGroupsByProjectId(String projectId); - void create(ProjectConfiguration projectConfiguration, Project project); ProjectConfiguration getProjectConfiguration(Project 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 5159addd7123b44a345d58c40a1c69723f9ed226..0a6eb7ab5e8a9e51e582fd72df54046520436d19 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -3,25 +3,22 @@ package unipotsdam.gf.core.management; import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; import unipotsdam.gf.core.management.group.Group; +import unipotsdam.gf.core.management.group.GroupDAO; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.project.ProjectConfiguration; import unipotsdam.gf.core.management.project.ProjectConfigurationDAO; +import unipotsdam.gf.core.management.project.ProjectDAO; import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.user.UserDAO; import unipotsdam.gf.core.management.user.UserInterests; import unipotsdam.gf.core.management.user.UserProfile; -import unipotsdam.gf.core.states.ProjectPhase; import unipotsdam.gf.modules.assessment.controller.model.Quiz; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; import javax.annotation.ManagedBean; import javax.annotation.Resource; +import javax.inject.Inject; 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; /** * Created by dehne on 31.05.2018. @@ -30,59 +27,13 @@ import java.util.UUID; @Resource @Singleton public class ManagementImpl implements Management { - @Override - public void delete(StudentIdentifier identifier) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "DELETE FROM users where email = (?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, identifier.getStudentId()); - connect.close(); - } - - @Override - public void create(User user, UserProfile profile) { - UUID uuid = UUID.randomUUID(); - String token = uuid.toString(); - - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + - "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), - token, user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken()); - connect.close(); - // TODO implmement UserProfile @Mar - } - - @Override - public void create(Project project) { - UUID uuid = UUID.randomUUID(); - String token = uuid.toString(); - - - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = - "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " - + "`adminPassword`, `token`, `phase`) values (?,?,?,?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.isActive(), - project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token, project.getPhase() - == null ? ProjectPhase.CourseCreation : project.getPhase()); - connect.close(); - } - - @Override - public void delete(Project project) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "DELETE FROM projects where id = (?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId()); - - // TODO: delete all groups of project? - - connect.close(); - } + @Inject + private UserDAO userDAO; + @Inject + private GroupDAO groupDAO; + @Inject + private ProjectDAO projectDAO; @Override public void register(User user, Project project, UserInterests interests) { @@ -93,155 +44,6 @@ public class ManagementImpl implements Management { connect.close(); } - @Override - 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"; - //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(); - } - - @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; - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, user.getEmail(), user.getPassword()); - result = vereinfachtesResultSet.next(); - connect.close(); - return result; - } - - @Override - public Boolean exists(Project project) { - Boolean result; - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, project.getId(), project.getAdminPassword()); - result = vereinfachtesResultSet.next(); - connect.close(); - 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 = - "SELECT * FROM users u " - + " JOIN projectuser pu ON u.email=pu.userId" - + " JOIN projects p ON pu.projectId = p.id" - + " WHERE pu.projectId = ?"; - - ArrayList<User> result = new ArrayList<>(); - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId()); - while (!vereinfachtesResultSet.isLast()) { - Boolean next = vereinfachtesResultSet.next(); - if (next) { - User user = getUserFromResultSet(vereinfachtesResultSet); - String token = vereinfachtesResultSet.getString("token"); - user.setToken(token); - result.add(user); - } else { - break; - } - } - connect.close(); - return result; - } - - private User getUserFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { - 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, token, rocketChatId, rocketChatAuthToken, isStudent); - } - - private Project getProjectFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { - String id = vereinfachtesResultSet.getString("id"); - String password = vereinfachtesResultSet.getString("password"); - boolean active = vereinfachtesResultSet.getBoolean("active"); - Timestamp timestamp = vereinfachtesResultSet.getTimestamp("timecreated"); - String author = vereinfachtesResultSet.getString("author"); - String adminPassword = vereinfachtesResultSet.getString("adminpassword"); - String token = vereinfachtesResultSet.getString("token"); - String phase = vereinfachtesResultSet.getString("phase"); - - return new Project(id, password, active, timestamp, author, adminPassword, token, phase); - } - - private void fillGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet, HashMap<Integer, Group> existingGroups) { - int id = vereinfachtesResultSet.getInt("id"); - 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 - public String getUserToken(User user) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, user.getEmail(), user.getPassword()); - boolean next = vereinfachtesResultSet.next(); - if (!next) { - connect.close(); - return null; - } - String token = vereinfachtesResultSet.getString("token"); - connect.close(); - return token; - } - - @Override - public User getUserByToken(String token) { - return getUserByField("token", token); - } - - @Override - public User getUserByEmail(String email) { - return getUserByField("email", email); - } - - /** * TODO @Axel bitte in modules/asessment verschieben * @@ -279,87 +81,54 @@ public class ManagementImpl implements Management { return quiz; } - private User getUserByField(String field, String value) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM users where " + field + " = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, value); - boolean next = vereinfachtesResultSet.next(); - if (next) { - User user = getUserFromResultSet(vereinfachtesResultSet); - connect.close(); - return user; - } else { - connect.close(); - return null; - } + @Override + public void delete(User user) { + userDAO.delete(user); } @Override - public Project getProjectById(String id) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM projects where id = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, id); - boolean next = vereinfachtesResultSet.next(); - if (next) { - Project project = getProjectFromResultSet(vereinfachtesResultSet); - connect.close(); - return project; - } else { - connect.close(); - return null; - } + public void create(User user, UserProfile profile) { + userDAO.persist(user, profile); } @Override - public void create(Group group) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); + public void update(User user) { + userDAO.update(user); + } - String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequestGroup, group.getProjectId(), group.getChatRoomId()); + @Override + public Boolean exists(User user) { + return userDAO.exists(user); + } - for (User groupMember : group.getMembers()) { - String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), group.getProjectId()); - } - connect.close(); + @Override + public void create(Project project) { + projectDAO.persist(project); } @Override - public void addGroupMember(User groupMember, int groupId) { - // TODO: implement + public void delete(Project project) { + projectDAO.delete(project); } @Override - public void deleteGroupMember(User groupMember, int groupId) { - // TODO: implement + public Boolean exists(Project project) { + return projectDAO.exists(project); } @Override - public List<Group> getGroupsByProjectId(String projectId) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM groups g " + - "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); - HashMap<Integer, Group> groupHashMap = new HashMap<>(); - while (vereinfachtesResultSet.next()) { - fillGroupFromResultSet(vereinfachtesResultSet, groupHashMap); - } - ArrayList<Group> groups = new ArrayList<>(); - groupHashMap.forEach((key, group) -> groups.add(group)); - if (groups.isEmpty()) { - return null; - } - connect.close(); + public void create(Group group) { + groupDAO.persist(group); + } + + @Override + public void update(Group group) { + groupDAO.update(group); + } - return groups; + @Override + public Boolean exists(Group group) { + return groupDAO.exists(group); } @Override diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..2d7ce6d3a83f2108c53c9d683ed3cb263da399b9 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java @@ -0,0 +1,93 @@ +package unipotsdam.gf.core.management.group; + +import unipotsdam.gf.core.database.mysql.MysqlConnect; +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.util.ResultSetUtil; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Singleton; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +@ManagedBean +@Resource +@Singleton +public class GroupDAO { + + public void persist(Group group) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + + String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)"; + 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(), group.getProjectId()); + } + connect.close(); + } + + 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) + } + + + public Boolean exists(Group group) { + List<Group> groups = getGroupsByProjectId(group.getProjectId()); + return groups.contains(group); + } + + public void addGroupMember(User groupMember, int groupId) { + // TODO: implement + } + + public void deleteGroupMember(User groupMember, int groupId) { + // TODO: implement + } + + public List<Group> getGroupsByProjectId(String projectId) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM groups g " + + "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); + HashMap<Integer, Group> groupHashMap = new HashMap<>(); + while (vereinfachtesResultSet.next()) { + fillGroupFromResultSet(vereinfachtesResultSet, groupHashMap); + } + ArrayList<Group> groups = new ArrayList<>(); + groupHashMap.forEach((key, group) -> groups.add(group)); + if (groups.isEmpty()) { + return null; + } + connect.close(); + + return groups; + } + + private void fillGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet, HashMap<Integer, Group> existingGroups) { + int id = vereinfachtesResultSet.getInt("id"); + if (existingGroups.containsKey(id)) { + existingGroups.get(id).addMember(ResultSetUtil.getUserFromResultSet(vereinfachtesResultSet)); + } else { + String projectId = vereinfachtesResultSet.getString("projectId"); + User user = ResultSetUtil.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); + } + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..4dec207bf972d569a98c57e8fa77ad7528e34fee --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java @@ -0,0 +1,86 @@ +package unipotsdam.gf.core.management.project; + +import unipotsdam.gf.core.database.mysql.MysqlConnect; +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.core.states.ProjectPhase; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Singleton; +import java.sql.Timestamp; +import java.util.UUID; + +@ManagedBean +@Resource +@Singleton +public class ProjectDAO { + + public void persist(Project project) { + UUID uuid = UUID.randomUUID(); + String token = uuid.toString(); + + + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = + "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " + + "`adminPassword`, `token`, `phase`) values (?,?,?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.isActive(), + project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token, project.getPhase() + == null ? ProjectPhase.CourseCreation : project.getPhase()); + connect.close(); + } + + public void delete(Project project) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "DELETE FROM projects where id = (?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId()); + + // TODO: delete all groups of project? + + connect.close(); + } + + public Boolean exists(Project project) { + Boolean result; + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, project.getId(), project.getAdminPassword()); + result = vereinfachtesResultSet.next(); + connect.close(); + return result; + } + + public Project getProjectById(String id) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM projects where id = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, id); + boolean next = vereinfachtesResultSet.next(); + if (next) { + Project project = getProjectFromResultSet(vereinfachtesResultSet); + connect.close(); + return project; + } else { + connect.close(); + return null; + } + } + + private Project getProjectFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + String id = vereinfachtesResultSet.getString("id"); + String password = vereinfachtesResultSet.getString("password"); + boolean active = vereinfachtesResultSet.getBoolean("active"); + Timestamp timestamp = vereinfachtesResultSet.getTimestamp("timecreated"); + String author = vereinfachtesResultSet.getString("author"); + String adminPassword = vereinfachtesResultSet.getString("adminpassword"); + String token = vereinfachtesResultSet.getString("token"); + String phase = vereinfachtesResultSet.getString("phase"); + + return new Project(id, password, active, timestamp, author, adminPassword, token, phase); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java index 879ce2268e2cf4187e8f529b6636636520c39c06..715c568c00c6cd42750deae8da892a92c6645b87 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java @@ -1,7 +1,7 @@ package unipotsdam.gf.core.management.user; -import unipotsdam.gf.core.management.ManagementImpl; - +import javax.annotation.ManagedBean; +import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; @@ -12,15 +12,19 @@ import java.io.IOException; * implemented while porting the login page. It might be useful to have a hidden user field on the page in order to * manipulate the user data with jquery */ +@ManagedBean public class HiddenUserTag extends SimpleTagSupport { + + @Inject + UserDAO userDAO; + public void doTag() throws IOException { PageContext pageContext = (PageContext) getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String token = request.getParameter("token"); - ManagementImpl management = new ManagementImpl(); - User user = management.getUserByToken(token); + User user = userDAO.getUserByToken(token); JspWriter out = getJspContext().getOut(); - out.println("<p id=\"user\" hidden>"+user.getName()+"</p>"); + out.println("<p id=\"user\" hidden>" + user.getName() + "</p>"); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java index 16e3f3ffe900a17b77df2719adfc93ee1d5b6053..2a1f7c5c4a955cc819961317d9a7cad2805b7827 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java @@ -1,7 +1,7 @@ package unipotsdam.gf.core.management.user; -import unipotsdam.gf.core.management.ManagementImpl; - +import javax.annotation.ManagedBean; +import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; @@ -11,43 +11,47 @@ import java.io.IOException; // TODO: please move this to a view package at the top of the hierarchy as this is not part of the user package +@ManagedBean public class Menu extends SimpleTagSupport { + + @Inject + private UserDAO userDAO; + public void doTag() throws JspException, IOException { PageContext pageContext = (PageContext) getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String token = request.getParameter("token"); - ManagementImpl management = new ManagementImpl(); JspWriter out = getJspContext().getOut(); - if (token!=null){ - User user = management.getUserByToken(token); + if (token != null) { + User user = userDAO.getUserByToken(token); Boolean isStudent = user.getStudent(); - if (isStudent){ + if (isStudent) { out.println("<div id=\"sidebar-wrapper\">\n" + " <ul class=\"sidebar-nav\">\n" + - " <li class=\"sidebar-brand\"><a href=\"overview-student.jsp?token="+token+"\">overview</a></li>\n" + - " <li><a href=\"profile.jsp?token="+token+"\">Profil</a></li>\n" + - " <li><a href=\"Quiz.jsp?token="+token+"\">Quizfrage</a></li>\n" + - " <li><a href=\"eportfolio.jsp?token="+token+"\">ePortfolio</a></li>\n" + - " <li><a href=\"researchReportTitle.jsp?token="+token+"\">Beitrag</a></li>\n" + - " <li><a href=\"finalAssessments.jsp?token="+token+"\">Bewertung</a></li>\n" + + " <li class=\"sidebar-brand\"><a href=\"overview-student.jsp?token=" + token + "\">overview</a></li>\n" + + " <li><a href=\"profile.jsp?token=" + token + "\">Profil</a></li>\n" + + " <li><a href=\"Quiz.jsp?token=" + token + "\">Quizfrage</a></li>\n" + + " <li><a href=\"eportfolio.jsp?token=" + token + "\">ePortfolio</a></li>\n" + + " <li><a href=\"researchReportTitle.jsp?token=" + token + "\">Beitrag</a></li>\n" + + " <li><a href=\"finalAssessments.jsp?token=" + token + "\">Bewertung</a></li>\n" + " <li><a href=\"../index.jsp\">Logout</a></li>\n" + " </ul>\n" + " </div>"); } else { out.println("<div id=\"sidebar-wrapper\">\n" + " <ul class=\"sidebar-nav\">\n" + - " <li class=\"sidebar-brand\"><a href=\"overview-docent.jsp?token="+token+"\">overview</a></li>\n" + - " <li><a href=\"Quiz.jsp?token="+token+"\">Quizfrage</a></li>\n" + + " <li class=\"sidebar-brand\"><a href=\"overview-docent.jsp?token=" + token + "\">overview</a></li>\n" + + " <li><a href=\"Quiz.jsp?token=" + token + "\">Quizfrage</a></li>\n" + " <li><a href=\"#\">ePortfolio</a></li>\n" + " <li><a href=\"#\">Beitrag</a></li>\n" + " <li><a href=\"#\">Gruppen erstellen</a></li>\n" + " <li><a href=\"#\">Projektphase ändern</a></li>\n" + - " <li><a href=\"finalAssessments.jsp?token="+token+"\">Bewertung</a></li>\n" + + " <li><a href=\"finalAssessments.jsp?token=" + token + "\">Bewertung</a></li>\n" + " <li><a href=\"../index.jsp\">Logout</a></li>\n" + " </ul>\n" + " </div>"); } - }else{ + } else { out.println("<div class='alert alert-warning'>" + "You probably did not give the token to the url" + "</div>"); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java index 3a3a695d7e870ddca681c05918a9a5c4acafddfd..d5f33ab1b826d4b6c91e2430e8feba0a7e23bf32 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java @@ -2,8 +2,9 @@ package unipotsdam.gf.core.management.user; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import unipotsdam.gf.core.management.ManagementImpl; +import javax.annotation.ManagedBean; +import javax.inject.Inject; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -17,10 +18,14 @@ import java.io.IOException; * this filter can be applied to a given space in order to validate, that the tag in the url is a valid one * not applied to to a folder yet (because might lead to confusing experiences in debugging) */ +@ManagedBean public class SessionValidator implements Filter { private final static Logger log = LoggerFactory.getLogger(SessionValidator.class); + @Inject + private UserDAO userDAO; + private void redirectToLogin(ServletRequest request, ServletResponse response) { log.debug("redirecting user to login because token does not exist"); String loginJSP = "../../index.jsp"; @@ -41,8 +46,8 @@ public class SessionValidator implements Filter { if (token == null) { redirectToLogin(request, response); } - ManagementImpl management = new ManagementImpl(); - User user = management.getUserByToken(token); + + User user = userDAO.getUserByToken(token); if (user == null) { redirectToLogin(request, response); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..f3e2bd2bcc5b99ca1b83aec370529033982baa86 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java @@ -0,0 +1,136 @@ +package unipotsdam.gf.core.management.user; + +import unipotsdam.gf.core.database.mysql.MysqlConnect; +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.core.management.project.Project; +import unipotsdam.gf.core.management.util.ResultSetUtil; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Singleton; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@ManagedBean +@Resource +@Singleton +public class UserDAO { + + public void persist(User user, UserProfile profile) { + UUID uuid = UUID.randomUUID(); + String token = uuid.toString(); + + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + + "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), + token, user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken()); + connect.close(); + + // TODO implmement UserProfile @Mar + } + + public void delete(User user) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "DELETE FROM users where email = (?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, user.getEmail()); + connect.close(); + } + + 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"; + //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(); + } + + public boolean exists(User user) { + boolean result; + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, user.getEmail(), user.getPassword()); + result = vereinfachtesResultSet.next(); + connect.close(); + return result; + } + + public List<User> getUsers(Project project) { + String query = + "SELECT * FROM users u " + + " JOIN projectuser pu ON u.email=pu.userId" + + " JOIN projects p ON pu.projectId = p.id" + + " WHERE pu.projectId = ?"; + + ArrayList<User> result = new ArrayList<>(); + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId()); + while (!vereinfachtesResultSet.isLast()) { + boolean next = vereinfachtesResultSet.next(); + if (next) { + User user = ResultSetUtil.getUserFromResultSet(vereinfachtesResultSet); + String token = vereinfachtesResultSet.getString("token"); + user.setToken(token); + result.add(user); + } else { + break; + } + } + connect.close(); + return result; + } + + public String getUserToken(User user) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, user.getEmail(), user.getPassword()); + boolean next = vereinfachtesResultSet.next(); + if (!next) { + connect.close(); + return null; + } + String token = vereinfachtesResultSet.getString("token"); + connect.close(); + return token; + } + + public User getUserByToken(String token) { + return getUserByField("token", token); + } + + public User getUserByEmail(String email) { + return getUserByField("email", email); + } + + private User getUserByField(String field, String value) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM users where " + field + " = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, value); + boolean next = vereinfachtesResultSet.next(); + if (next) { + User user = ResultSetUtil.getUserFromResultSet(vereinfachtesResultSet); + connect.close(); + return user; + } else { + connect.close(); + return null; + } + } + + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java index c457c47cbc5f6e5a115d7d44fc9fe4cb59858e12..9684fa6bce15e06cbce30b030d6a81eedfaca4fe 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java @@ -22,6 +22,9 @@ public class UserService { @Inject private ICommunication communicationService; + @Inject + private UserDAO userDAO; + /** * creates a user with given credentials * @@ -111,9 +114,8 @@ public class UserService { } private User fillUserFields(User user) { - ManagementImpl m = new ManagementImpl(); - String token = m.getUserToken(user); - user = m.getUserByToken(token); + String token = userDAO.getUserToken(user); + user = userDAO.getUserByToken(token); return user; } @@ -142,7 +144,7 @@ public class UserService { } else { successUrl = "../pages/overview-docent.jsp?token="; } - successUrl += management.getUserToken(user); + successUrl += userDAO.getUserToken(user); return forwardToLocation(successUrl); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..7a79f816542360f3039f8468b9440c8d3bc91330 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java @@ -0,0 +1,18 @@ +package unipotsdam.gf.core.management.util; + +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.core.management.user.User; + +public class ResultSetUtil { + + public static User getUserFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + 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, token, rocketChatId, rocketChatAuthToken, isStudent); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java index e3ad42205b6ae45070ae70f643a9f6e662757a18..acdd40ae1ef5327f42b8fd1336079937ea535a12 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java @@ -1,11 +1,15 @@ package unipotsdam.gf.core.states; -import unipotsdam.gf.core.management.Management; -import unipotsdam.gf.core.management.project.Project; +import unipotsdam.gf.core.management.project.ProjectDAO; import unipotsdam.gf.interfaces.IPhases; import javax.inject.Inject; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; /** @@ -19,7 +23,7 @@ public class PhasesService { private IPhases phases; @Inject - private Management management; + private ProjectDAO projectDAO; /** * end phase @@ -30,7 +34,7 @@ public class PhasesService { @POST @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public void endPhase(@PathParam("projectPhase") String projectPhase, @PathParam("projectId") String projectId) { - phases.endPhase(ProjectPhase.valueOf(projectPhase), management.getProjectById(projectId)); + phases.endPhase(ProjectPhase.valueOf(projectPhase), projectDAO.getProjectById(projectId)); } /** @@ -42,6 +46,6 @@ public class PhasesService { @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public String getCurrentPhase(@PathParam("projectId") String projectId) { - return management.getProjectById(projectId).getPhase(); + return projectDAO.getProjectById(projectId).getPhase(); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationService.java index 809ead314966492fbc0142b823f7a9167eaf2133..a4356f47bb67779049f3333665c9121f2c6f00ff 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationService.java @@ -2,8 +2,10 @@ package unipotsdam.gf.modules.groupfinding.dummy.service; import unipotsdam.gf.core.management.Management; import unipotsdam.gf.core.management.group.Group; +import unipotsdam.gf.core.management.group.GroupDAO; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.user.UserDAO; import unipotsdam.gf.core.management.user.UserProfile; import unipotsdam.gf.interfaces.ICommunication; @@ -27,6 +29,12 @@ public class DummyProjectCreationService { @Inject private Management management; + @Inject + private GroupDAO groupDAO; + + @Inject + private UserDAO userDAO; + public boolean createExampleProject() { User docentUser = getDocentUser(); @@ -43,7 +51,7 @@ public class DummyProjectCreationService { nonCreatedGroups.forEach(group -> management.create(group)); } - List<Group> groupsWithId = management.getGroupsByProjectId(project.getId()); + List<Group> groupsWithId = groupDAO.getGroupsByProjectId(project.getId()); groupsWithId.forEach(group -> { String chatRoomName = String.join(" - ", project.getId(), String.valueOf(group.getId())); group.setChatRoomId(communicationService.createChatRoom(chatRoomName, group.getMembers())); @@ -83,7 +91,7 @@ public class DummyProjectCreationService { if (!management.exists(docent)) { saveUserToDatabase(docent); } else { - docent = management.getUserByEmail(docent.getEmail()); + docent = userDAO.getUserByEmail(docent.getEmail()); } return docent; } diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java index 9fbce54234111c240d671b9fb5e6ea7443201dda..e087e61c5f583e340d5709e76303ec3f232c1b5b 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java @@ -1,26 +1,20 @@ package unipotsdam.gf.interfaces; -import javafx.application.Application; -import org.glassfish.hk2.api.ServiceLocator; -import org.glassfish.hk2.utilities.Binder; -import org.glassfish.hk2.utilities.ServiceLocatorUtilities; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.junit.Before; import org.junit.Test; import uk.co.jemos.podam.api.PodamFactory; import uk.co.jemos.podam.api.PodamFactoryImpl; -import unipotsdam.gf.config.GFApplicationBinder; -import unipotsdam.gf.config.GFResourceConfig; import unipotsdam.gf.core.management.ManagementImpl; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.project.ProjectConfiguration; import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.user.UserDAO; import unipotsdam.gf.core.management.user.UserProfile; import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * Created by dehne on 01.06.2018. @@ -87,6 +81,7 @@ public class ManagementTest { @Test public void testUpdateUser() { ManagementImpl management = new ManagementImpl(); + UserDAO userDAO = new UserDAO(); User user = new User("julian", "1234", "testUpdateUser@stuff.com", true); user.setToken("abc"); management.create(user, new UserProfile()); @@ -95,7 +90,7 @@ public class ManagementTest { user.setStudent(false); management.update(user); assertTrue(management.exists(user)); - User managementUser = management.getUserByToken(user.getToken()); + User managementUser = userDAO.getUserByToken(user.getToken()); assertEquals(user.getStudent(), managementUser.getStudent()); } @@ -116,7 +111,8 @@ public class ManagementTest { management.create(user2, new UserProfile()); assert management.exists(user2); - List<User> users = management.getUsers(project); + UserDAO userDAO = new UserDAO(); + List<User> users = userDAO.getUsers(project); assert users != null; assert !users.isEmpty();