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 5d1dcc695c48252733445714859443160c1a89bc..c86b8aa6d5db95159640747c314b4ba141c0fbae 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -212,9 +212,9 @@ public class ManagementImpl implements Management { /** - * TODO @Axel bitte in modules/asessment verschieben - * @param projectId - * @param quizId + * + * @param field + * @param value * @return */ private User getUserByField(String field, String value) { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java.orig deleted file mode 100644 index 406fbafeadaa1c4f59ef933dbd831623b4aa5c48..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java.orig +++ /dev/null @@ -1,349 +0,0 @@ -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.project.Project; -import unipotsdam.gf.core.management.project.ProjectConfiguration; -import unipotsdam.gf.core.management.project.ProjectConfigurationDAO; -import unipotsdam.gf.core.management.user.User; -import unipotsdam.gf.core.management.user.UserInterests; -import unipotsdam.gf.core.management.user.UserProfile; -<<<<<<< HEAD -======= -import unipotsdam.gf.core.states.ProjectPhase; -import unipotsdam.gf.modules.assessment.controller.model.Quiz; ->>>>>>> origin/session_management -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; - -import javax.annotation.ManagedBean; -import javax.annotation.Resource; -import javax.inject.Singleton; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -/** - * Created by dehne on 31.05.2018. - */ -@ManagedBean -@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 - } - - // TODO: naming convention discussion? all is named create, but group is named createGroup - @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()); - connect.close(); - } - - @Override - public void register(User user, Project project, UserInterests interests) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "INSERT INTO projectuser (`projectId`, `userId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), user.getId()); - 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 - connect.issueUpdateStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), - user.getToken(), user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken(), user.getEmail()); - connect.close(); - } - - @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 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 rocketChatId = vereinfachtesResultSet.getString("rocketChatId"); - String rocketChatAuthToken = vereinfachtesResultSet.getString("rocketChatAuthToken"); - Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent"); - return new User(name, password, email, 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); - } - - private Group getGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { - int id = vereinfachtesResultSet.getInt("id"); - String projectId = vereinfachtesResultSet.getString("projectId"); - String chatRoomId = vereinfachtesResultSet.getString("chatRoomId"); - // TODO: determine how to get all User - return new Group(id, new ArrayList<>(), projectId, chatRoomId); - } - - @Override - public String getUserToken(User user) { - MysqlConnect connect = new MysqlConnect(); - 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); - } - -<<<<<<< HEAD -======= - - /** - * TODO @Axel bitte in modules/asessment verschieben - * @param projectId - * @param quizId - * @return - */ - public Quiz getQuizByProjectGroupId(String projectId, String quizId){ - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question="+quizId; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, ""); - boolean next = vereinfachtesResultSet.next(); - String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - String answer = ""; - Boolean correct = false; - String mcType = ""; - while (next) { - mcType = vereinfachtesResultSet.getString("mcType"); - question = vereinfachtesResultSet.getString("question"); - answer = vereinfachtesResultSet.getString("answer"); - correct = vereinfachtesResultSet.getBoolean("correct"); - if (correct){ - correctAnswers.add(answer); - }else{ - incorrectAnswers.add(answer); - } - next = vereinfachtesResultSet.next(); - } - Quiz quiz = new Quiz(mcType,question, correctAnswers, incorrectAnswers); - connect.close(); - return quiz; - } - ->>>>>>> origin/session_management - 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 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; - } - } - - - @Override - public void createGroup(Group group, String projectId) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - - Project project = getProjectById(projectId); - - for (User groupMember : group.getMembers()) { - String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), project.getId()); - } - connect.close(); - } - - @Override - public void addGroupMember(User groupMember, int groupId) { - - } - - @Override - public void deleteGroupMember(User groupMember, int groupId) { - - } - - @Override - public List<Group> getGroupsByProjectId(String projectId) { - MysqlConnect connect = new MysqlConnect(); - connect.connect(); - // TODO: implement correct join and finish implementation - String mysqlRequest = "SELECT * FROM groups g " + - "JOIN groupuser gu u ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + - "where g.projectId = ?"; - VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, projectId); - ArrayList<Group> groups = new ArrayList<>(); - while (vereinfachtesResultSet.next()) { - //groups.add() - } - if (groups.isEmpty()) { - return null; - } else { - return groups; - } - } - - @Override - public void create(ProjectConfiguration projectConfiguration, Project project) { - ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO(); - projectConfigurationDAO.persistProjectConfiguration(projectConfiguration,project); - } - - @Override - public ProjectConfiguration getProjectConfiguration(Project project) { - ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO(); - return projectConfigurationDAO.loadProjectConfiguration(project); - } -} 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 f62ec00b1b93c7d3b504e6f4cf196249fd13b4e1..d08c07de61e40d362e06bfa2ca3fa2f66b0e73c7 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 @@ -38,7 +38,7 @@ public class Menu extends SimpleTagSupport { out.println("<div id=\"sidebar-wrapper\">\n" + " <ul class=\"sidebar-nav\">\n" + " <li class=\"sidebar-brand\"><a href=\"overview-docent.jsp?token="+token+"&projectId="+projectId+"\">overview</a></li>\n" + - " <li><a href=\"Quiz.jsp?token="+token+"&projectId="+projectId+"\">Quizfrage</a></li>\n" + + " <li><a href=\"Quiz-docent.jsp?token="+token+"&projectId="+projectId+"\">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" + @@ -64,4 +64,4 @@ public class Menu extends SimpleTagSupport { } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java index 4d272a101ef35ae94b8d370d70b94133d2c7f754..d2109728546943d36eed575156a7af37f5e3309b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java @@ -1,11 +1,11 @@ package unipotsdam.gf.interfaces; -import unipotsdam.gf.assignments.NotImplementedLogger; import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * Created by dehne on 18.05.2018. @@ -42,7 +42,7 @@ public interface IPeerAssessment { * * @param totalPerformance @return */ - List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array + Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array /** @@ -73,15 +73,20 @@ public interface IPeerAssessment { * * @param peerRatings * @param projectId - * @param groupId */ - void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId); + void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId); + + void postContributionRating(StudentIdentifier student, + String fromPeer, + Map<String, Integer> contributionRating); /** * - * @param studentAndQuiz - * @param quizAnswer + * @param questions + * @param student */ - void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer); + void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student); void deleteQuiz(String quizId); + + Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java.orig deleted file mode 100644 index 134a601324f48c9a437cb87d92d5d2566775c4a4..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java.orig +++ /dev/null @@ -1,90 +0,0 @@ -package unipotsdam.gf.interfaces; - -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.modules.assessment.QuizAnswer; -import unipotsdam.gf.modules.assessment.controller.model.*; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by dehne on 18.05.2018. - */ -public interface IPeerAssessment { - - /** - * student and performance are written to DB - * - * @param assessment - */ - void addAssessmentDataToDB(Assessment assessment); - - Quiz getQuiz(String projectId, String groupId, String author); - /** - * will return a saved assessment from the DB - * - * @param student - * @return Assessement = studentIdentifier , performance - */ - Assessment getAssessmentDataFromDB(StudentIdentifier student); - - /** - * writes a quiz-question into the DB so other students can benefit from another's insights. - * - * @param studentAndQuiz - */ - void createQuiz(StudentAndQuiz studentAndQuiz) ; - - /** - * calculate grades for everyone in a list. - * either it will be overwritten by choice of co- or peer-assessment or it gets a parameter which specifies it. - * - * - * @param totalPerformance @return - */ - List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array - - - /** - * - * @param studentIdentifier - * @return - */ - ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier); - - /** - * calculates the mean value of all assessments in a project. - * - * @param ProjectId - * @return - */ - int meanOfAssessment(String ProjectId); - - /** - * returns all quizzes in a project - * - * @param projectId - * @return all quizzes in projectId - */ - ArrayList<Quiz> getQuiz(String projectId); - - /** - * writes the peerRatings into db - * - * @param peerRatings - * @param projectId - * @param groupId - */ - void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId); - -<<<<<<< HEAD - void deleteQuiz(String quizId); -======= - /** - * - * @param studentAndQuiz - * @param quizAnswer - */ - void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer); ->>>>>>> origin/session_management -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java new file mode 100644 index 0000000000000000000000000000000000000000..2937b2e3766b6fc3a15fd4595e2878d540dea5cd --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java @@ -0,0 +1,24 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Categories { + public static final List<String> workRatingCategories = Collections.unmodifiableList( + new ArrayList<String>() {{ + add("responsibility"); + add("partOfWork"); + add("cooperation"); + add("communication"); + add("autonomous"); + }} + ); + public static final List<String> contributionRatingCategories = Collections.unmodifiableList( + new ArrayList<String>() {{ + add("Dossier"); + add("eJournal"); + add("research"); + }} + ); +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java index 80d35be34f8e6208f5c436d267e4d6e93b391129..0d29f8ce6322059e0258f708af7cd581d864e436 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java @@ -1,18 +1,19 @@ package unipotsdam.gf.modules.assessment.controller.model; import java.util.Arrays; +import java.util.Map; public class PeerRating { private String fromPeer; private String toPeer; - private int[] workRating; + private Map workRating; @Override public String toString() { return "PeerRating{" + "fromPeer='" + fromPeer + '\'' + ", toPeer='" + toPeer + '\'' + - ", workRating=" + Arrays.toString(workRating) + + ", workRating=" + workRating + '}'; } @@ -35,15 +36,15 @@ public class PeerRating { this.toPeer = toPeer; } - public int[] getWorkRating() { + public Map getWorkRating() { return workRating; } - public void setWorkRating(int[] workRating) { + public void setWorkRating(Map<String, Number> workRating) { this.workRating = workRating; } - public PeerRating(String fromPeer, String toPeer, int[] workRating) { + public PeerRating(String fromPeer, String toPeer, Map<String, Number> workRating) { this.fromPeer = fromPeer; this.toPeer = toPeer; this.workRating = workRating; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java index 41a74ef307f07b7f2953183ac2f1b18eba61159e..c5bdd8cb17e438fcfc4865cb9e97de9476b7a325 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java @@ -1,20 +1,22 @@ package unipotsdam.gf.modules.assessment.controller.model; import java.util.Arrays; +import java.util.List; +import java.util.Map; public class Performance { private StudentIdentifier studentIdentifier; - private int[] quizAnswer; - private String feedback; - private int[] workRating; + private List<Integer> quizAnswer; + private Map<String, Double> workRating; + private Map<String, Double> contributionRating; public Performance(){} - public Performance(StudentIdentifier student, int[] quiz, String feedback, int[] workRating) { + public Performance(StudentIdentifier student, List<Integer> quiz, Map contributionRating, Map workRating) { this.studentIdentifier = student; this.quizAnswer = quiz; - this.feedback=feedback; this.workRating=workRating; + this.contributionRating=contributionRating; } @@ -25,28 +27,24 @@ public class Performance { public void setStudentIdentifier(StudentIdentifier studentIdentifier) { this.studentIdentifier = studentIdentifier; } + public Map getContributionRating() { return contributionRating; } - public int[] getQuizAnswer() { - return quizAnswer; - } + public void setContributionRating(Map contributionRating) { this.contributionRating = contributionRating; } - public void setQuizAnswer(int[] quizAnswer) { - this.quizAnswer = quizAnswer; - } - public String getFeedback() { - return feedback; + public List<Integer> getQuizAnswer() { + return quizAnswer; } - public void setFeedback(String feedback) { - this.feedback = feedback; + public void setQuizAnswer(List<Integer> quizAnswer) { + this.quizAnswer = quizAnswer; } - public int[] getWorkRating() { + public Map getWorkRating() { return workRating; } - public void setWorkRating(int[] workRating) { + public void setWorkRating(Map workRating) { this.workRating = workRating; } @@ -55,9 +53,9 @@ public class Performance { public String toString() { return "Performance{" + "studentIdentifier=" + studentIdentifier + - ", quizAnswer=" + Arrays.toString(quizAnswer) + - ", feedback='" + feedback + '\'' + - ", workRating=" + Arrays.toString(workRating) + + ", quizAnswer=" + quizAnswer + + ", contributionRating='" + contributionRating + '\'' + + ", workRating=" + workRating + '}'; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java new file mode 100644 index 0000000000000000000000000000000000000000..ff2d1bdc4eef24c126ac98ffa789fd32ee658154 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java @@ -0,0 +1,17 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +public enum cheatCheckerMethods { + variance("variance"), + median("median"), + none(""); + + private final String text; + + cheatCheckerMethods(final String text){ + this.text = text; + } + @Override + public String toString(){ + return text; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java index 24289a14da1aab0670e842e754f42bf7c18ee0d7..c5e803245536598c1664156205fb56e1067eb4b2 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java @@ -2,56 +2,174 @@ package unipotsdam.gf.modules.assessment.controller.service; import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; -import unipotsdam.gf.modules.assessment.controller.model.Assessment; -import unipotsdam.gf.modules.assessment.controller.model.Performance; -import unipotsdam.gf.modules.assessment.controller.model.Quiz; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.*; import javax.annotation.ManagedBean; import javax.annotation.Resource; import javax.inject.Singleton; import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @ManagedBean @Resource @Singleton -public class AssessmentDBCommunication { - public Assessment getAssessment(StudentIdentifier student){ +class AssessmentDBCommunication { + + ArrayList<Map<String, Double>> getWorkRating(StudentIdentifier student) { + ArrayList<Map<String, Double>> result = new ArrayList<>(); + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM `workrating` WHERE `projectId`=? AND `studentId`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); + boolean next = vereinfachtesResultSet.next(); + while (next) { + Map<String, Double> workRating = new HashMap<>(); + for (String category : Categories.workRatingCategories) { + workRating.put(category, (double) vereinfachtesResultSet.getInt(category)); + } + result.add(workRating); + next = vereinfachtesResultSet.next(); + } + return result; + } + + List<String> getStudents(String projectID) { + List<String> result = new ArrayList<>(); + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM `projectuser` WHERE `projectId`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectID); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.add(vereinfachtesResultSet.getString("userID")); + next = vereinfachtesResultSet.next(); + } + return result; + } + + ArrayList<Map<String, Double>> getContributionRating(StudentIdentifier student) { + ArrayList<Map<String, Double>> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "SELECT * FROM `peerAssessment` WHERE `projectId`=? AND `studentId`=?"; + String mysqlRequest = "SELECT * FROM `contributionrating` WHERE `projectId`=? AND `studentId`=?"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); boolean next = vereinfachtesResultSet.next(); - String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - String answer; - Boolean correct; - String mcType = ""; while (next) { - mcType = vereinfachtesResultSet.getString("mcType"); - question = vereinfachtesResultSet.getString("question"); - answer = vereinfachtesResultSet.getString("answer"); - correct = vereinfachtesResultSet.getBoolean("correct"); - if (correct){ - correctAnswers.add(answer); - }else{ - incorrectAnswers.add(answer); + Map<String, Double> contributionRating = new HashMap<>(); + for (String category : Categories.contributionRatingCategories) { + contributionRating.put(category, (double) vereinfachtesResultSet.getInt(category)); } + result.add(contributionRating); next = vereinfachtesResultSet.next(); } - Performance performance=null; - Assessment assessment = new Assessment(student, performance); connect.close(); - return assessment; + return result; } - public void deleteQuiz(String quizId) { + ArrayList<Integer> getAnsweredQuizzes(StudentIdentifier student) { + ArrayList<Integer> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "DELETE FROM quiz where question = (?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, quizId); + String mysqlRequest = "SELECT * FROM `answeredquiz` WHERE `projectId`=? AND `studentId`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.add(vereinfachtesResultSet.getInt("correct")); + next = vereinfachtesResultSet.next(); + } connect.close(); + return result; } + + void writeAnsweredQuiz(StudentIdentifier student, Map<String, Boolean> questions) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + for (String question: questions.keySet()){ + String mysqlRequest = "INSERT INTO `answeredquiz`(`projectId`, `studentId`, `question`, `correct`) VALUES (?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, + student.getProjectId(), + student.getStudentId(), + question, + questions.get(question) + ); + } + connect.close(); + } + + void writeWorkRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> workRating) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "INSERT INTO `workrating`(`projectId`, `studentId`, `fromPeer`, " + + "`responsibility`, " + + "`partOfWork`, " + + "`cooperation`, " + + "`communication`, " + + "`autonomous`" + + ") VALUES (?,?,?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent, + workRating.get("responsibility"), + workRating.get("partOfWork"), + workRating.get("cooperation"), + workRating.get("communication"), + workRating.get("autonomous") + ); + connect.close(); + } + + void writeContributionRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "INSERT INTO `contributionrating`(" + + "`studentId`, " + + "`projectId`, " + + "`fromPeer`, " + + "`dossier`, " + + "`eJournal`, " + + "`research`) " + + "VALUES (?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, + student.getStudentId(), + student.getProjectId(), + fromStudent, + contributionRating.get("dossier"), + contributionRating.get("eJournal"), + contributionRating.get("research") + ); + connect.close(); + } + + void writeGradesToDB(Grading grade) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "INSERT INTO `grades`(`projectId`, `studentId`, `grade`) VALUES (?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, + grade.getStudentIdentifier().getProjectId(), + grade.getStudentIdentifier().getStudentId(), + grade.getGrade() + ); + connect.close(); + } + + public Map<String, Boolean> getAnswers(String projectId, String question) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + Map<String, Boolean> result = new HashMap<>(); + String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectId, question); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.put(vereinfachtesResultSet.getString("answer"), vereinfachtesResultSet.getBoolean("correct")); + next = vereinfachtesResultSet.next(); + } + connect.close(); + return result; + } + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java index 0de6aa34c5c74904885c1c27031cc6d197dd4b54..ef9dd768e6d5890a7790156a62a5aa6b44986c30 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java @@ -5,6 +5,7 @@ import unipotsdam.gf.modules.assessment.controller.model.*; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * Created by dehne on 18.05.2018. @@ -27,7 +28,7 @@ public class FBAssessement extends AssessmentDAO { } @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) { return null; } @@ -55,12 +56,17 @@ public class FBAssessement extends AssessmentDAO { } @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { + public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) { } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { + + } + + @Override + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { } @@ -68,4 +74,9 @@ public class FBAssessement extends AssessmentDAO { public void deleteQuiz(String quizId) { } + + @Override + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { + return null; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java.orig deleted file mode 100644 index 76c82f4dd1ee5d8f9652d9f44002d173198dea7a..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java.orig +++ /dev/null @@ -1,70 +0,0 @@ -package unipotsdam.gf.modules.assessment.controller.service; - -import unipotsdam.gf.modules.assessment.QuizAnswer; -import unipotsdam.gf.modules.assessment.controller.model.*; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by dehne on 18.05.2018. - */ -public class FBAssessement extends AssessmentDAO { - - @Override - public void addAssessmentDataToDB(Assessment assessment) { - // write it to db - } - - @Override - public Quiz getQuiz(String projectId, String groupId, String author) { - return null; - } - - @Override - public void createQuiz(StudentAndQuiz studentAndQuiz) { - - } - - @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { - return null; - } - - @Override - public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { - return null; - } - - public void createQuiz(StudentIdentifier student, String question, String[] answers){ //writes a new question into the DB - - } - - public boolean permission(int feedbackCount){ - return true; - } - - @Override - public int meanOfAssessment(String projectId) { - return 0; - } - - @Override - public ArrayList<Quiz> getQuiz(String projectId) { - return null; - } - - @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { - - } - - @Override -<<<<<<< HEAD - public void deleteQuiz(String quizId) { -======= - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { ->>>>>>> origin/session_management - - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java index 4faf3d93e2dd1ae3179fdbef6a2520e6c302c26f..820adb76b897dc5028f45c13e8aba944aa6a09fc 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java @@ -1,12 +1,11 @@ package unipotsdam.gf.modules.assessment.controller.service; +import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.interfaces.IPeerAssessment; import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; public class PeerAssessment implements IPeerAssessment { @Override @@ -26,12 +25,12 @@ public class PeerAssessment implements IPeerAssessment { @Override public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - return new AssessmentDBCommunication().getAssessment(student); + return null; } @Override public void createQuiz(StudentAndQuiz studentAndQuiz) { - new QuizDBCommunication().createQuiz(studentAndQuiz.getQuiz(),studentAndQuiz.getStudentIdentifier().getStudentId(), studentAndQuiz.getStudentIdentifier().getProjectId()); + new QuizDBCommunication().createQuiz(studentAndQuiz.getQuiz(), studentAndQuiz.getStudentIdentifier().getStudentId(), studentAndQuiz.getStudentIdentifier().getProjectId()); } @Override @@ -40,50 +39,153 @@ public class PeerAssessment implements IPeerAssessment { } @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { - List<Grading> quizMean = meanOfQuizzes(totalPerformance); - List<Grading> workRateMean = meanOfWorkRate(totalPerformance); - Grading[] grading = new Grading[totalPerformance.size()]; - for (int i=0; i<quizMean.size(); i++){ - double grade = quizMean.get(i).getGrade() * workRateMean.get(i).getGrade(); - grading[i] = new Grading(totalPerformance.get(i).getStudentIdentifier(), grade); + public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) { + Map<StudentIdentifier, Double> quizMean = new HashMap<>(quizGrade(totalPerformance)); + Map<StudentIdentifier, Map<String, Double>> workRating = new HashMap<>(); + Map<StudentIdentifier, Map<String, Double>> contributionRating = new HashMap<>(); + for (Performance performance : totalPerformance) { + workRating.put(performance.getStudentIdentifier(), performance.getWorkRating()); + contributionRating.put(performance.getStudentIdentifier(), performance.getContributionRating()); + } + Map<StudentIdentifier, Double> workRateMean = new HashMap<>(mapToGrade(workRating)); + Map<StudentIdentifier, Double> contributionMean = new HashMap<>(mapToGrade(contributionRating)); + Map<StudentIdentifier, Double> result = new HashMap<>(); + for (StudentIdentifier student : quizMean.keySet()) { + double grade = (quizMean.get(student) + workRateMean.get(student) + contributionMean.get(student)) * 100 / 3. ; + result.put(student, grade); } + return result; + } - return Arrays.asList(grading); + @Override + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { + ArrayList<Performance> totalPerformance = new ArrayList<>(); + //get all students in projectID from DB + List<String> students = new AssessmentDBCommunication().getStudents(projectId); + //for each student + for (String student : students) { + Performance performance = new Performance(); + StudentIdentifier studentIdentifier = new StudentIdentifier(projectId, student); + List<Integer> answeredQuizzes = new AssessmentDBCommunication().getAnsweredQuizzes(studentIdentifier); + ArrayList<Map<String, Double>> workRating = new AssessmentDBCommunication().getWorkRating(studentIdentifier); + ArrayList<Map<String, Double>> contributionRating = new AssessmentDBCommunication().getContributionRating(studentIdentifier); + performance.setStudentIdentifier(studentIdentifier); + performance.setQuizAnswer(answeredQuizzes); + performance.setWorkRating(cheatChecker(workRating, cheatCheckerMethods.variance)); + performance.setContributionRating(cheatChecker(contributionRating, cheatCheckerMethods.variance)); + totalPerformance.add(performance); + } + return calculateAssessment(totalPerformance); } - private List<Grading> meanOfQuizzes(ArrayList<Performance> totalPerformance){ + private Map<StudentIdentifier, Double> quizGrade(ArrayList<Performance> totalPerformance) { double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; + Map<StudentIdentifier, Double> grading = new HashMap<>(); for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = 0; j < totalPerformance.get(i).getQuizAnswer().length; j++) { - allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j]; + for (Integer quiz : totalPerformance.get(i).getQuizAnswer()) { + allAssessments[i] += quiz; } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length; + allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().size(); } for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; + grading.put(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); } - return Arrays.asList(grading); + return grading; } - private List<Grading> meanOfWorkRate(ArrayList<Performance> totalPerformance){ - double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; + private Map<StudentIdentifier, Double> mapToGrade(Map<StudentIdentifier, Map<String, Double>> ratings) { + Double allAssessments; + Map<StudentIdentifier, Double> grading = new HashMap<>(); + for (StudentIdentifier student : ratings.keySet()) { + if (ratings.get(student) != null){ + allAssessments = sumOfDimensions(ratings.get(student)); + Double countDimensions = (double) ratings.get(student).size(); + grading.put(student, (allAssessments-1) / (countDimensions * 4)); + } + else { + grading.put(student, 0.); + } + } + return grading; + } - for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = 0; j < totalPerformance.get(i).getWorkRating().length; j++) { - allAssessments[i] += 6-totalPerformance.get(i).getWorkRating()[j]; + private Double sumOfDimensions(Map rating) { + Double sumOfDimensions = 0.; + for (Object o : rating.entrySet()) { + HashMap.Entry pair = (HashMap.Entry) o; + Double markForDimension = (Double) pair.getValue(); + sumOfDimensions += markForDimension; + } + return sumOfDimensions; + } + + private Map<String, Double> meanOfWorkRatings(ArrayList<Map<String, Double>> workRatings) { + HashMap<String, Double> mean = new HashMap<>(); + Double size = (double) workRatings.size(); + for (Object o : workRatings.get(0).entrySet()) { + Map.Entry pair = (Map.Entry) o; + mean.put((String) pair.getKey(), 0.0); + } + for (Map<String, Double> rating : workRatings) { + for (Object o : rating.entrySet()) { + Map.Entry pair = (Map.Entry) o; + Double value = (double) pair.getValue(); + mean.put((String) pair.getKey(), value / size + mean.get(pair.getKey())); } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getWorkRating().length; } - for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; + return mean; + } + + private Map<String, Double> cheatChecker(ArrayList<Map<String, Double>> workRatings, cheatCheckerMethods method) { + ArrayList<Map<String, Double>> oneExcludedMeans = new ArrayList<>(); + Map<String, Double> result; + if (workRatings.size() > 1) { + for (Map rating : workRatings) { + ArrayList<Map<String, Double>> possiblyCheating = new ArrayList<>(workRatings); + possiblyCheating.remove(rating); + oneExcludedMeans.add(meanOfWorkRatings(possiblyCheating)); + } + } else { + if (workRatings.size() <1){ + return null; + } + oneExcludedMeans.add(meanOfWorkRatings(workRatings)); } - return Arrays.asList(grading); + if (method.equals(cheatCheckerMethods.median)) { + workRatings.sort(byMean); + result = workRatings.get(workRatings.size() / 2); //in favor of student + } else { + if (method.equals(cheatCheckerMethods.variance)) { + Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans)); + ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>(); + for (Map<String, Double> rating : oneExcludedMeans) { + HashMap<String, Double> shuttle = new HashMap<>(); + for (String key : rating.keySet()) { + Double value = (rating.get(key) - meanWorkRating.get(key)) * (rating.get(key) - meanWorkRating.get(key)); + shuttle.put(key, value); + } + elementwiseDeviation.add(shuttle); + } + Double deviationOld = 0.; + Integer key = 0; + for (Integer i = 0; i < elementwiseDeviation.size(); i++) { + Double deviationNew = 0.; + for (Double devi : elementwiseDeviation.get(i).values()) { + deviationNew += devi; + } + if (deviationNew > deviationOld) { + deviationOld = deviationNew; + key = i; + } + } + result = oneExcludedMeans.get(key); //gets set of rates with highest deviation in data + //so without the cheater + } else { //without cheatChecking + result = meanOfWorkRatings(workRatings); + } + } + return result; } @Override @@ -97,14 +199,48 @@ public class PeerAssessment implements IPeerAssessment { } - @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { - + public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) { + for (PeerRating peer: peerRatings){ + StudentIdentifier student = new StudentIdentifier(projectId, peer.getToPeer()); + new AssessmentDBCommunication().writeWorkRatingToDB(student, peer.getFromPeer(), peer.getWorkRating()); + } } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + public void postContributionRating(StudentIdentifier student, + String fromStudent, + Map<String, Integer> contributionRating) { + new AssessmentDBCommunication().writeContributionRatingToDB(student, fromStudent, contributionRating); + } + @Override + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { + for (String question: questions.keySet()){ + Map<String, Boolean> whatAreAnswers = new AssessmentDBCommunication().getAnswers(student.getProjectId(), question); + Map<String, Boolean> wasQuestionAnsweredCorrectly = new HashMap<>(); + Boolean correct = true; + for (String studentAnswer: questions.get(question)){ + if (!whatAreAnswers.get(studentAnswer)){ + correct=false; + } + } + wasQuestionAnsweredCorrectly.put(question, correct); + new AssessmentDBCommunication().writeAnsweredQuiz(student, wasQuestionAnsweredCorrectly); + } } + + private Comparator<Map<String, Double>> byMean = (o1, o2) -> { + Double sumOfO1 = 0.; + Double sumOfO2 = 0.; + for (String key : o1.keySet()) { + sumOfO1 += o1.get(key); + sumOfO2 += o2.get(key); + } + if (sumOfO1.equals(sumOfO2)) { + return 0; + } else { + return sumOfO1 > sumOfO2 ? -1 : 1; + } + }; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java.orig deleted file mode 100644 index 5335af53fd1b59c1b49775f877918fa61b469715..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java.orig +++ /dev/null @@ -1,114 +0,0 @@ -package unipotsdam.gf.modules.assessment.controller.service; - -<<<<<<< HEAD -======= -import unipotsdam.gf.core.management.ManagementImpl; ->>>>>>> origin/session_management -import unipotsdam.gf.interfaces.IPeerAssessment; -import unipotsdam.gf.modules.assessment.QuizAnswer; -import unipotsdam.gf.modules.assessment.controller.model.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class PeerAssessment implements IPeerAssessment { - @Override - public void addAssessmentDataToDB(Assessment assessment) { - - } - - @Override//returns one quiz - public Quiz getQuiz(String projectId, String quizId, String author) { - return new QuizDBCommunication().getQuizByProjectQuizId(projectId, quizId, author); - } - - @Override //returns all quizzes in the course - public ArrayList<Quiz> getQuiz(String projectId) { - return new QuizDBCommunication().getQuizByProjectId(projectId); - } - - @Override - public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - return new AssessmentDBCommunication().getAssessment(student); - } - - @Override - public void createQuiz(StudentAndQuiz studentAndQuiz) { - new QuizDBCommunication().createQuiz(studentAndQuiz.getQuiz(),studentAndQuiz.getStudentIdentifier().getStudentId(), studentAndQuiz.getStudentIdentifier().getProjectId()); - } - - @Override - public void deleteQuiz(String quizId) { - new QuizDBCommunication().deleteQuiz(quizId); - } - - @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { - List<Grading> quizMean = meanOfQuizzes(totalPerformance); - List<Grading> workRateMean = meanOfWorkRate(totalPerformance); - Grading[] grading = new Grading[totalPerformance.size()]; - for (int i=0; i<quizMean.size(); i++){ - double grade = quizMean.get(i).getGrade() * workRateMean.get(i).getGrade(); - grading[i] = new Grading(totalPerformance.get(i).getStudentIdentifier(), grade); - } - - return Arrays.asList(grading); - } - - private List<Grading> meanOfQuizzes(ArrayList<Performance> totalPerformance){ - double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; - - for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = 0; j < totalPerformance.get(i).getQuizAnswer().length; j++) { - allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j]; - } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length; - } - for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; - } - return Arrays.asList(grading); - } - - private List<Grading> meanOfWorkRate(ArrayList<Performance> totalPerformance){ - double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; - - for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = 0; j < totalPerformance.get(i).getWorkRating().length; j++) { - allAssessments[i] += 6-totalPerformance.get(i).getWorkRating()[j]; - } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getWorkRating().length; - } - for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; - } - return Arrays.asList(grading); - } - - @Override - public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { - return null; - } - - @Override - public int meanOfAssessment(String ProjectId) { - return 0; - } - - - - @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { - - } - - @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { - - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java index 61f53cc8c15ee050db92d20c9b37be376684ac6a..78291cecd72583f82ec78bc02859cbf36ec4a01b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java @@ -6,9 +6,7 @@ import unipotsdam.gf.interfaces.IPeerAssessment; import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; public class PeerAssessmentDummy implements IPeerAssessment { @Override @@ -17,8 +15,8 @@ public class PeerAssessmentDummy implements IPeerAssessment { @Override public Quiz getQuiz(String projectId, String quizId, String author) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); Quiz sampleQuiz; if (quizId.equals("2")) { correctAnswers.add("42"); @@ -41,9 +39,9 @@ public class PeerAssessmentDummy implements IPeerAssessment { } public ArrayList<Quiz> getQuiz(String projectId) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - ArrayList<Quiz> sampleQuiz = new ArrayList<Quiz>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); + ArrayList<Quiz> sampleQuiz = new ArrayList<>(); correctAnswers.add("42"); correctAnswers.add("" + projectId + " 24"); incorrectAnswers.add("a god created creature"); @@ -63,12 +61,17 @@ public class PeerAssessmentDummy implements IPeerAssessment { } @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { + public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) { int breakpoint = 0; //todo: print an http-answer for the ajax-request to receive } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { + + } + + @Override + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { NotImplementedLogger.logAssignment(Assignee.AXEL, IPeerAssessment.class); } @@ -77,13 +80,24 @@ public class PeerAssessmentDummy implements IPeerAssessment { } + @Override + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { + return null; + } + @Override public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1}; - int[] workRating = {1, 5, 3, 4, 1, 5, 5}; - Performance performance = new Performance(student, quizAnswer, "what a nice guy", workRating); - Assessment assessment = new Assessment(student, performance); - return assessment; + List<Integer> quizAnswer = new ArrayList<>(); + quizAnswer.add(0); + quizAnswer.add(1); + quizAnswer.add(1); + quizAnswer.add(1); + quizAnswer.add(0); + quizAnswer.add(0); + Map workRating = new HashMap<>(); + Map contributionRating = new HashMap<>(); + Performance performance = new Performance(student, quizAnswer, contributionRating, workRating); + return new Assessment(student, performance); } @Override @@ -92,37 +106,53 @@ public class PeerAssessmentDummy implements IPeerAssessment { } @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { - double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; - - for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = totalPerformance.get(i).getQuizAnswer().length; j > 0; j--) { - allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j]; - } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length; - } - for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; - } - return Arrays.asList(grading); + public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) { + return null; } @Override public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { - StudentIdentifier[] students = new StudentIdentifier[2]; StudentIdentifier student1 = new StudentIdentifier("gemeinsamForschen", "Haralf"); StudentIdentifier student2 = new StudentIdentifier("gemeinsamForschen", "Regine"); - ArrayList<Performance> performances = new ArrayList<Performance>(); - int[] quiz = {1, 0, 1, 0, 0, 0, 1}; - int[] quiz2 = {0, 1, 0, 1, 1, 1, 0}; - int[] work = {5, 4, 3, 2, 1}; - int[] work2 = {1, 2, 3, 4, 5}; - Performance performance = new Performance(student1, quiz, "toller dude", work); - performances.add(performance); - performance = new Performance(student2, quiz2, "tolle dudine", work2); + ArrayList<Performance> performances = new ArrayList<>(); + List<Integer> quiz = new ArrayList<>(); + quiz.add(0); + quiz.add(1); + quiz.add(1); + quiz.add(1); + quiz.add(0); + quiz.add(0); + List<Integer> quiz2 = new ArrayList<>(); + quiz2.add(0); + quiz2.add(1); + quiz2.add(1); + quiz2.add(1); + quiz2.add(0); + quiz2.add(0); + Map<String, Double> work = new HashMap<>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map<String, Double> work2 = new HashMap<>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map<String, Double> contribution1 = new HashMap<>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map<String, Double> contribution2 = new HashMap<>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); + Performance performance = new Performance(student1, quiz, contribution1, work); performances.add(performance); + Performance performance2 = new Performance(student2, quiz2, contribution2, work2); + performances.add(performance2); return performances; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java.orig deleted file mode 100644 index be8e569d866af00d85f2cc45b582eb7baa0b8d99..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java.orig +++ /dev/null @@ -1,133 +0,0 @@ -package unipotsdam.gf.modules.assessment.controller.service; - -import unipotsdam.gf.assignments.Assignee; -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.interfaces.IPeerAssessment; -import unipotsdam.gf.modules.assessment.QuizAnswer; -import unipotsdam.gf.modules.assessment.controller.model.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class PeerAssessmentDummy implements IPeerAssessment { - @Override - public void addAssessmentDataToDB(Assessment assessment) { - } - - @Override - public Quiz getQuiz(String projectId, String quizId, String author) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - Quiz sampleQuiz; - if (quizId.equals("2")) { - correctAnswers.add("42"); - correctAnswers.add("" + projectId + " " + quizId); - - incorrectAnswers.add("a god created creature"); - incorrectAnswers.add( "a sum of my mistakes"); - sampleQuiz = new Quiz("multiple", "Who am I and if so, how many?", correctAnswers, incorrectAnswers); - } else { - correctAnswers.add("ja, nicht?!"); - correctAnswers.add("nee, oder doch?!"); - incorrectAnswers.add("Mephistopheles"); - incorrectAnswers.add("Der alte Hexenmeister!?"); - incorrectAnswers.add("Der Schimmelreiter"); - incorrectAnswers.add("alle beide"); - sampleQuiz = new Quiz("multiple", "Ist das nun des Pudels wahrer Kern?", correctAnswers, incorrectAnswers); - } - - return sampleQuiz; - } - - public ArrayList<Quiz> getQuiz(String projectId) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - ArrayList<Quiz> sampleQuiz = new ArrayList<Quiz>(); - correctAnswers.add("42"); - correctAnswers.add("" + projectId + " 24"); - incorrectAnswers.add("a god created creature"); - incorrectAnswers.add( "a sum of my mistakes"); - sampleQuiz.add(new Quiz("multiple", "Who am I and if so, how many?", correctAnswers, incorrectAnswers)); - correctAnswers.clear(); - incorrectAnswers.clear(); - correctAnswers.add("ja, nicht?!"); - correctAnswers.add("nee, oder doch?!"); - incorrectAnswers.add("Mephistopheles"); - incorrectAnswers.add("Der alte Hexenmeister!?"); - incorrectAnswers.add("Der Schimmelreiter"); - incorrectAnswers.add("alle beide"); - sampleQuiz.add(new Quiz("multiple", "Ist das nun des Pudels wahrer Kern?", correctAnswers, incorrectAnswers)); - - return sampleQuiz; -} - - @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) { - int breakpoint = 0; //todo: print an http-answer for the ajax-request to receive - } - - @Override -<<<<<<< HEAD - public void deleteQuiz(String quizId) { - -======= - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { - NotImplementedLogger.logAssignment(Assignee.AXEL, IPeerAssessment.class); ->>>>>>> origin/session_management - } - - @Override - public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1}; - int[] workRating = {1, 5, 3, 4, 1, 5, 5}; - Performance performance = new Performance(student, quizAnswer, "what a nice guy", workRating); - Assessment assessment = new Assessment(student, performance); - return assessment; - } - - @Override - public void createQuiz(StudentAndQuiz studentAndQuiz) { - NotImplementedLogger.logAssignment(Assignee.AXEL, PeerAssessmentDummy.class); - } - - @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { - double[] allAssessments = new double[totalPerformance.size()]; - Grading[] grading = new Grading[totalPerformance.size()]; - - for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = totalPerformance.get(i).getQuizAnswer().length; j > 0; j--) { - allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j]; - } - allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length; - } - for (int i = 0; i < totalPerformance.size(); i++) { - Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); - grading[i] = shuttle; - } - return Arrays.asList(grading); - } - - @Override - public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { - StudentIdentifier[] students = new StudentIdentifier[2]; - StudentIdentifier student1 = new StudentIdentifier("gemeinsamForschen", "Haralf"); - StudentIdentifier student2 = new StudentIdentifier("gemeinsamForschen", "Regine"); - ArrayList<Performance> performances = new ArrayList<Performance>(); - int[] quiz = {1, 0, 1, 0, 0, 0, 1}; - int[] quiz2 = {0, 1, 0, 1, 1, 1, 0}; - int[] work = {5, 4, 3, 2, 1}; - int[] work2 = {1, 2, 3, 4, 5}; - Performance performance = new Performance(student1, quiz, "toller dude", work); - performances.add(performance); - performance = new Performance(student2, quiz2, "tolle dudine", work2); - performances.add(performance); - return performances; - } - - @Override - public int meanOfAssessment(String ProjectId) { - return 0; - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java index 49867e1df50e81195f5065e1f994e3cf4640203a..1bec0a0672821a6f22d342f5dd1390d7340066ac 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java @@ -13,7 +13,7 @@ import java.util.ArrayList; @Resource @Singleton public class QuizDBCommunication { - public Quiz getQuizByProjectQuizId(String projectId, String quizId, String author){ + Quiz getQuizByProjectQuizId(String projectId, String quizId, String author){ MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=? AND `author`=?"; @@ -21,8 +21,8 @@ public class QuizDBCommunication { connect.issueSelectStatement(mysqlRequest, projectId,quizId,author); boolean next = vereinfachtesResultSet.next(); String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); String answer; Boolean correct; String mcType = ""; @@ -43,22 +43,22 @@ public class QuizDBCommunication { return quiz; } - public ArrayList<Quiz> getQuizByProjectId(String projectId) { + ArrayList<Quiz> getQuizByProjectId(String projectId) { MysqlConnect connect = new MysqlConnect(); - ArrayList<Quiz> result= new ArrayList<Quiz>(); + ArrayList<Quiz> result= new ArrayList<>(); connect.connect(); String mysqlRequest = "SELECT * FROM quiz where projectId= ?"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, projectId); boolean next = vereinfachtesResultSet.next(); - String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + String question; + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); String answer; String oldQuestion=""; Boolean correct; String mcType = ""; - Quiz quiz =null; + Quiz quiz; while (next) { mcType = vereinfachtesResultSet.getString("mcType"); question = vereinfachtesResultSet.getString("question"); @@ -73,9 +73,8 @@ public class QuizDBCommunication { }else{ quiz = new Quiz(mcType,oldQuestion, correctAnswers, incorrectAnswers); result.add(quiz); - quiz=null; - correctAnswers=new ArrayList<String>(); - incorrectAnswers=new ArrayList<String>(); + correctAnswers=new ArrayList<>(); + incorrectAnswers=new ArrayList<>(); if (correct){ correctAnswers.add(answer); }else{ @@ -105,24 +104,21 @@ public class QuizDBCommunication { String mcType; String question; String answer; - boolean correct; ArrayList<String> correctAnswers = quiz.getCorrectAnswers(); - for (int i=0; i<correctAnswers.size(); i++) { - answer = correctAnswers.get(i); + for (String correctAnswer : correctAnswers) { + answer = correctAnswer; mcType = quiz.getType(); question = quiz.getQuestion(); - correct = true; String mysqlRequest = "INSERT INTO `quiz`(`author`, `projectId`, `question`, `mcType`, `answer`, `correct`) VALUES (?,?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, correct); + connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, true); } ArrayList<String> incorrectAnswers = quiz.getIncorrectAnswers(); - for (int i=0; i<incorrectAnswers.size(); i++) { - answer = incorrectAnswers.get(i); + for (String incorrectAnswer : incorrectAnswers) { + answer = incorrectAnswer; mcType = quiz.getType(); question = quiz.getQuestion(); - correct = false; String mysqlRequest = "INSERT INTO `quiz`(`author`, `projectId`, `question`, `mcType`, `answer`, `correct`) VALUES (?,?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, correct); + connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, false); } connect.close(); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java index e5d30daa824a778fcd03807afd55db8d000de145..e41b15a6dda0f0a60aa833c0682112d82e3edc4a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java @@ -4,27 +4,29 @@ import unipotsdam.gf.interfaces.IPeerAssessment; import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; -import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Path("/assessments") -public class QuizView implements IPeerAssessment { +public class QuizView { //private static IPeerAssessment peer = new PeerAssessmentDummy(); //TestSubject - private static IPeerAssessment peer = new PeerAssessment(); //correct DB-conn and stuff + private static IPeerAssessment peer = new PeerAssessment(); //correct DB-conn and stuff + @GET @Produces(MediaType.APPLICATION_JSON) @Path("/project/{projectId}/quiz/{quizId}/author/{author}") - @Override public Quiz getQuiz(@PathParam("projectId") String projectId, @PathParam("quizId") String quizId, @PathParam("author") String author) { - try{ - String question=java.net.URLDecoder.decode(quizId,"UTF-8"); + try { + String question = java.net.URLDecoder.decode(quizId, "UTF-8"); return peer.getQuiz(projectId, question, author); - }catch(UnsupportedEncodingException e){ + } catch (UnsupportedEncodingException e) { throw new AssertionError("UTF-8 is unknown"); } } ///////////////////////////////funktioniert////////////////////////////////// @@ -32,7 +34,6 @@ public class QuizView implements IPeerAssessment { @GET @Produces(MediaType.APPLICATION_JSON) @Path("/project/{projectId}/quiz") - @Override public ArrayList<Quiz> getQuiz(@PathParam("projectId") String projectId) { return peer.getQuiz(projectId); } @@ -40,50 +41,58 @@ public class QuizView implements IPeerAssessment { @POST @Consumes(MediaType.APPLICATION_JSON) - @Path("/peer/project/{projectId}/group/{groupId}") - @Override - public void postPeerRating(ArrayList<PeerRating> peerRatings,@PathParam("projectId") String projectId, @PathParam("groupId") String groupId){ - peer.postPeerRating(peerRatings, projectId,groupId); - //todo: checkout the POST-variable. should be peerRating but its null atm. + @Path("/peerRating/project/{projectId}") + public void postPeerRating(ArrayList<PeerRating> peerRatings, @PathParam("projectId") String projectId) throws IOException { + peer.postPeerRating(peerRatings, projectId); } - @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/contributionRating/projectId/{projectId}/studentId/{studentId}/fromPeer/{fromPeer}") + public void postContributionRating(Map<String, Integer> contributionRatings, + @PathParam("projectId") String projectId, + @PathParam("studentId") String studentId, + @PathParam("fromPeer") String fromPeer) throws IOException { + StudentIdentifier student = new StudentIdentifier(projectId, studentId); + peer.postContributionRating(student, fromPeer, contributionRatings); + } + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/quizAnswer/projectId/{projectId}/studentId/{studentId}/") + public void answerQuiz(Map<String, List<String>> questions, @PathParam("projectId") String projectId, @PathParam("studentId") String studentId) { + StudentIdentifier student = new StudentIdentifier(projectId, studentId); + peer.answerQuiz(questions, student); } @POST @Consumes(MediaType.APPLICATION_JSON) @Path("/quiz/{quizId}") - @Override public void deleteQuiz(@PathParam("quizId") String quizId) { try { String question = java.net.URLDecoder.decode(quizId, "UTF-8"); peer.deleteQuiz(question); - }catch(UnsupportedEncodingException e){ + } catch (UnsupportedEncodingException e) { throw new AssertionError("UTF-8 is unknown"); } } - ////////////////////////////funktioniert//////////////////////////////////////////////////////// @POST @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.APPLICATION_JSON) @Path("/assessment") - @Override public void addAssessmentDataToDB(Assessment assessment) { peer.addAssessmentDataToDB(assessment); } - @Override - public Assessment getAssessmentDataFromDB(StudentIdentifier student){ + private Assessment getAssessmentDataFromDB(StudentIdentifier student) { return peer.getAssessmentDataFromDB(student); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("/get/project/{projectId}/student/{studentId}") - public Assessment getAssessmentDataFromDB(@PathParam("projectId") String projectId,@PathParam("studentId") String studentId){ + public Assessment getAssessmentDataFromDB(@PathParam("projectId") String projectId, @PathParam("studentId") String studentId) { StudentIdentifier student = new StudentIdentifier(projectId, studentId); return getAssessmentDataFromDB(student); } //////////dummy//////////////funktioniert wie geplant////////////////////////////////// @@ -93,7 +102,6 @@ public class QuizView implements IPeerAssessment { @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path("/quiz") - @Override public void createQuiz(StudentAndQuiz studentAndQuiz) { peer.createQuiz(studentAndQuiz); } @@ -103,30 +111,35 @@ public class QuizView implements IPeerAssessment { @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path("/calculate") - @Override - public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) { return peer.calculateAssessment(totalPerformance); } - ///////////////dummy/////////funktioniert glaube ich!?//////////////////////////////////////// + ////////////////////////funktioniert primitiv/////////todo: nicht als jersey zu nutzen/////////////////////////////// + + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/calculate/projectId/{projectId}/cheatChecker/{method}") + public Map<StudentIdentifier, Double> calculateAssessment(@PathParam("projectId") String projectId, @PathParam("method") String method) { + return peer.calculateAssessment(projectId, method); + } + @GET @Produces(MediaType.APPLICATION_JSON) @Path("/mean/project/{projectId}") - @Override public int meanOfAssessment(@PathParam("projectId") String ProjectId) { - return peer.meanOfAssessment(ProjectId); } ///////////////////////////////return 0////////////////////////////////// @GET @Produces(MediaType.APPLICATION_JSON) @Path("/total/project/{projectId}/student/{student}") - public ArrayList<Performance> getTotalAssessment(@PathParam("projectId") String ProjectId,@PathParam("student") String student){ + public ArrayList<Performance> getTotalAssessment(@PathParam("projectId") String ProjectId, @PathParam("student") String student) { StudentIdentifier studentIdentifier = new StudentIdentifier(ProjectId, student); return getTotalAssessment(studentIdentifier); } //////////dummy/////////////funktioniert wie geplant////////////////////////////////// - @Override public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { return peer.getTotalAssessment(studentIdentifier); } /////////dummy/////////////funktioniert wie geplant////////////////////////////////// @@ -136,11 +149,46 @@ public class QuizView implements IPeerAssessment { @Produces(MediaType.APPLICATION_JSON) @Path("/dummy/totalperformance") public List<Performance> getTotalAssessment() { - ArrayList<Performance> result = new ArrayList<>(); - StudentIdentifier student = new StudentIdentifier("projekt","student"); - int[] quiz = {1,0,1,1,1,0}; - Performance pf = new Performance(student,quiz,"toller dude",quiz); - Performance pf2 = new Performance(student,quiz,"super",quiz); + List<Performance> result = new ArrayList<>(); + StudentIdentifier student = new StudentIdentifier("projekt", "student"); + List<Integer> quiz = new ArrayList<>(); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + Map<String, Double> work = new HashMap<>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map<String, Double> work2 = new HashMap<>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map<String, Double> contribution1 = new HashMap<>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map<String, Double> contribution2 = new HashMap<>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); + Performance pf = new Performance(); + pf.setContributionRating(contribution1); + pf.setQuizAnswer(quiz); + pf.setStudentIdentifier(student); + pf.setWorkRating(work); + Performance pf2 = new Performance(); + pf2.setContributionRating(contribution2); + pf2.setQuizAnswer(quiz); + pf2.setStudentIdentifier(student); + pf2.setWorkRating(work2); result.add(pf); result.add(pf2); return result; diff --git a/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js b/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js new file mode 100644 index 0000000000000000000000000000000000000000..2eedd8af5d6c4a7690ae11b782dcfe0fecb8c017 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js @@ -0,0 +1,87 @@ +$(document).ready(function () { + $('#newQuiz').on('click', function(){ + location.href="createQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); + }); + + let loading = $('#loadbar').hide(); + $(document) + .ajaxStart(function () { + loading.show(); + }).ajaxStop(function () { + loading.hide(); + }); + + $("label.btn").on('click',function () { + let choice = $(this).find('input:radio').val(); + $('#loadbar').show(); + $('#quiz').fadeOut(); + setTimeout(function(){ + $( "#answer" ).html( $(this).checking(choice) ); + $('#quiz').show(); + $('#loadbar').fadeOut(); + /* something else */ + }, 1500); + }); + + $ans = 3; + + let projectId = document.getElementById('projectId').innerText.trim(); + $.ajax({ + url: '../rest/assessments/project/'+projectId+'/quiz/', + type: 'GET', + success: function (data) { + let table = document.getElementById('tableQuiz'); + for (let quiz = 0; quiz < data.length; quiz++){ + let question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",",""); + let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); + let colspan = answers.length; + let trQuestion = document.createElement('TR'); + let tdQuestion = '<td colspan="' + colspan + '"' + + ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + + '' + data[quiz].question + '</td>'; + trQuestion.innerHTML = tdQuestion; + let trAnswers = document.createElement('TR'); + let answersTd='<td style="display: block;">' + + '<div ' + + 'class="quiz collapse" ' + + 'id="'+question+'" ' + + 'data-toggle="buttons">' + + '<p hidden>'+data[quiz].question+'</p>'; + for (let i = 0; i < answers.length; i++) { + answersTd = answersTd + '<div>' + + '<label class="element-animation1 btn btn-lg btn-primary btn-block">' + + '<span class="btn-label">' + + '<i class="glyphicon glyphicon-chevron-right">' + + '</i>' + + '</span>' + + '<input type="checkbox" value="'+answers[i]+'">' + answers[i] + '' + + '</label>' + + '</div>'; + } + tdQuestion =""; + answers=[]; + let deletebutton = '<button class="btn btn-danger" id="delete'+question+'">löschen</button>'; + trAnswers.innerHTML = answersTd+deletebutton+'</div></td>'; + table.appendChild(trQuestion); + table.appendChild(trAnswers); + $("#delete"+question).click({quizId: data[quiz].question}, deleteQuiz); + } + }, + error: function (a) { + alert('Fehler ' + a); + } + }); + + function deleteQuiz(event){ + $.ajax({ + url: '../rest/assessments/quiz/' + encodeURIComponent(event.data.quizId), + type: 'POST', + success: function () { + document.location.href="Quiz-docent.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); + }, + error: function(a){ + alert(a) + } + }); + } +}); diff --git a/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js b/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js index cc9a73e5ddf695081e45c3dd1261410b9d590fc2..fcb6ea709458eddd262301776d4e3fde08ae4a84 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js @@ -1,15 +1,15 @@ $(document).ready(function(){ - var projectId = document.getElementById('projectId').innerText.trim(); + let projectId = document.getElementById('projectId').innerText.trim(); $.ajax({ url: '../rest/assessments/project/'+projectId+'/quiz/', projectId: projectId, type: 'GET', success: function (data) { - var table = document.getElementById('myQuizzes'); - for (var quiz = 0; quiz < data.length; quiz++){ - var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); - var colspan = answers.length; - var trQuestion = document.createElement('TR'); + let table = document.getElementById('myQuizzes'); + for (let quiz = 0; quiz < data.length; quiz++){ + let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); + let colspan = answers.length; + let trQuestion = document.createElement('TR'); trQuestion.className="pageChanger"; trQuestion.innerHTML = '<td colspan="' + colspan + '"><h3>' + '<a href="viewQuiz.jsp' + @@ -20,7 +20,7 @@ $(document).ready(function(){ table.appendChild(trQuestion); } }, - error: function (a, b, c) { + error: function (a) { alert('Fehler ' + a); } }); diff --git a/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js index 743de6b60c639819d73547e300b8d46bd6b3b564..7e1ecd5f3739c8745360530f2ef5ab5e60823c0a 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js @@ -18,7 +18,7 @@ $(document).ready(function () { //todo: paths should be relative { "studentIdentifier": { "projectId": "projekt", - "studentId": "Keiler" + "studentId": "student" }, "quizAnswer": [ 1, @@ -28,38 +28,36 @@ $(document).ready(function () { //todo: paths should be relative 1, 0 ], - "feedback": "toller dude", - "workRating": [ - 5, - 4, - 3, - 2, - 1, - 0 - ] + "feedback": "ein toller typ", + "workRating": { + "responsibility": 1, + "partOfWork": 1, + "autonomous": 1, + "communication": 1, + "cooperation": 1 + } }, { "studentIdentifier": { "projectId": "projekt", - "studentId": "Glucke" + "studentId": "student" }, "quizAnswer": [ 1, - 1, + 0, 1, 1, 1, 0 ], - "feedback": "super", - "workRating": [ - 1, - 1, - 1, - 2, - 3, - 2 - ] + "feedback": "feini feini", + "workRating": { + "responsibility": 3, + "partOfWork": 4, + "autonomous": 4, + "communication": 3, + "cooperation": 5 + } } ]; diff --git a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js index 6af08b9e84c647d9fcf13f9d0bb4e988158a6346..a56e8a766a20f895dd8674056e796e5613bbc5b0 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js @@ -9,37 +9,39 @@ $(document).ready(function() { }); function assessPeer(){ + let peerStudents =$('.peerStudent'); ///////initialize variables/////// - var peerRating = { - "fromPeer": $('#user').html().trim(), - "toPeer": "", - "workRating": [] - }; - var dataP = []; - var workRating = []; - var rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous']; + let dataP = new Array(peerStudents.size()); + let rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous']; ///////read values from html/////// - var peerStudents =$('.peerStudent'); - for (var peer=0; peer< peerStudents.length; peer++){ - for (var rate=0; rate<rateThis.length; rate++ ){ - workRating.push($('input[name='+rateThis[rate]+peerStudents[peer].id+']:checked').val()); + for (let peer=0; peer< peerStudents.length; peer++){ + let workRating = {}; + let peerRating = { + "fromPeer": $('#user').html().trim(), + "toPeer": peerStudents[peer].id, + "workRating": {} + }; + for (let rate=0; rate<rateThis.length; rate++ ){ + let category = rateThis[rate]; + workRating[category]=($('input[name='+rateThis[rate]+peerStudents[peer].id+']:checked').val()); } - for (var i=0; i<workRating.length; i++){ - if(workRating[i]===undefined){ + + peerRating.workRating = workRating; + //////write values in Post-Variable + dataP[peer]=peerRating; + } + for (let peer=0; peer< dataP.length; peer++){ + for (let workRating=0; workRating<rateThis.length;workRating++){ + if(dataP[peer].workRating[rateThis[workRating]]===undefined){ $('#notAllRated').show(); return; } } - peerRating.toPeer = peerStudents[peer].id; - peerRating.workRating = workRating; - workRating=[]; - //////write values in Post-Variable - dataP.push(peerRating); } - dataP.push(peerRating); + let projectId=$('#projectId').html().trim(); $.ajax({ - url:'../rest/assessments/peer/project/1/group/1', + url:'../rest/assessments/peerRating/project/'+projectId, type: 'POST', headers: { "Content-Type": "application/json", diff --git a/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js index 0bd803d816901c10c4bb47c9ecc6ecf281f7d543..77cd2693f2740cc2cb0a36e504271eecae90310e 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js @@ -1,9 +1,9 @@ $(document).ready(function(){ $('#project1Link').on('click', function(){ - location.href="project-docent.jsp?token="+getUserTokenFromUrl(); + location.href="project-docent.jsp?token="+getUserTokenFromUrl()+'&projectId='+'gemeinsamForschen'; }); $('#project2Link').on('click', function(){ - location.href="project-docent.jsp?token="+getUserTokenFromUrl(); + location.href="project-docent.jsp?token="+getUserTokenFromUrl()+'&projectId='+'Kaleo'; }); $('#createProject').on('click', function(){ location.href="createProject.jsp?token="+getUserTokenFromUrl(); diff --git a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js index 8d6c7c7b53d0fd8323dd23e2abea8d79c298954c..b7e3c6b5fcaafd34e8c7c7066027d6d1a7d6069c 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js @@ -1,17 +1,17 @@ $(document).ready(function () { - var ejournalFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("ejournalFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], minHeight: "80px", }); - var presentationFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("presentationFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], minHeight: "80px", }); - var dossierFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("dossierFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], @@ -19,10 +19,41 @@ $(document).ready(function () { }); - editor.style = "min-height: 100px"; + //editor.style = "min-height: 100px"; - $('#submit').on('click',function(){ - document.location="project-student.jsp?token="+getUserTokenFromUrl(); + $('#submit').on('click', function () { + safeContributionRating(); }); -}); \ No newline at end of file +}); + +function safeContributionRating() { + let contributions = $('.contributionRating'); + ///////initialize variables/////// + let dataP = {}; + + ///////read values from html/////// + for (let contribution = 0; contribution < contributions.length; contribution++) { + let checkbox = $("#" + contributions[contribution].id + " input:checked"); + dataP[checkbox.attr('name')] = checkbox.val(); + } + let projectId = $('#projectId').html().trim(); + let fromPeer = $('#user').html().trim(); + let toStudent = $('.peerStudent').attr('id'); + $.ajax({ + url: '../rest/assessments/contributionRating/projectId/' + projectId + + '/studentId/' + toStudent + '/fromPeer/' + fromPeer, + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function () { + location.href = "project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + $('#projectId').html().trim(); + }, + error: function (a, b, c) { + + } + }); +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js index 1a8afcfa36d89450466a323728f57dc7f0ffb973..7c293a1a125ccc891df523fd6a1ea415968a28c4 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js @@ -1,5 +1,5 @@ $(document).ready(function () { - var loading = $('#loadbar').hide(); + let loading = $('#loadbar').hide(); $(document) .ajaxStart(function () { loading.show(); @@ -8,7 +8,7 @@ $(document).ready(function () { }); $("label.btn").on('click',function () { - var choice = $(this).find('input:radio').val(); + let choice = $(this).find('input:radio').val(); $('#loadbar').show(); $('#quiz').fadeOut(); setTimeout(function(){ @@ -21,39 +21,37 @@ $(document).ready(function () { $ans = 3; - $.fn.checking = function(ck) { - if (ck != $ans) - return 'INCORRECT'; - else - return 'CORRECT'; - }; - - var projectId = document.getElementById('projectId').innerText.trim(); + let projectId = document.getElementById('projectId').innerText.trim(); $.ajax({ url: '../rest/assessments/project/'+projectId+'/quiz/', type: 'GET', success: function (data) { - var table = document.getElementById('tableQuiz'); - for (var quiz = 0; quiz < data.length; quiz++){ - var question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",",""); - var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); - var colspan = answers.length; - var trQuestion = document.createElement('TR'); - var tdQuestion = '<td colspan="' + colspan + '"' + - 'data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + + let table = document.getElementById('tableQuiz'); + for (let quiz = 0; quiz < data.length; quiz++){ + let question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",",""); + let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); + let colspan = answers.length; + let trQuestion = document.createElement('TR'); + let tdQuestion = '<td colspan="' + colspan + '"' + + ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + '' + data[quiz].question + '</td>'; trQuestion.innerHTML = tdQuestion; - var trAnswers = document.createElement('TR'); + let trAnswers = document.createElement('TR'); answers = shuffle(answers); - var answersTd='<td style="display: block;"><div class="quiz collapse" id="'+question+'" data-toggle="buttons">'; - for (var i = 0; i < answers.length; i++) { + let answersTd='<td style="display: block;">' + + '<div ' + + 'class="quiz collapse" ' + + 'id="'+question+'" ' + + 'data-toggle="buttons">' + + '<p hidden>'+data[quiz].question+'</p>'; + for (let i = 0; i < answers.length; i++) { answersTd = answersTd + '<div>' + '<label class="element-animation1 btn btn-lg btn-primary btn-block">' + '<span class="btn-label">' + '<i class="glyphicon glyphicon-chevron-right">' + '</i>' + '</span>' + - '<input type="checkbox">' + answers[i] + '' + + '<input type="checkbox" value="'+answers[i]+'">' + answers[i] + '' + '</label>' + '</div>'; } @@ -64,17 +62,17 @@ $(document).ready(function () { table.appendChild(trAnswers); } }, - error: function (a, b, c) { + error: function (a) { alert('Fehler ' + a); } }); $("#submitQuiz").on("click", function () { - document.location="rateContribution.jsp?token="+getUserTokenFromUrl()+'&projectId='+$('#projectId').html().trim(); + safeQuizAnswers(); }); }); function shuffle(a) { - var j, x, i; + let j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; @@ -82,4 +80,40 @@ function shuffle(a) { a[j] = x; } return a; +} + +function safeQuizAnswers(){ + let quizzes = $('.quiz'); + ///////initialize variables/////// + let dataP = {}; + + ///////read values from html/////// + for (let quiz=0; quiz<quizzes.length; quiz++){ + let answerList = []; + if (quizzes[quiz].id !== ""){ + let checkedBoxes = $("#"+quizzes[quiz].id+" input:checked"); + checkedBoxes.each(function(){ + answerList.push($(this).val()); + }); + let question = $("#"+quizzes[quiz].id+" p").html().trim(); + dataP[question]= answerList; + } + } + let projectId=$('#projectId').html().trim(); + let studentId=$('#user').html().trim(); + $.ajax({ + url:'../rest/assessments/quizAnswer/projectId/'+projectId+'/studentId/'+studentId, + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function(){ + location.href="rateContribution.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); + }, + error: function(a,b,c){ + + } + }); } \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp new file mode 100644 index 0000000000000000000000000000000000000000..64db788d2e1fb91279b7fa9f339d33d0b232c26e --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp @@ -0,0 +1,28 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> + +<html> +<head> + <omniDependencies:omniDependencies/> + <script src="../assets/js/Quiz-docent.js"></script> +</head> + +<body> +<div id="wrapper"> + <menu:menu/> + <div class="page-content-wrapper"> + <headLine:headLine/> + <table class="table-striped"> + <tbody id="tableQuiz"> + + </tbody> + </table> + <button class="btn btn-primary" id="newQuiz">neues Quiz</button> + + </div> +</div> + +</body> +</html> diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig deleted file mode 100644 index 621176b5de895049ff300d1782269135a296493e..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig +++ /dev/null @@ -1,91 +0,0 @@ -<!DOCTYPE html> -<html> - -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>fltrail</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> -</head> - -<body> -<h1>Übersicht für Dozent1</h1> -<a href="#"><span class="glyphicon glyphicon-envelope" - style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a> -<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a> -<div> - <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> - <tr style="cursor:pointer" role="button"> - <td> -<<<<<<< HEAD - <a id="project1Link"> -======= - <a href="project-docent.jsp"> ->>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd - <h1>dummy Projekt1</h1> - </a> - </td> - </tr> - <tr> - <td> - <div style="width:100px;"></div> - <div style="width:741px;"> - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title">Newsfeed </h3> - </div> - <div class="panel-body"> - <ul class="list-group"> - <li class="list-group-item"> - <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> - </li> - <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> - <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> - </ul> - </div> - </div> - </div> - </td> - </tr> - <tr> - <td></td> - </tr> - <tr style="cursor:pointer" role="button"> - <td> - <a href="project-docent.jsp"> - <h1>dummy Projekt2</h1> - </a> - </td> - </tr> - <tr> - <td> - <div style="width:100px;"></div> - <div style="width:741px;"> - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title">Newsfeed </h3> - </div> - <div class="panel-body"> - <ul class="list-group"> - <li class="list-group-item"> - <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> - </li> - <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> - <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> - </ul> - </div> - </div> - </div> - </td> - </tr> - </table> -</div> -<button class="btn btn-default" type="button" style="margin-left:250px;">Projekt erstellen</button> -<script src="../assets/js/jquery.min.js"></script> -<script src="../assets/bootstrap/js/bootstrap.min.js"></script> -</body> - -</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp index 66419d3734d4082bce9a7053868133e011c76ed7..736db5bd3aa5a1ca53a86b1694994e78ef880631 100644 --- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp @@ -1,4 +1,4 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> @@ -85,8 +85,6 @@ </div> <button class="btn btn-default" type="button" id="createProject" style="margin-left:250px;">Projekt erstellen</button> </div> -</div> - </body> </html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig deleted file mode 100644 index db7445c800029d1c311a2a61f6528428a110ae85..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig +++ /dev/null @@ -1,94 +0,0 @@ -<!DOCTYPE html> -<html> - -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>fltrail</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> - <script src="../assets/js/utility.js"></script> - <script src="../assets/js/overview-student.js"></script> - -</head> - -<body> -<h1>Übersicht für Student1</h1> -<a href="#"><span class="glyphicon glyphicon-envelope" - style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a> -<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a> -<div> - <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> - <tr style="cursor:pointer" role="button"> - <td> -<<<<<<< HEAD - <a id="project1Link"> -======= - <a href="project-docent.jsp"> ->>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd - <h1>dummy Projekt1</h1> - </a> - </td> - </tr> - <tr> - <td> - <div style="width:100px;"></div> - <div style="width:741px;"> - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title">Newsfeed </h3> - </div> - <div class="panel-body"> - <ul class="list-group"> - <li class="list-group-item"> - <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> - </li> - <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> - <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> - </ul> - </div> - </div> - </div> - </td> - </tr> - <tr> - <td></td> - </tr> - <tr style="cursor:pointer" role="button"> - <td> - <a href="project-docent.jsp"> - <h1>dummy Projekt2</h1> - </a> - </td> - </tr> - <tr> - <td> - <div style="width:100px;"></div> - <div style="width:741px;"> - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title">Newsfeed </h3> - </div> - <div class="panel-body"> - <ul class="list-group"> - <li class="list-group-item"> - <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> - </li> - <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> - <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> - </ul> - </div> - </div> - </div> - </td> - </tr> - </table> -</div> - </div><button class="btn btn-default" type="button" style="margin-left:250px;">Projekt beitreten</button> - <script src="../assets/js/jquery.min.js"></script> - <script src="../assets/bootstrap/js/bootstrap.min.js"></script> -</body> - -</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp index 1ec616d09fc96d633e7e712d19b6b5595950d3c4..9dbf5687f892d59a4d44927e6bce2832aed4d305 100644 --- a/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp @@ -1,5 +1,5 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix = "communication" uri = "/communication/chatWindow.tld"%> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%@ taglib prefix="communication" uri="/communication/chatWindow.tld" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> @@ -16,11 +16,11 @@ <div id="wrapper"> <menu:menu/> <div class="page-content-wrapper"> - <div class="container-fluid"> - <h1>dummy Projekt1 für Dozent1</h1><button class="btn btn-default" type="button">Gruppen erstellen</button><button class="btn btn-default" type="button">Projekt finalisieren</button><button class="btn btn-default" type="button">Exportiere Projektergebnisse</button> - </div> - <button - class="btn btn-default" type="button">Exportiere Zwischenstand</button><button class="btn btn-default" type="button">Quizfrage erstellen</button> + <headLine:headLine/> + <button + class="btn btn-default" type="button">Exportiere Zwischenstand + </button> + <button class="btn btn-default" type="button">Quizfrage erstellen</button> <div> <div class="container"> <div class="row"> @@ -28,60 +28,60 @@ <div class="table-responsive" style="width:294px;"> <table class="table"> <thead> - <tr> - <th>Gruppe1 </th> - <th>Beiträge </th> - </tr> + <tr> + <th>Gruppe1</th> + <th>Beiträge</th> + </tr> </thead> <tbody> - <tr> - <td>student1 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student2 </td> - <td>Design </td> - </tr> + <tr> + <td>student1</td> + <td>Interfaces</td> + </tr> + <tr> + <td>student2</td> + <td>Design</td> + </tr> </tbody> </table> </div> <div class="table-responsive" style="width:294px;"> <table class="table"> <thead> - <tr> - <th>Gruppe2 </th> - <th>Beiträge </th> - </tr> + <tr> + <th>Gruppe2</th> + <th>Beiträge</th> + </tr> </thead> <tbody> - <tr> - <td>student3 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student4 </td> - <td>Design </td> - </tr> + <tr> + <td>student3</td> + <td>Interfaces</td> + </tr> + <tr> + <td>student4</td> + <td>Design</td> + </tr> </tbody> </table> </div> <div class="table-responsive" style="width:294px;"> <table class="table"> <thead> - <tr> - <th>Gruppe3 </th> - <th>Beiträge </th> - </tr> + <tr> + <th>Gruppe3</th> + <th>Beiträge</th> + </tr> </thead> <tbody> - <tr> - <td>student5 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student6 </td> - <td>Design </td> - </tr> + <tr> + <td>student5</td> + <td>Interfaces</td> + </tr> + <tr> + <td>student6</td> + <td>Design</td> + </tr> </tbody> </table> </div> @@ -98,12 +98,18 @@ <div class="media-left"><a></a></div> <div class="media-body"> <div class="media" style="overflow:visible;"> - <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div> + <div class="media-left"><a><img src="../assets/img/1.jpg" + class="img-rounded" + style="width: 25px; height:25px;"></a> + </div> <div class="media-body" style="overflow:visible;"> <div class="row"> <div class="col-md-12"> - <p><a href="#">Sara Doe:</a> This guy has been going 100+ MPH on side streets. <br> -<small class="text-muted">August 6, 2016 @ 10:35am </small></p> + <p><a href="#">Sara Doe:</a> This guy has been going + 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> </div> </div> </div> @@ -116,12 +122,18 @@ <div class="media-left"><a></a></div> <div class="media-body"> <div class="media" style="overflow:visible;"> - <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div> + <div class="media-left"><a><img src="../assets/img/1.jpg" + class="img-rounded" + style="width: 25px; height:25px;"></a> + </div> <div class="media-body" style="overflow:visible;"> <div class="row"> <div class="col-md-12"> - <p><a href="#">Brennan Prill:</a> This guy has been going 100+ MPH on side streets. <br> -<small class="text-muted">August 6, 2016 @ 10:35am </small></p> + <p><a href="#">Brennan Prill:</a> This guy has been + going 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> </div> </div> </div> @@ -129,7 +141,11 @@ </div> </div> </li> - </ul><button class="btn btn-default" type="button" style="margin-left:601px;margin-top:-9px;">Add Comment</button></div> + </ul> + <button class="btn btn-default" type="button" + style="margin-left:601px;margin-top:-9px;">Add Comment + </button> + </div> </div> </div> </div> @@ -137,7 +153,7 @@ </div> </div> </div> - <communication:chatWindow orientation="right"></communication:chatWindow> +<communication:chatWindow orientation="right" /> </body> </html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig deleted file mode 100644 index 79ff3d3adb039143a4b44e810eddd80c2d1906c6..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig +++ /dev/null @@ -1,221 +0,0 @@ -<<<<<<< HEAD -<%--suppress XmlDuplicatedId --%> -======= -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - ->>>>>>> PeerAssessmentAxel -<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> - -<!DOCTYPE html> -<html> - -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>muster-gemeinsam-forschen</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <link rel="stylesheet" href="../assets/css/footer.css"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> - <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> - <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> -<<<<<<< HEAD - <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous"> - <script src="../assets/js/utility.js"></script> - <script src="../assets/js/project-student.js"></script> -======= - <script src="../assets/js/jquery.min.js"></script> - <script src="../assets/js/footer.js"></script> - <script src="../assets/bootstrap/js/bootstrap.min.js"></script> - <script src="../assets/js/Sidebar-Menu.js"></script> ->>>>>>> PeerAssessmentAxel -</head> - -<body> -<div id="wrapper"> - <menu:menu></menu:menu> - - <div class="page-content-wrapper"> - <div class="container-fluid"> - <h1 id="projectId">Project 1</h1> - </div> - <div align="right" class="dropdown"> - <button style= "position: absolute; right: 50px;" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"> - - <i class="glyphicon glyphicon-envelope"></i> - </button> - - <ul class="dropdown-menu"> - <li><a class="viewfeedback" role="button">Feedback A</a></li> - <li><a class="viewfeedback" role="button">Feedback B</a></li> - <li><a class="viewfeedback" role="button">Feedback C</a></li> - </ul> - - <a href="#"> - <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-right:30px;margin-top:3px;"></span> - </a> - - </div> - <div> - <table> - <tr> - <td id="yourContent"> - <h1>Feedbackable Students</h1> - <!-- here will be all the content --> - <table> - <tr> - - <td width="100px" valign="top"> - <h3>student1</h3> - <img src="../assets/img/1.jpg"> - <a href="#">student1@uni.de</a> - <hr> - <ul> - - <li><a class="annotationview" role="button"> - Projektuebersicht hochgeladen - <i class="far fa-comments"></i> - </a> - </li> - <li><a class="annotationview" role="button"> - Blumen ins Hausaufgabenheft geklebt - <i class="far fa-comments"></i> - </a> - </li> - </a> - </ul> - </td> - <td></td> - - <td width="100px" valign="top"> - <h3>student2</h3> - <img src="../assets/img/2.jpg"> - <a href="#">student2@uni.de</a> - <hr> - <ul> - <li><a class="annotationview" role="button"> - Blumen an Vegetarier verfuettert - <i class="far fa-comments"></i> - </a></li> - <li><a class="annotationview" role="button"> - Literaturverzeichnis hochgeladen - <i class="far fa-comments"></i> - </a></li> - <li><a class="annotationview" role="button"> - Die armen Vegetarier - <i class="far fa-comments"></i> - </a></li> - </ul> - </td> - <td></td> - - <td width="100px" valign="top"> - <h3>student3</h3> - <img src="../assets/img/3.jpg"> - <a href="#">student3@uni.de</a> - <hr> - <ul> - <li><a class="annotationview" role="button"> - "Viva la Floristika" - Titel hochgeladen - <i class="far fa-comments"></i> - </a> - </li> - </ul> - </td> - - </tr> - </table> - - <button onclick="goBack()" class="btn btn-secondary">Zurueck</button> - - <script> - function goBack() { - window.history.back(); - } - </script> - - </td> - <td id="chat"> - <div class="card"> - <div class="card-header"> - <h6 class="mb-0">Gruppen+Projekt Chat</h6> - </div> - <div class="card-body"> - <ul class="list-group"> - <li class="list-group-item"> - <div class="media"> - <div></div> - <div class="media-body"> - <div class="media" style="overflow:visible;"> - <div><img src="../assets/img/1.jpg" class="mr-3" - style="width: 25px; height:25px;"></div> - <div class="media-body" style="overflow:visible;"> - <div class="row"> - <div class="col-md-12"> - <p><a href="#">Sara Doe:</a> This guy has been going - 100+ MPH on side streets. <br> - <small class="text-muted">August 6, 2016 @ 10:35am - </small> - </p> - </div> - </div> - </div> - </div> - </div> - </div> - </li> - <li class="list-group-item"> - <div class="media"> - <div></div> - <div class="media-body"> - <div class="media" style="overflow:visible;"> - <div><img src="../assets/img/2.jpg" class="mr-3" - style="width: 25px; height:25px;"></div> - <div class="media-body" style="overflow:visible;"> - <div class="row"> - <div class="col-md-12"> - <p><a href="#">Brennan Prill:</a> This guy has been - going 100+ MPH on side streets. <br> - <small class="text-muted">August 6, 2016 @ 10:35am - </small> - </p> - </div> - </div> - </div> - </div> - </div> - </div> - </li> - </ul> - <button class="btn btn-light"> - Add Comment - </button> - </div> - </div> - </td> - </tr> - </table> - </div> - </div> - <footer> - <div class="container"> - <div class="progress"> - <div class="progress-bar pg-enrollment" role="progressbar" id="progressbar"> - </div> - <div> - Assessment - Präsentationsphase - Dossier - Reflexionsphase - Feedbackphase - Gruppenbildung - Kursanmeldung - </div> - <div class="progress-bar pg-rest" role="progressbar"> - </div> - </div> - <button id="nextPhase" class="btn btn-light">nächste Phase</button> - </div> - </footer> -</div> - -</body> - -</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp index e6898e77c5a1a3b2ef51c8c25c0e691dc0804773..50431a5333efaf8cfbe617b8c561a1828a63aac2 100644 --- a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp @@ -33,44 +33,51 @@ </tr> <tr> <td> - Lernzieltagebuch: - Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück. - <textarea id="ejournalFeedback"> + <div class="contributionRating" id="eJournal"> + Lernzieltagebuch: + Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück. + <textarea id="ejournalFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="ejournalRating">Perfekt</label> - <label><input type="radio" name="ejournalRating">Makellos</label> - <label><input type="radio" name="ejournalRating">regulär</label> - <label><input type="radio" name="ejournalRating">Makelhaft</label> - <label><input type="radio" name="ejournalRating">Lädiert</label> + <label><input type="radio" name="eJournal" value="5">Perfekt</label> + <label><input type="radio" name="eJournal" value="4">Makellos</label> + <label><input type="radio" name="eJournal" value="3">regulär</label> + <label><input type="radio" name="eJournal" value="2">Makelhaft</label> + <label><input type="radio" name="eJournal" value="1">Lädiert</label> + </div> </td> </tr> <tr> <td> - Dossier: - Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich belehren zu - lassen. - <textarea id="dossierFeedback"> + <div class="contributionRating" id="Dossier"> + Dossier: + Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich + belehren zu + lassen. + <textarea id="dossierFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="dossierlRating">Perfekt</label> - <label><input type="radio" name="dossierRating">Makellos</label> - <label><input type="radio" name="dossierRating">regulär</label> - <label><input type="radio" name="dossierRating">Makelhaft</label> - <label><input type="radio" name="dossierRating">Lädiert</label> + <label><input type="radio" name="dossier" value="5">Perfekt</label> + <label><input type="radio" name="dossier" value="4">Makellos</label> + <label><input type="radio" name="dossier" value="3">regulär</label> + <label><input type="radio" name="dossier" value="2">Makelhaft</label> + <label><input type="radio" name="dossier" value="1">Lädiert</label> + </div> </td> </tr> <tr> <td> - Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a> - <textarea id="presentationFeedback"> + <div class="contributionRating" id="research"> + Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a> + <textarea id="presentationFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="presentationRating">Perfekt</label> - <label><input type="radio" name="presentationRating">Makellos</label> - <label><input type="radio" name="presentationRating">regulär</label> - <label><input type="radio" name="presentationRating">Makelhaft</label> - <label><input type="radio" name="presentationRating">Lädiert</label> + <label><input type="radio" name="research" value="5">Perfekt</label> + <label><input type="radio" name="research" value="4">Makellos</label> + <label><input type="radio" name="research" value="3">regulär</label> + <label><input type="radio" name="research" value="2">Makelhaft</label> + <label><input type="radio" name="research" value="1">Lädiert</label> + </div> </td> </tr> </table> diff --git a/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp index 4ea6f940f86c6e79ca065d8c95b166af70965480..0eb33c1eaf3afbddc608bf14f0ce7c50692e380d 100644 --- a/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp @@ -1,4 +1,4 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index 9fa4f5d937c07ea125ab90d2ce2e64a48dccca3e..0d5dfe1643c376e6ac1cdfa6f56451bbc9809633 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -210,4 +210,39 @@ ALTER TABLE `projectuser` ALTER TABLE `projectuser` ADD UNIQUE (`projectId`, `userId`); ALTER TABLE `projects` - ADD UNIQUE (`id`); \ No newline at end of file + ADD UNIQUE (`id`); + +CREATE TABLE if not exists answeredquiz ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `question` varchar(400) NOT NULL, + `correct` tinyint(4) NOT NULL + +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists workrating ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `fromPeer` varchar(400) NOT NULL, + `responsibility` int(11) NOT NULL, + `partOfWork` int(11) NOT NULL, + `cooperation` int(11) NOT NULL, + `communication` int(11) NOT NULL, + `autonomous` int(11) NOT NULL + +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists contributionrating ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `fromPeer` varchar(400) NOT NULL, + `dossier` int(11) NOT NULL, + `eJournal` int(11) NOT NULL, + `research` int(11) NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java index 65248217c3fa9ed816fe96ffe1e6ca88ebed0ddf..1bd1d7a2e0f059759079914b2ab766f590df6bef 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java @@ -171,10 +171,10 @@ public class ActivityFlowTest { // create quiz TODO@Axel this should be a quiz dependend on the student for easier initialization and // de-coupling - StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class); - QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class); - iPeerAssessment.createQuiz(studentAndQuiz); - iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer); + //StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class); + //QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class); + //iPeerAssessment.createQuiz(studentAndQuiz); + //iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer); // finales Portfolio zusammenstellen java.util.List<Journal> journalEntries = new ArrayList<Journal>(); diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java index 564d54cca5d699c5c93b3e56d64ee0e91bd8057a..9426d94804ed8b6f42600286e659fae1276d045a 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java @@ -24,9 +24,9 @@ public class TestAddAssessment { workRating[2] = 4; //Hilfsbereitschaft oder so StudentIdentifier student = new StudentIdentifier("Spaß", "Haralf"); - Performance performance = new Performance(student, quizAnswers,"so ein toller Typ", workRating); - Assessment assessment = new Assessment(student, performance); - iPeerAssessment.addAssessmentDataToDB(assessment); + //Performance performance = new Performance(student, quizAnswers,"so ein toller Typ", workRating); + //Assessment assessment = new Assessment(student, performance); + //iPeerAssessment.addAssessmentDataToDB(assessment); } } diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1252c6ae0db6e157e1808d3a697f212fda240bfc --- /dev/null +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java @@ -0,0 +1,224 @@ +package unipotsdam.gf.modules.peerassessment; + +import org.junit.Test; +import unipotsdam.gf.modules.assessment.controller.model.Performance; +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; + +import java.util.*; + +public class HashMapTest { + + private Map<String, Double> meanOfWorkRatings(ArrayList<Map<String, Double>> workRatings) { + HashMap<String, Double> mean = new HashMap(); + double size = (double) workRatings.size(); + Iterator it = workRatings.get(0).entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + mean.put((String) pair.getKey(), 0.0); + } + for (int i = 0; i < workRatings.size(); i++) { + it = workRatings.get(i).entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + mean.put((String) pair.getKey(), (Double) pair.getValue() / size + mean.get(pair.getKey())); + } + } + return mean; + } + + Comparator<Map<String, Double>> byMean = (o1, o2) -> { + Double sumOfO1 = 0.; + Double sumOfO2 = 0.; + for (String key : o1.keySet()) { + sumOfO1 += o1.get(key); + sumOfO2 += o2.get(key); + } + if (sumOfO1.equals(sumOfO2)) { + return 0; + } else { + return sumOfO1 < sumOfO2 ? -1 : 1; + } + }; + + //fixme: use the function from the class .... obviously + public ArrayList<Map<String, Double>> cheatChecker(ArrayList<Map<String, Double>> workRatings, String method) { + ArrayList<Map<String, Double>> result = new ArrayList<>(); + //todo: magicString sollte Enum sein um nutzbarer zu sein. + if (method.equals("median")) { + workRatings.sort(byMean); + result.add(workRatings.get(workRatings.size() / 2)); //in favor of student + } + if (method.equals("variance")) { + ArrayList<Map<String, Double>> oneExcludedMeans = new ArrayList<>(); + if (workRatings.size() > 1) { + for (Map rating : workRatings) { + ArrayList<Map<String, Double>> possiblyCheating = new ArrayList<>(workRatings); + possiblyCheating.remove(rating); + oneExcludedMeans.add(meanOfWorkRatings(possiblyCheating)); + } + } else { + oneExcludedMeans.add(meanOfWorkRatings(workRatings)); + } + Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans)); + ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>(); + for (Map<String, Double> rating: oneExcludedMeans){ + HashMap<String, Double> shuttle = new HashMap<>(); + for (String key: rating.keySet()){ + Double value = (rating.get(key)-meanWorkRating.get(key))*(rating.get(key)-meanWorkRating.get(key)); + shuttle.put(key, value); + } + elementwiseDeviation.add(shuttle); + } + Double deviationOld=0.; + Integer key=0; + for (Integer i=0; i<elementwiseDeviation.size(); i++){ + Double deviationNew=0.; + for (Double devi: elementwiseDeviation.get(i).values()){ + deviationNew += devi; + } + if (deviationNew>deviationOld){ + deviationOld=deviationNew; + key = i; + } + } + result.add(oneExcludedMeans.get(key)); //gets set of rates with smallest deviation in data + } + return result; + } + + @Test + public void sortTest() { + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map work3 = new HashMap<String, Double>(); + work3.put("responsibility", 2.); + work3.put("partOfWork", 3.); + work3.put("cooperation", 5.); + work3.put("communication", 2.); + work3.put("autonomous", 1.); + Map work4 = new HashMap<String, Double>(); + work4.put("responsibility", 5.); + work4.put("partOfWork", 5.); + work4.put("cooperation", 4.); + work4.put("communication", 4.); + work4.put("autonomous", 5.); + ArrayList<Map<String, Double>> workRatings = new ArrayList<>(); + workRatings.add(work); + workRatings.add(work2); + workRatings.add(work3); + workRatings.add(work4); + + //fixme: workRating in class. cheatchecker extends Hashmap<String, Double>!? + System.out.println(cheatChecker(workRatings, "median").toString()); + System.out.println(cheatChecker(workRatings, "variance").toString()); + } + + @Test + public void meanMap() { + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + ArrayList<Map<String, Integer>> workRatings = new ArrayList<>(); + workRatings.add(work); + workRatings.add(work2); + workRatings.add(work2); + + Map mean = new HashMap(); + double size = (double) workRatings.size(); + Iterator it = workRatings.get(0).entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + mean.put(pair.getKey(), 0.0); + } + for (int i = 0; i < workRatings.size(); i++) { + it = workRatings.get(i).entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + mean.put(pair.getKey(), (Double) mean.get(pair.getKey()) + (Double) pair.getValue() / size); + } + } + System.out.println(mean.toString()); + } + + @Test + public void printMap() { + Map workWork = new HashMap<String, Integer>(); + workWork.put("horst", 2); + workWork.put("Stefan", 5); + Performance performance = new Performance(); + performance.setWorkRating(workWork); + Iterator it = workWork.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + System.out.println(workWork.get(pair.getKey())); + System.out.println((double) 2 * (Integer) pair.getValue()); + it.remove(); // avoids a ConcurrentModificationException + } + } + + @Test + public void test1() { + ArrayList<Performance> result = new ArrayList<>(); + StudentIdentifier student = new StudentIdentifier("projekt", "student"); + List<Integer> quiz = new ArrayList<>(); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map contribution1 = new HashMap<String, Double>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map contribution2 = new HashMap<String, Double>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); + Performance pf = new Performance(); + pf.setContributionRating(contribution1); + pf.setQuizAnswer(quiz); + pf.setStudentIdentifier(student); + pf.setWorkRating(work); + Performance pf2 = new Performance(); + pf2.setContributionRating(contribution2); + pf2.setQuizAnswer(quiz); + pf2.setStudentIdentifier(student); + pf2.setWorkRating(work2); + result.add(pf); + result.add(pf2); + } + +}