diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java index 7102865728656f647438245ae9f5dbb70dd68dcf..ec10d90e4ac6f458e853ecf81507cb3f63d271c5 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java @@ -2,7 +2,6 @@ package unipotsdam.gf.modules.group; import unipotsdam.gf.modules.project.Management; import unipotsdam.gf.modules.project.Project; -import unipotsdam.gf.modules.project.ProjectConfiguration; import unipotsdam.gf.modules.project.ProjectDAO; import unipotsdam.gf.interfaces.IGroupFinding; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; @@ -15,7 +14,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; @Path("/group") public class GroupView { @@ -96,7 +94,7 @@ public class GroupView { @Path("/projects/{projectName}") public void saveGroups(@PathParam("projectName") String projectName, Group[] groups) { Project project = new Project(projectName); - groupFormationProcess.finalizeGroups(project, groups); + groupfinding.persistGroups(Arrays.asList(groups), project); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java index 7bb9373b37ab0cf96514f5dcfd060f3df7e422b9..b4379f195d1ee13ddc37552f659c2ee1586f262d 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java @@ -39,7 +39,7 @@ public class DossierCreationProcess { * * @param project */ - public void startDossierPhase(Project project) { + public void start(Project project) { Task task = new Task(TaskName.CLOSE_GROUP_FINDING_PHASE, project.getAuthorEmail(), project.getName(), Progress.FINISHED); taskDAO.updateForUser(task); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java index 59b7da4c2b314db163792a14c3d41e6221c5d743..b2cbfb34fc03a378c231746fdd9726c05c9899c8 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java @@ -57,11 +57,19 @@ public class GroupFormationProcess { * @param project * @param groups */ - public void finalizeGroups( Project project, Group ... groups) { - groupfinding.persistGroups(Arrays.asList(groups), project); + public void finish(Project project, Group ... groups) { taskDAO.persistTeacherTask(project, TaskName.CLOSE_GROUP_FINDING_PHASE, Phase.GroupFormation); + /** + * Gruppenphase wird beendet + */ Task task = new Task(TaskName.CLOSE_GROUP_FINDING_PHASE, project.getAuthorEmail(), project.getName(), Progress.FINISHED); taskDAO.updateForUser(task); + // Der Dozent muss nicht mehr auf weitere Studierende warten + Task task2 = new Task(TaskName.WAIT_FOR_PARTICPANTS, project.getAuthorEmail(), project.getName(), Progress + .FINISHED); + taskDAO.updateForUser(task2); + // Die Studierenden müssen nicht mehr auf die Gruppenfindung warten + taskDAO.finishMemberTask(project, TaskName.WAITING_FOR_GROUP); taskDAO.persistMemberTask(project, TaskName.CONTACT_GROUP_MEMBERS, Phase.GroupFormation); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java index 891d6f8560f54b83e76898a347e19f9ea61eaa5c..dc113e5ed0cecbc7d804da73510c714def073c1e 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java @@ -1,7 +1,6 @@ package unipotsdam.gf.process.phases; import unipotsdam.gf.modules.project.Project; -import unipotsdam.gf.interfaces.Feedback; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.interfaces.IJournal; import unipotsdam.gf.interfaces.IPeerAssessment; @@ -11,7 +10,6 @@ import unipotsdam.gf.modules.communication.Messages; import unipotsdam.gf.mysql.MysqlConnect; import unipotsdam.gf.process.DossierCreationProcess; import unipotsdam.gf.process.GroupFormationProcess; -import unipotsdam.gf.process.constraints.ConstraintsImpl; import unipotsdam.gf.process.constraints.ConstraintsMessages; import javax.annotation.ManagedBean; @@ -44,6 +42,9 @@ public class PhasesImpl implements IPhases { @Inject private DossierCreationProcess dossierCreationProcess; + @Inject + private GroupFormationProcess groupFormationProcess; + @@ -83,7 +84,8 @@ public class PhasesImpl implements IPhases { // inform users about the formed groups, optionally giving them a hint on what happens next iCommunication.sendMessageToUsers(project, Messages.GroupFormation(project)); saveState(project, changeToPhase); - dossierCreationProcess.startDossierPhase(project); + groupFormationProcess.finish(project); + dossierCreationProcess.start(project); break; case DossierFeedback: // check if everybody has uploaded a dossier diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java index eba823b58994a5c36fd94e7d2c65b9620a287cb1..f2a2232824f9c0620d136794e11fee138dc2e6b3 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java @@ -45,12 +45,14 @@ public class TaskDAO { task.setProjectName(vereinfachtesResultSet.getString("projectName")); task.setGroupTask(vereinfachtesResultSet.getBoolean("groupTask")); task.setProgress(Progress.valueOf(vereinfachtesResultSet.getString("progress"))); - try{ + try { task.setEventCreated(vereinfachtesResultSet.getTimestamp("created").getTime()); - }catch(Exception e){ } - try{ + } catch (Exception e) { + } + try { task.setDeadline(vereinfachtesResultSet.getTimestamp("due").getTime()); - }catch(Exception e){ } + } catch (Exception e) { + } task.setPhase(Phase.valueOf(vereinfachtesResultSet.getString("phase"))); task.setTaskName(TaskName.valueOf(vereinfachtesResultSet.getString("taskName"))); task.setHasRenderModel(false); @@ -107,7 +109,7 @@ public class TaskDAO { return task; } - private void persist(Task task) { + private void persist(Task task) { if (task.getTaskName() == null) { throw new Error("no taskName given"); @@ -126,10 +128,7 @@ public class TaskDAO { connect.connect(); String query = - "INSERT IGNORE INTO fltrail.tasks (userEmail, projectName, taskName, " + - "groupTask, importance, progress, phase, created, due, " + - "taskMode, taskMode2, taskMode3)" + - "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + "INSERT IGNORE INTO fltrail.tasks (userEmail, projectName, taskName, " + "groupTask, importance, progress, phase, created, due, " + "taskMode, taskMode2, taskMode3)" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; if (task.getTaskType() == null || task.getTaskType().length == 0) { try { @@ -150,7 +149,8 @@ public class TaskDAO { connect.connect(); String query = "Select * from tasks where userEmail = ? AND projectName = ?"; ArrayList<Task> result = new ArrayList<>(); - VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, user.getEmail(),project.getName()); + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(query, user.getEmail(), project.getName()); while (vereinfachtesResultSet.next()) { String taskName = vereinfachtesResultSet.getString("taskName"); @@ -199,7 +199,8 @@ public class TaskDAO { private Task getFinalizeDossierTask(VereinfachtesResultSet vereinfachtesResultSet) { Task task = getGeneralTask(vereinfachtesResultSet); - task.setTaskData(submissionController.getSubmissionData(new User(task.getUserEmail()), new Project(task.getProjectName()))); + task.setTaskData(submissionController + .getSubmissionData(new User(task.getUserEmail()), new Project(task.getProjectName()))); return task; } @@ -208,6 +209,12 @@ public class TaskDAO { persist(aDefault); } + public void persist(Project project, User target, TaskName taskName, Phase phase, Progress progress) { + Task aDefault = createDefault(project, target, taskName, phase); + aDefault.setProgress(progress); + persist(aDefault); + } + public void persistTeacherTask(Project project, TaskName taskName, Phase phase) { User user = new User(projectDAO.getProjectByName(project.getName()).getAuthorEmail()); Task aDefault = createDefault(project, user, taskName, phase); @@ -236,8 +243,7 @@ public class TaskDAO { public void updateForUser(Task task) { connect.connect(); - String query = - "UPDATE tasks set progress = ? where userEmail = ? AND projectName = ? AND taskName = ?"; + String query = "UPDATE tasks set progress = ? where userEmail = ? AND projectName = ? AND taskName = ?"; connect.issueUpdateStatement( query, task.getProgress().name(), task.getUserEmail(), task.getProjectName(), task.getTaskName()); connect.close(); @@ -245,10 +251,8 @@ public class TaskDAO { public void updateForAll(Task task) { connect.connect(); - String query = - "UPDATE tasks set progress = ? where projectName = ? AND taskName = ?"; - connect.issueUpdateStatement( - query, task.getProgress().name(), task.getProjectName(), task.getTaskName()); + String query = "UPDATE tasks set progress = ? where projectName = ? AND taskName = ?"; + connect.issueUpdateStatement(query, task.getProgress().name(), task.getProjectName(), task.getTaskName()); connect.close(); } @@ -270,4 +274,14 @@ public class TaskDAO { persist(project, feedbackTaskData.getTarget(), TaskName.GIVE_FEEDBACK, Phase.DossierFeedback, TaskType.LINKED); } + /* + * if this takes long rewrite it as batch update + */ + public void finishMemberTask(Project project, TaskName taskName) { + java.util.List<User> members = userDAO.getUsersByProjectName(project.getName()); + for (User member : members) { + Task task = new Task(taskName, member.getEmail(), project.getName(), Progress.FINISHED); + updateForUser(task); + } + } } diff --git a/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js b/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js index eb9b594b6702f5bbcfc37a93f5ea238ef5112709..cfd6e397c1d9331b66b65d90b450479a3ebbd747 100644 --- a/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js +++ b/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js @@ -12,6 +12,10 @@ $(document).ready(function() { var fullSubmissionId = getQueryVariable("fullSubmissionId"); var category = getQueryVariable("category"); + if(category == "TITEL" || category == "titel" ) { + $('#btnBack').hide(); + } + // fetch full submission from database getFullSubmission(getQueryVariable("fullSubmissionId"), function (response) { @@ -70,29 +74,63 @@ $(document).ready(function() { $('#btnContinue').click(function () { var submissionId = getQueryVariable("fullSubmissionId"); + var category = getQueryVariable("category"); + var nextCategory = calculateNextCategory(category); - switch (getQueryVariable("category")) { - case "RECHERCE" : { - var nextCategory = "LITERATURVERZEICHNIS"; - location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory; - } - case "LITERATURVERZEICHNIS" : { - location.href = "../project/give-feedback.jsp?projectName=" + getProjectName(); - - //location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + - // "&category="+nextCategory; - } + if (!nextCategory) { + // TODO go to feedback page + location.href = "../project/give-feedback.jsp?projectName=" + getProjectName(); + } + else { + location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory; } - }); /** * back button */ $('#btnBack').click(function () { - location.href = "../../project/projects-student.jsp" ; + + var submissionId = getQueryVariable("fullSubmissionId"); + var category = getQueryVariable("category"); + var nextCategory = calculateLastCategory(category); + + if (!nextCategory) { + + } + else { + location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory; + } + }); + function calculateNextCategory(current) { + var categories = ["TITEL", "RECHERCHE", "LITERATURVERZEICHNIS", "FORSCHUNGSFRAGE", "UNTERSUCHUNGSKONZEPT", "METHODIK", "DURCHFUEHRUNG", "AUSWERTUNG"]; + var result = false; + for (var i = 0; i< categories.length -1; i++) { + if (categories[i] == current) { + result = categories[i + 1]; + } + } + return result + + } + + function calculateLastCategory(current) { + var categories = ["TITEL", "RECHERCHE", "LITERATURVERZEICHNIS", "FORSCHUNGSFRAGE", "UNTERSUCHUNGSKONZEPT", "METHODIK", "DURCHFUEHRUNG", "AUSWERTUNG"]; + var result = false; + for (var i = 1; i< categories.length; i++) { + if (categories[i] == current) { + result = categories[i - 1]; + } + } + return result + + } + + + + /** * validation of annotation create form inside the modal */ diff --git a/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js b/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js index 6d7d807e3f44cc504f211a55dd625debca695365..f407ad85bf27f28c6b2a5e510e6a3a05d8c5665f 100644 --- a/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js +++ b/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js @@ -4,7 +4,7 @@ function connect(targetId, targetCategory) { var host = document.location.host; var pathname = document.location.pathname; - ws = new WebSocket("ws://" + host + "/ws/annotation/" + targetId + "/" + targetCategory); + ws = new WebSocket("ws://" + host + "/gemeinsamforschen/ws/annotation/" + targetId + "/" + targetCategory); ws.onmessage = function (e) { var message = JSON.parse(e.data); diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java index ccf4eb7c62292e48f78f4dc3d3be51787129d2c7..27ee1232b5686784b645b6d07d0017d4058c59ba 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java @@ -93,7 +93,7 @@ public class GroupPhaseTaskTest { for (User student : students) { group.addMember(student); } - groupFormationProcess.finalizeGroups(project, group); + groupFormationProcess.finish(project, group); } diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql index 6338b54ca8a5dfa7a32417d36dfc75fbfc2625da..bcea9a8e383d42cf9eddce8f1aa7ce9348090ad3 100644 --- a/gemeinsamforschen/src/test/resources/database/fltrail.sql +++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql @@ -177,9 +177,6 @@ ALTER TABLE `fullsubmissions` ALTER TABLE `groups` ADD PRIMARY KEY (`id`); -ALTER TABLE `tasks` - ADD PRIMARY KEY (`id`); - ALTER TABLE `groupuser` ADD KEY `userEmail` (`userEmail`), ADD KEY `groupId` (`groupId`); diff --git a/gemeinsamforschen/src/test/resources/database/testproject.sql b/gemeinsamforschen/src/test/resources/database/testproject.sql new file mode 100644 index 0000000000000000000000000000000000000000..c15d7e9c205f8a458ebf0134a305c3dceec22242 --- /dev/null +++ b/gemeinsamforschen/src/test/resources/database/testproject.sql @@ -0,0 +1,11 @@ +INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test1", "", 1, +current_timestamp, "vodka@yolo.com", "", "GroupFormation" ); + +INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test2", "", 1, +current_timestamp, "vodka@yolo.com", "", "GroupFormation" ); + +insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkas@yolo.com"); +insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkass@yolo.com"); + +insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkas@yolo.com"); +insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkass@yolo.com"); \ No newline at end of file diff --git a/gemeinsamforschen/src/test/resources/database/testuser.sql b/gemeinsamforschen/src/test/resources/database/testuser.sql index 528cc3aeed6535b46051e805e579b55cdc0e28e1..fdbb25267ec35fa80e9c7f600c2017f46b0ee316 100644 --- a/gemeinsamforschen/src/test/resources/database/testuser.sql +++ b/gemeinsamforschen/src/test/resources/database/testuser.sql @@ -8,14 +8,3 @@ INSERT IGNORE INTO users (name, password, email, rocketChatId, rocketChatAuthTok "egal", "vodka@yolo.com", "egal", "egal", 0); -INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test1", "", 1, -current_timestamp, "vodka@yolo.com", "", "GroupFormation" ); - -INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test2", "", 1, -current_timestamp, "vodka@yolo.com", "", "GroupFormation" ); - -insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkas@yolo.com"); -insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkass@yolo.com"); - -insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkas@yolo.com"); -insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkass@yolo.com"); \ No newline at end of file