diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java index 05a28577ccdd335962df8cbf1038b4827f3e1cd9..4ab73af15ec9805f93af64f38988861793034bfb 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -1,55 +1,45 @@ package unipotsdam.gf.config; import org.glassfish.hk2.utilities.binding.AbstractBinder; +import unipotsdam.gf.interfaces.*; import unipotsdam.gf.modules.annotation.controller.AnnotationController; +import unipotsdam.gf.modules.assessment.controller.service.AssessmentDBCommunication; +import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; +import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import unipotsdam.gf.modules.group.DummyProjectCreationService; +import unipotsdam.gf.modules.group.GroupDAO; +import unipotsdam.gf.modules.group.GroupfindingImpl; import unipotsdam.gf.modules.project.Management; import unipotsdam.gf.modules.project.ManagementImpl; +import unipotsdam.gf.modules.project.ProjectConfigurationDAO; import unipotsdam.gf.modules.project.ProjectDAO; +import unipotsdam.gf.modules.researchreport.DummyResearchReportManagement; +import unipotsdam.gf.modules.researchreport.ResearchReportManagement; import unipotsdam.gf.modules.submission.controller.SubmissionController; import unipotsdam.gf.modules.user.UserDAO; +import unipotsdam.gf.mysql.MysqlConnect; +import unipotsdam.gf.mysql.MysqlConnectImpl; import unipotsdam.gf.process.DossierCreationProcess; import unipotsdam.gf.process.GroupFormationProcess; import unipotsdam.gf.process.ProjectCreationProcess; import unipotsdam.gf.process.constraints.ConstraintsImpl; import unipotsdam.gf.process.phases.PhasesImpl; import unipotsdam.gf.process.tasks.TaskDAO; -import unipotsdam.gf.interfaces.*; -import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; -import unipotsdam.gf.modules.communication.service.CommunicationDummyService; -import unipotsdam.gf.modules.group.DummyGroupfinding; -import unipotsdam.gf.modules.group.GroupfindingImpl; -import unipotsdam.gf.modules.group.DummyProjectCreationService; -import unipotsdam.gf.modules.group.GroupDAO; -import unipotsdam.gf.modules.journal.service.IJournalImpl; -import unipotsdam.gf.modules.feedback.DummyFeedback; -import unipotsdam.gf.modules.researchreport.DummyResearchReportManagement; -import unipotsdam.gf.modules.researchreport.ResearchReportManagement; -import unipotsdam.gf.modules.assessment.controller.service.AssessmentDBCommunication; -import unipotsdam.gf.mysql.MysqlConnect; -import unipotsdam.gf.mysql.MysqlConnectImpl; import unipotsdam.gf.session.GFContexts; public class GFApplicationBinder extends AbstractBinder { - /** - * TODO replace DummyImplementation - */ + @Override protected void configure() { bind(CommunicationDummyService.class).to(ICommunication.class); bind(ManagementImpl.class).to(Management.class); - bind(DummyFeedback.class).to(Feedback.class); + bind(PeerAssessment.class).to(IPeerAssessment.class); bind(PhasesImpl.class).to(IPhases.class); bind(ManagementImpl.class).to(Management.class); bind(DummyResearchReportManagement.class).to(ResearchReportManagement.class); - bind(DummyProjectCreationService.class).to(DummyProjectCreationService.class); - bind(UserDAO.class).to(UserDAO.class); - bind(ProjectDAO.class).to(ProjectDAO.class); - bind(GroupDAO.class).to(GroupDAO.class); bind(GroupfindingImpl.class).to(IGroupFinding.class); - bind(TaskDAO.class).to(TaskDAO.class); - bind(IJournalImpl.class).to(IJournal.class); bind(AssessmentDBCommunication.class).to(AssessmentDBCommunication.class); bind(GFContexts.class).to(GFContexts.class); bind(ProjectCreationProcess.class).to(ProjectCreationProcess.class); @@ -58,8 +48,17 @@ public class GFApplicationBinder extends AbstractBinder { bind(DossierCreationProcess.class).to(DossierCreationProcess.class); bind(SubmissionController.class).to(SubmissionController.class); bind(AnnotationController.class).to(AnnotationController.class); + bind(ProjectConfigurationDAO.class).to(ProjectConfigurationDAO.class); + bind(DummyProjectCreationService.class).to(DummyProjectCreationService.class); + + bind(UserDAO.class).to(UserDAO.class); + bind(ProjectDAO.class).to(ProjectDAO.class); + bind(GroupDAO.class).to(GroupDAO.class); + bind(TaskDAO.class).to(TaskDAO.class); + bindMore(); } + protected void bindMore() { bind(MysqlConnectImpl.class).to(MysqlConnect.class); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java index 064efcc5cf1d30c7300e1dbf9affcc0f6ee69ce0..647f8a2bdec41a7734e082be720c9b5e50bb0ca0 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java @@ -1,15 +1,9 @@ package unipotsdam.gf.interfaces; import unipotsdam.gf.modules.project.Project; import unipotsdam.gf.modules.user.User; -import unipotsdam.gf.process.constraints.ConstraintsMessages; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; -import unipotsdam.gf.modules.feedback.Model.Peer2PeerFeedback; +import unipotsdam.gf.process.progress.HasProgress; import unipotsdam.gf.modules.researchreport.ResearchReport; -import java.io.File; -import java.util.ArrayList; -import java.util.Map; - /** PeerFeedback Interface diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java index 977056d194b92c84f552223b13ceae3e64933c25..a618c43f01312c2ac788665c6d34debe5ce72d0b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java @@ -11,9 +11,5 @@ public interface IPhases { */ void endPhase(Phase phase, Project project); - /** - * the dependency to feedback should be settable externally for test reasons - * @param feedback the feedback that is send - */ - void setFeedback(Feedback feedback); + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/DummyFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/DummyFeedback.java deleted file mode 100644 index a35a03645ecc12c8fb794bc884cc4c264c9588e9..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/DummyFeedback.java +++ /dev/null @@ -1,54 +0,0 @@ -package unipotsdam.gf.modules.feedback; - -import uk.co.jemos.podam.api.PodamFactory; -import uk.co.jemos.podam.api.PodamFactoryImpl; -import unipotsdam.gf.assignments.Assignee; -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.modules.project.Project; -import unipotsdam.gf.modules.user.User; -import unipotsdam.gf.process.constraints.Constraints; -import unipotsdam.gf.process.constraints.ConstraintsMessages; -import unipotsdam.gf.interfaces.Feedback; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; -import unipotsdam.gf.modules.feedback.Model.Peer2PeerFeedback; -import unipotsdam.gf.modules.researchreport.ResearchReport; - -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class DummyFeedback implements Feedback { - - /** - * Utility to create dummy data for students - */ - PodamFactory factory = new PodamFactoryImpl(); - - private static Boolean missingTaskAssigned = false; - private Map<StudentIdentifier, Constraints> openTasks; - - - public DummyFeedback() { - - } - - - @Override - public void assigningMissingFeedbackTasks(Project project) { - NotImplementedLogger.logAssignment(Assignee.KATHARINA, Feedback.class, "assigningMissingFeedbackTasks", - "assigning feedback tasks "); - missingTaskAssigned = true; - } - - @Override - public void assignFeedbackTasks(Project project) { - - } - - - @Override - public ResearchReport getFeedbackTask(User student) { - return factory.manufacturePojo(ResearchReport.class); - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/FeedbackImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/FeedbackImpl.java index 8625d62d3613776d2ef1659dbb9d1befbe74f4b2..300635446604ccfcaef281bc7becdc445da8fa47 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/FeedbackImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/feedback/FeedbackImpl.java @@ -3,6 +3,8 @@ package unipotsdam.gf.modules.feedback; import unipotsdam.gf.interfaces.Feedback; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; import unipotsdam.gf.modules.feedback.Model.Peer2PeerFeedback; +import unipotsdam.gf.modules.group.GroupDAO; +import unipotsdam.gf.modules.group.GroupFormationMechanism; import unipotsdam.gf.modules.project.Project; import unipotsdam.gf.modules.researchreport.ResearchReport; import unipotsdam.gf.modules.submission.controller.SubmissionController; @@ -22,6 +24,9 @@ public class FeedbackImpl implements Feedback { @Inject private UserDAO userDAO; + @Inject + private GroupDAO groupDAO; + @Inject private SubmissionController submissionController; @@ -32,19 +37,33 @@ public class FeedbackImpl implements Feedback { @Override public void assignFeedbackTasks(Project project) { - List<User> usersByProjectName = userDAO.getUsersByProjectName(project.getName()); - User firstUser = usersByProjectName.get(0); - User lastUser = usersByProjectName.get(usersByProjectName.size()); - submissionController.updateFullSubmission(firstUser, lastUser); - for (int i = 0; i<usersByProjectName.size()-1;i++) { - User submissionOwner = usersByProjectName.get(i+1); - User feedbackGiver =usersByProjectName.get(i); - submissionController.updateFullSubmission(submissionOwner, feedbackGiver); + GroupFormationMechanism groupFormationMechanism = groupDAO.getGroupFormationMechanism(project); + + switch (groupFormationMechanism) { + case SingleUser: + List<User> usersByProjectName = userDAO.getUsersByProjectName(project.getName()); + User firstUser = usersByProjectName.get(0); + User lastUser = usersByProjectName.get(usersByProjectName.size()); + submissionController.updateFullSubmission(firstUser, lastUser); + for (int i = 0; i<usersByProjectName.size()-1;i++) { + User submissionOwner = usersByProjectName.get(i+1); + User feedbackGiver =usersByProjectName.get(i); + submissionController.updateFullSubmission(submissionOwner, feedbackGiver); + } + break; + case UserProfilStrategy: + case Manual: + case LearningGoalStrategy: + // TODO implement assigning feedback tasks in case of groups + // consider https://docs.google.com/document/d/1DLuggw7gxLbpbDblDTWVtYC-EI4Tb42y285mdABLC0Q/edit?ts=5bbb1f20# } + } @Override public ResearchReport getFeedbackTask(User student) { return null; } + + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/DummyGroupfinding.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/DummyGroupfinding.java deleted file mode 100644 index b1fd4dc7c149e6d9f86f22aab8ff259d4a989f31..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/DummyGroupfinding.java +++ /dev/null @@ -1,46 +0,0 @@ -package unipotsdam.gf.modules.group; - -import unipotsdam.gf.modules.project.Project; -import unipotsdam.gf.assignments.Assignee; -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.interfaces.IGroupFinding; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; - -import java.util.ArrayList; -import java.util.List; - -public class DummyGroupfinding implements IGroupFinding { - @Override - public void selectGroupfindingCriteria( - GroupfindingCriteria groupfindingCriteria, Project project) { - NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class); - } - - @Override - public void persistGroups( - List<Group> groupComposition, Project project){ - NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class); - } - - @Override - public List<Group> getGroups(Project project) { - NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class); - return new ArrayList<>(); - } - - @Override - public void formGroups(GroupFormationMechanism groupFindingMechanism) { - NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class); - } - - @Override - public ArrayList<String> getStudentsInSameGroup( - StudentIdentifier student) { - return null; - } - - @Override - public int getMinNumberOfStudentsNeeded(Project project) { - return 2; - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ManagementImpl.java index ec629507623cd6f355ad933ee0f21337de22395f..03327bb3d4ce66bf062a21286c823c9af9ccf71d 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ManagementImpl.java @@ -39,6 +39,9 @@ public class ManagementImpl implements Management { @Inject private MysqlConnect connect; + @Inject + private ProjectConfigurationDAO projectConfigurationDAO; + @Override public void delete(User user) { @@ -119,13 +122,12 @@ public class ManagementImpl implements Management { @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/modules/project/ProjectView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ProjectView.java index e801d77eb55ff415695dfa04d68572e74ecae027..ab8525d346360372a68f0e3ef601f96bd5327f8a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ProjectView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/project/ProjectView.java @@ -29,9 +29,6 @@ public class ProjectView { @Inject private Management iManagement; - @Inject - private TaskDAO taskDao; - @Inject private ProjectCreationProcess projectCreationProcess; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java index 32592dfd8b33997d11e1f2241ba83cd9e580391b..7574532bd0534d49af1a66037d3924cbab128f6b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java @@ -2,9 +2,13 @@ package unipotsdam.gf.modules.submission.controller; import com.google.common.base.Strings; import org.slf4j.LoggerFactory; +import unipotsdam.gf.modules.group.GroupDAO; +import unipotsdam.gf.modules.group.GroupFormationMechanism; import unipotsdam.gf.modules.project.Project; +import unipotsdam.gf.modules.project.ProjectDAO; import unipotsdam.gf.modules.submission.view.SubmissionRenderData; import unipotsdam.gf.modules.user.User; +import unipotsdam.gf.modules.user.UserDAO; import unipotsdam.gf.mysql.MysqlConnect; import unipotsdam.gf.mysql.VereinfachtesResultSet; import unipotsdam.gf.interfaces.ISubmission; @@ -15,21 +19,36 @@ import unipotsdam.gf.modules.submission.model.SubmissionPart; import unipotsdam.gf.modules.submission.model.SubmissionPartBodyElement; import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest; import unipotsdam.gf.modules.submission.model.SubmissionProjectRepresentation; +import unipotsdam.gf.process.constraints.ConstraintsImpl; +import unipotsdam.gf.process.phases.Phase; +import unipotsdam.gf.process.progress.HasProgress; +import unipotsdam.gf.process.progress.ProgressData; import unipotsdam.gf.process.tasks.FeedbackTaskData; +import unipotsdam.gf.process.tasks.ParticipantsCount; import javax.inject.Inject; import java.util.ArrayList; +import java.util.List; import java.util.UUID; /** * @author Sven Kästle * skaestle@uni-potsdam.de */ -public class SubmissionController implements ISubmission { +public class SubmissionController implements ISubmission, HasProgress { @Inject private MysqlConnect connection; + @Inject + private UserDAO userDAO; + + @Inject + private GroupDAO groupDAO; + + @Inject + private ProjectDAO projectDAO; + private static final org.slf4j.Logger log = LoggerFactory.getLogger(SubmissionController.class); @Override @@ -610,4 +629,77 @@ public class SubmissionController implements ISubmission { return count; } + + + @Override + public ProgressData getProgressData(Project project) { + + ProgressData progressData = new ProgressData(); + // the number of completed dossiers + progressData.setNumberOfCompletion(getFinalizedDossiersCount(project)); + + // the number of dossiers needed relativ to the group or user count + progressData.setNumberNeeded(dossiersNeeded(project)); + List<User> strugglersWithSubmission = getStrugglersWithSubmission(project); + progressData.setUsersMissing(strugglersWithSubmission); + progressData.setAlmostComplete((progressData.getNumberNeeded()/progressData.getNumberOfCompletion()) <= (1/10)); + return progressData; + } + + /** + * get how many dossiers are needed + * + * @param project + * @return + */ + public int dossiersNeeded(Project project) { + GroupFormationMechanism groupFormationMechanism = groupDAO.getGroupFormationMechanism(project); + Integer result = 0; + switch (groupFormationMechanism) { + case SingleUser: + ParticipantsCount participantCount = projectDAO.getParticipantCount(project); + result = participantCount.getParticipants(); + break; + case LearningGoalStrategy: + case UserProfilStrategy: + case Manual: + int groupCount = groupDAO.getGroupsByProjectName(project.getName()).size(); + result = groupCount; + break; + } + return result; + } + + + public List<User> getStrugglersWithSubmission(Project project) { + ArrayList<User> struggles = new ArrayList<>(); + GroupFormationMechanism groupFormationMechanism = groupDAO.getGroupFormationMechanism(project); + switch (groupFormationMechanism) { + case SingleUser: + List<User> usersInProject = userDAO.getUsersByProjectName(project.getName()); + List<User> usersHavingGivenFeedback = getAllUsersWithFeedbackGiven(project); + for (User user : usersInProject) { + if (!usersHavingGivenFeedback.contains(user)) { + struggles.add(user); + } + } + break; + case LearningGoalStrategy: + case Manual: + case UserProfilStrategy: + } + return struggles; + } + + public List<User> getAllUsersWithFeedbackGiven(Project project) { + List<User> result = new ArrayList<>(); + connection.connect(); + String query = "select * feedbackUser from fullsubmissions where projectName = ?"; + VereinfachtesResultSet vereinfachtesResultSet = connection.issueSelectStatement(query, project.getName()); + while (vereinfachtesResultSet.next()) { + result.add(userDAO.getUserByEmail(vereinfachtesResultSet.getString("feedbackUser"))); + } + connection.close(); + return result; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java index 8b75361824c55771397d2f83155bad6c0d8d8a64..6392aeedea5c893c7b35830253aba088aa3a295d 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java @@ -27,7 +27,7 @@ public class DossierCreationProcess { @Inject private Management management; - + @Inject private UserDAO userDAO; @@ -42,17 +42,24 @@ public class DossierCreationProcess { /** * start the Dossier Phase + * * @param project */ public void startDossierPhase(Project project) { Task task = new Task(TaskName.CLOSE_GROUP_FINDING_PHASE, project.getAuthorEmail(), project.getName(), Progress.FINISHED); taskDAO.updateForUser(task); + + // create a task, telling the docent to wait for students upload of dossiers + taskDAO.persist(project, new User(project.getAuthorEmail()), TaskName.WAITING_FOR_STUDENT_DOSSIERS, Phase + .DossierFeedback, TaskType.INFO); + + // TODO create waiting for feedback to complete task + taskDAO.persistMemberTask(project, TaskName.UPLOAD_DOSSIER, Phase.DossierFeedback); } /** - * * @param fullSubmissionPostRequest * @param user * @param project @@ -73,7 +80,6 @@ public class DossierCreationProcess { } /** - * * @param fullSubmission * @param user */ @@ -82,7 +88,8 @@ public class DossierCreationProcess { submissionController.markAsFinal(fullSubmission); // mark annotate task as finished in db - Task task = new Task(TaskName.ANNOTATE_DOSSIER, user.getEmail(), fullSubmission.getProjectName(), Progress.FINISHED); + Task task = new Task(TaskName.ANNOTATE_DOSSIER, user.getEmail(), fullSubmission.getProjectName(), + Progress.FINISHED); taskDAO.updateForUser(task); if (constraints.checkIfFeedbackCanBeDistributed(project)) { @@ -90,7 +97,8 @@ public class DossierCreationProcess { feedback.assignFeedbackTasks(project); // persist tasks for feedback - taskDAO.persistMemberTask(new Project(fullSubmission.getProjectName()), TaskName.GIVE_FEEDBACK, Phase.DossierFeedback); + taskDAO.persistMemberTask( + new Project(fullSubmission.getProjectName()), TaskName.GIVE_FEEDBACK, Phase.DossierFeedback); } } @@ -99,5 +107,13 @@ public class DossierCreationProcess { /* TODO implement */ + /** TODO: Move this to the dossierCreationProcess + /* if (tasks.size() > 0) { + iCommunication.informAboutMissingTasks(tasks, project); + } else { + // send a message to the users informing them about the start of the new phase + iCommunication.sendMessageToUsers(project, Messages.NewFeedbackTask(project)); + saveState(project, changeToPhase); + }*/ } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/ProjectCreationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/ProjectCreationProcess.java index 4eb53bd199224307b91b2e994b026c6693b57150..6549b063b6ba49b1cb2b4d450e06f0894111e243 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/ProjectCreationProcess.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/ProjectCreationProcess.java @@ -35,8 +35,6 @@ public class ProjectCreationProcess { @Inject private GroupDAO groupDAO; - @Inject - private IPhases phases; /** * STEP 1 diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/constraints/ConstraintsImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/constraints/ConstraintsImpl.java index e31633f11cab1ef6b8f89be769ab990eb45e0754..7948515f03de3c89904bbcfe0739146b6bde5e24 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/constraints/ConstraintsImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/constraints/ConstraintsImpl.java @@ -7,10 +7,15 @@ import unipotsdam.gf.modules.group.GroupFormationMechanism; import unipotsdam.gf.modules.project.Project; import unipotsdam.gf.modules.project.ProjectDAO; import unipotsdam.gf.modules.submission.controller.SubmissionController; +import unipotsdam.gf.modules.user.User; +import unipotsdam.gf.modules.user.UserDAO; import unipotsdam.gf.mysql.MysqlConnect; +import unipotsdam.gf.process.phases.Phase; import unipotsdam.gf.process.tasks.ParticipantsCount; import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; public class ConstraintsImpl { @@ -23,9 +28,16 @@ public class ConstraintsImpl { @Inject GroupDAO groupDAO; + @Inject + UserDAO userDAO; + @Inject private SubmissionController submissionController; + public ConstraintsImpl() { + + } + /** * groups can be formed if participantCount > numStudentsNeeded */ @@ -44,12 +56,24 @@ public class ConstraintsImpl { */ public boolean checkIfFeedbackCanBeDistributed(Project project) { GroupFormationMechanism groupFormationMechanism = groupDAO.getGroupFormationMechanism(project); + int numberOfFinalizedDossiers = submissionController.getFinalizedDossiersCount(project); + Boolean result = false; switch (groupFormationMechanism) { case SingleUser: ParticipantsCount participantCount = projectDAO.getParticipantCount(project); - int numberOfFinalizedDossiers = submissionController.getFinalizedDossiersCount(project); - return numberOfFinalizedDossiers == participantCount.getParticipants(); + result = numberOfFinalizedDossiers == participantCount.getParticipants(); + break; + case LearningGoalStrategy: + case UserProfilStrategy: + case Manual: + int groupCount = groupDAO.getGroupsByProjectName(project.getName()).size(); + result = numberOfFinalizedDossiers == groupCount; + break; } - return false; + return result; } + + + + } 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 a334fdf9254bf56c71b9cf60a362a7e153da449e..891d6f8560f54b83e76898a347e19f9ea61eaa5c 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java @@ -35,9 +35,6 @@ public class PhasesImpl implements IPhases { @Inject private IPeerAssessment iPeerAssessment; - @Inject - private Feedback feedback; - @Inject private ICommunication iCommunication; @@ -47,8 +44,7 @@ public class PhasesImpl implements IPhases { @Inject private DossierCreationProcess dossierCreationProcess; - @Inject - private ConstraintsImpl constraints; + public PhasesImpl() { @@ -91,16 +87,7 @@ public class PhasesImpl implements IPhases { break; case DossierFeedback: // check if everybody has uploaded a dossier - dossierCreationProcess.finishPhase(project); - /** TODO: Move this to the dossierCreationProcess - /* if (tasks.size() > 0) { - iCommunication.informAboutMissingTasks(tasks, project); - } else { - // send a message to the users informing them about the start of the new phase - iCommunication.sendMessageToUsers(project, Messages.NewFeedbackTask(project)); - saveState(project, changeToPhase); - }*/ break; case Execution: // check if the portfolios have been prepared for evaluation (relevant entries selected) @@ -161,7 +148,5 @@ public class PhasesImpl implements IPhases { } - public void setFeedback(Feedback feedback) { - this.feedback = feedback; - } + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/HasProgress.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/HasProgress.java new file mode 100644 index 0000000000000000000000000000000000000000..4219d1608d104405f476c01c4e34dfa857122254 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/HasProgress.java @@ -0,0 +1,8 @@ +package unipotsdam.gf.process.progress; + +import unipotsdam.gf.modules.project.Project; +import unipotsdam.gf.modules.user.User; + +public interface HasProgress { + ProgressData getProgressData(Project project); +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/ProgressData.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/ProgressData.java new file mode 100644 index 0000000000000000000000000000000000000000..b3f7ba36641b62f6469359b0ecfa6839d36cbb31 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/progress/ProgressData.java @@ -0,0 +1,55 @@ +package unipotsdam.gf.process.progress; + +import unipotsdam.gf.modules.user.User; + +import java.util.List; + +public class ProgressData { + private Boolean isAlmostComplete; + private int numberOfCompletion; + private int numberNeeded; + private java.util.List<User> usersMissing; + + public ProgressData() { + } + + public ProgressData( + Boolean isAlmostComplete, int numberOfCompletion, int numberNeeded, List<User> usersMissing) { + this.isAlmostComplete = isAlmostComplete; + this.numberOfCompletion = numberOfCompletion; + this.numberNeeded = numberNeeded; + this.usersMissing = usersMissing; + } + + public Boolean getAlmostComplete() { + return isAlmostComplete; + } + + public void setAlmostComplete(Boolean almostComplete) { + isAlmostComplete = almostComplete; + } + + public int getNumberOfCompletion() { + return numberOfCompletion; + } + + public void setNumberOfCompletion(int numberOfCompletion) { + this.numberOfCompletion = numberOfCompletion; + } + + public int getNumberNeeded() { + return numberNeeded; + } + + public void setNumberNeeded(int numberNeeded) { + this.numberNeeded = numberNeeded; + } + + public List<User> getUsersMissing() { + return usersMissing; + } + + public void setUsersMissing(List<User> usersMissing) { + this.usersMissing = usersMissing; + } +} 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 6cb247f14f4287e7e7ac1e861c2fe1e835c71601..9d15f7379f6b99e9b86815ecbcfa74db66c5e1ae 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java @@ -178,6 +178,12 @@ public class TaskDAO { result.add(feedbackTask); break; } + case WAITING_FOR_STUDENT_DOSSIERS: { + Task task = getGeneralTask(vereinfachtesResultSet); + task.setHasRenderModel(true); + task.setTaskData(submissionController.getProgressData(project)); + break; + } default: { result.add(getGeneralTask(vereinfachtesResultSet)); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java index ca3efac59d79e9caa47ffe944a343fa8aab34755..75388d34b1f6a5b109f0e1f3ccdc8a1ef0ffcba5 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java @@ -7,5 +7,5 @@ public enum TaskName { // Student Tasks UPLOAD_DOSSIER, GIVE_FEEDBACK, CREATE_QUIZ, WRITE_EJOURNAL, ANNOTATE_DOSSIER, FINALIZE_DOSSIER, FINALIZE_EJOURNAL, - FORM_GROUPS_MANUALLY, EDIT_FORMED_GROUPS, CONTACT_GROUP_MEMBERS, ASSESSMENT, EDIT_FEEDBACK + FORM_GROUPS_MANUALLY, EDIT_FORMED_GROUPS, CONTACT_GROUP_MEMBERS, ASSESSMENT, WAITING_FOR_STUDENT_DOSSIERS, EDIT_FEEDBACK } diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java index ef89726d4dc57911f843761229cfc16af2369aa6..93e94f69d61b1349896f4c5123b8936f6fb44a86 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java @@ -100,7 +100,7 @@ public class ActivityFlowTest { // TODO @Julian: Find out more elegant way of doing this researchReportManagement.setFeedback(feedback); - phases.setFeedback(feedback); +// phases.setFeedback(feedback); } @@ -253,6 +253,7 @@ public class ActivityFlowTest { public void createCourse() { // add Titel Project project = factory.manufacturePojo(Project.class); + project.setAuthorEmail(teacher.getEmail()); management.create(project); ProjectConfiguration projectConfiguration = factory.manufacturePojo(ProjectConfiguration.class); diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql index 9b1be4b4c6ccfe73e6580d067205e48d76da8495..6338b54ca8a5dfa7a32417d36dfc75fbfc2625da 100644 --- a/gemeinsamforschen/src/test/resources/database/fltrail.sql +++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql @@ -51,7 +51,9 @@ CREATE TABLE `fullsubmissions` ( `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user` varchar(120) NOT NULL, `text` mediumtext NOT NULL, - `projectName` varchar(120) NOT NULL + `projectName` varchar(120) NOT NULL, + `feedbackUser` varchar (255), + `finalized` tinyint(4) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `grades` ( @@ -159,6 +161,12 @@ CREATE TABLE `workrating` ( `autonomous` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE submissionuser +( + submissionId varchar(400), + userEmail varchar(255) +); + ALTER TABLE `annotations` ADD PRIMARY KEY (`id`);