Skip to content
Snippets Groups Projects
Commit e903f207 authored by Martin Staehr's avatar Martin Staehr
Browse files

#40 refactor: refactor management class and move functions into separate DAOs

parent 6a9509d0
No related branches found
No related tags found
No related merge requests found
Showing
with 452 additions and 370 deletions
......@@ -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);
}
}
......@@ -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);
......
......@@ -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
......
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);
}
}
}
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);
}
}
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>");
}
}
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>");
......
......@@ -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);
}
......
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;
}
}
}
......@@ -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);
}
......
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);
}
}
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();
}
}
......@@ -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;
}
......
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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment