package fi.otavanopisto.muikku.plugins.guider;
import java.util.List;
import javax.inject.Inject;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceJournalController;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceMaterialController;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceMaterialReplyController;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceVisitController;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceJournalEntry;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterial;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialAssignmentType;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReply;
import fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier;
import fi.otavanopisto.muikku.users.UserEntityController;
public class GuiderController {
@Inject
private UserEntityController userEntityController;
@Inject
private WorkspaceMaterialController workspaceMaterialController;
@Inject
private WorkspaceMaterialReplyController workspaceMaterialReplyController;
@Inject
private WorkspaceVisitController workspaceVisitController;
@Inject
private WorkspaceJournalController workspaceJournalController;
public GuiderStudentWorkspaceActivity getStudentWorkspaceActivity(WorkspaceEntity workspaceEntity, SchoolDataIdentifier userIdentifier) {
UserEntity userEntity = userEntityController.findUserEntityByUserIdentifier(userIdentifier);
if (userEntity == null) {
return null;
}
GuiderStudentWorkspaceActivity activity = new GuiderStudentWorkspaceActivity();
activity.setLastVisit(workspaceVisitController.getLastVisit(workspaceEntity, userEntity));
activity.setNumVisits(workspaceVisitController.getNumVisits(workspaceEntity, userEntity));
WorkspaceJournalEntry workspaceJournalEntry = workspaceJournalController.findLatestsEntryByWorkspaceEntityAndUserEntity(workspaceEntity, userEntity);
if (workspaceJournalEntry != null) {
activity.setJournalEntryCount(workspaceJournalController.countEntriesByWorkspaceEntityAndUserEntity(workspaceEntity, userEntity));
activity.setLastJournalEntry(workspaceJournalEntry.getCreated());
}
List<WorkspaceMaterial> evaluatedAssignments = workspaceMaterialController.listVisibleWorkspaceMaterialsByAssignmentType(workspaceEntity, WorkspaceMaterialAssignmentType.EVALUATED);
for (WorkspaceMaterial evaluatedAssignment : evaluatedAssignments) {
WorkspaceMaterialReply workspaceMaterialReply = workspaceMaterialReplyController.findWorkspaceMaterialReplyByWorkspaceMaterialAndUserEntity(evaluatedAssignment, userEntity);
if (workspaceMaterialReply == null) {
activity.getEvaluables().addUnanswered();
}
else {
switch (workspaceMaterialReply.getState()) {
case WITHDRAWN:
activity.getEvaluables().addAnswered(workspaceMaterialReply.getWithdrawn());
break;
case ANSWERED:
activity.getEvaluables().addAnswered(workspaceMaterialReply.getLastModified());
break;
case FAILED:
activity.getEvaluables().addFailed(workspaceMaterialReply.getSubmitted());
break;
case PASSED:
activity.getEvaluables().addPassed(workspaceMaterialReply.getSubmitted());
break;
case SUBMITTED:
activity.getEvaluables().addSubmitted(workspaceMaterialReply.getSubmitted());
break;
case UNANSWERED:
activity.getEvaluables().addUnanswered();
break;
case INCOMPLETE:
activity.getEvaluables().addIncomplete(workspaceMaterialReply.getLastModified());
break;
}
}
}
List<WorkspaceMaterial> exerciseAssignments = workspaceMaterialController.listVisibleWorkspaceMaterialsByAssignmentType(workspaceEntity, WorkspaceMaterialAssignmentType.EXERCISE);
for (WorkspaceMaterial exerciseAssignment : exerciseAssignments) {
WorkspaceMaterialReply workspaceMaterialReply = workspaceMaterialReplyController.findWorkspaceMaterialReplyByWorkspaceMaterialAndUserEntity(exerciseAssignment, userEntity);
if (workspaceMaterialReply == null) {
activity.getExercises().addUnanswered();
}
else {
switch (workspaceMaterialReply.getState()) {
case UNANSWERED:
case ANSWERED:
case WITHDRAWN:
activity.getExercises().addUnanswered();
break;
case PASSED:
case FAILED:
case SUBMITTED:
case INCOMPLETE:
activity.getExercises().addAnswered(workspaceMaterialReply.getSubmitted());
break;
}
}
}
return activity;
}
}