package fi.otavanopisto.muikku.schooldata;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import fi.otavanopisto.muikku.dao.grading.GradingScaleEntityDAO;
import fi.otavanopisto.muikku.dao.grading.GradingScaleItemEntityDAO;
import fi.otavanopisto.muikku.model.base.SchoolDataSource;
import fi.otavanopisto.muikku.model.grading.GradingScaleEntity;
import fi.otavanopisto.muikku.model.grading.GradingScaleItemEntity;
import fi.otavanopisto.muikku.schooldata.entity.CompositeAssessmentRequest;
import fi.otavanopisto.muikku.schooldata.entity.CompositeGradingScale;
import fi.otavanopisto.muikku.schooldata.entity.GradingScale;
import fi.otavanopisto.muikku.schooldata.entity.GradingScaleItem;
import fi.otavanopisto.muikku.schooldata.entity.TransferCredit;
import fi.otavanopisto.muikku.schooldata.entity.User;
import fi.otavanopisto.muikku.schooldata.entity.WorkspaceAssessment;
import fi.otavanopisto.muikku.schooldata.entity.WorkspaceAssessmentRequest;
import fi.otavanopisto.muikku.schooldata.entity.WorkspaceUser;
public class GradingController {
@Inject
private Logger logger;
@Inject
private GradingSchoolDataController gradingSchoolDataController;
@Inject
private GradingScaleEntityDAO gradingScaleEntityDAO;
@Inject
private GradingScaleItemEntityDAO gradingScaleItemEntityDAO;
/* CompositeGradingScale */
public List<CompositeGradingScale> listCompositeGradingScales() {
return gradingSchoolDataController.listCompositeGradingScales();
}
/* GradingScaleEntity */
public GradingScaleEntity findGradingScaleEntityById(Long id) {
return gradingScaleEntityDAO.findById(id);
}
public GradingScaleEntity findGradingScaleEntityById(SchoolDataSource schoolDataSource, String identifier) {
return gradingScaleEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, identifier);
}
public List<GradingScaleEntity> listGradingScaleEntities() {
return gradingScaleEntityDAO.listAll();
}
/* GradingScaleItemEntity */
public GradingScaleItemEntity findGradingScaleItemEntityById(Long id) {
return gradingScaleItemEntityDAO.findById(id);
}
public GradingScaleItemEntity findGradingScaleItemEntityById(SchoolDataSource schoolDataSource, String identifier) {
return gradingScaleItemEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, identifier);
}
public List<GradingScaleItemEntity> listGradingScaleItemEntities() {
return gradingScaleItemEntityDAO.listAll();
}
/* GradingScale */
public GradingScale findGradingScale(GradingScaleEntity entity) {
return gradingSchoolDataController.findGradingScale(entity.getDataSource(), entity.getIdentifier());
}
public GradingScale findGradingScale(String schoolDataSource, String identifier) {
return gradingSchoolDataController.findGradingScale(schoolDataSource, identifier);
}
public GradingScale findGradingScale(SchoolDataIdentifier identifier) {
return gradingSchoolDataController.findGradingScale(identifier.getDataSource(), identifier.getIdentifier());
}
public List<GradingScale> listGradingScales() {
return gradingSchoolDataController.listGradingScales();
}
/* GradingScaleItem */
public GradingScaleItem findGradingScaleItem(GradingScale gradingScale, GradingScaleItemEntity entity) {
return gradingSchoolDataController.findGradingScaleItem(entity.getDataSource(), gradingScale, entity.getIdentifier());
}
public GradingScaleItem findGradingScaleItem(GradingScale gradingScale, String schoolDataSource, String identifier) {
return gradingSchoolDataController.findGradingScaleItem(schoolDataSource, gradingScale, identifier);
}
public GradingScaleItem findGradingScaleItem(GradingScale gradingScale, SchoolDataIdentifier identifier) {
return gradingSchoolDataController.findGradingScaleItem(identifier.getDataSource(), gradingScale, identifier.getIdentifier());
}
public List<GradingScaleItem> listGradingScaleItems(GradingScale gradingScale) {
return gradingSchoolDataController.listGradingScaleItems(gradingScale);
}
/* Workspace assessment */
public WorkspaceAssessment createWorkspaceAssessment(String schoolDataSource, WorkspaceUser workspaceUser, User assessingUser, GradingScaleItem grade, String verbalAssessment, Date date) {
return gradingSchoolDataController.createWorkspaceAssessment(schoolDataSource,
workspaceUser.getIdentifier().getIdentifier(),
workspaceUser.getIdentifier().getDataSource(),
workspaceUser.getWorkspaceIdentifier().getIdentifier(),
workspaceUser.getUserIdentifier().getIdentifier(),
assessingUser.getIdentifier(),
assessingUser.getSchoolDataSource(),
grade.getIdentifier(),
grade.getSchoolDataSource(),
grade.getGradingScaleIdentifier(),
grade.getSchoolDataSource(),
verbalAssessment,
date);
}
public fi.otavanopisto.muikku.schooldata.entity.WorkspaceAssessment findWorkspaceAssessment(
SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier,
SchoolDataIdentifier workspaceAssesmentIdentifier) {
return gradingSchoolDataController.findWorkspaceAssessment(workspaceIdentifier, studentIdentifier, workspaceAssesmentIdentifier);
}
public List<WorkspaceAssessment> listWorkspaceAssessments(SchoolDataSource schoolDataSource, String workspaceIdentifier, String studentIdentifier){
return gradingSchoolDataController.listWorkspaceAssessments(schoolDataSource, workspaceIdentifier, studentIdentifier);
}
public List<WorkspaceAssessment> listWorkspaceAssessments(String schoolDataSource, String workspaceIdentifier, String studentIdentifier){
return gradingSchoolDataController.listWorkspaceAssessments(schoolDataSource, workspaceIdentifier, studentIdentifier);
}
public List<WorkspaceAssessment> listWorkspaceAssessments(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier) {
if (!StringUtils.equals(workspaceIdentifier.getDataSource(), studentIdentifier.getDataSource())) {
logger.log(Level.SEVERE, String.format("Failed to list workspace assessents because workspace and student datasources differ", workspaceIdentifier.getDataSource(), studentIdentifier.getDataSource()));
return Collections.emptyList();
}
return gradingSchoolDataController.listWorkspaceAssessments(studentIdentifier.getDataSource(), workspaceIdentifier.getIdentifier(), studentIdentifier.getIdentifier());
}
public WorkspaceAssessment updateWorkspaceAssessment(SchoolDataIdentifier workspaceAssesmentIdentifier, WorkspaceUser workspaceUser, User assessingUser, GradingScaleItem grade, String verbalAssessment, Date date){
return gradingSchoolDataController.updateWorkspaceAssessment(workspaceAssesmentIdentifier.getDataSource(),
workspaceAssesmentIdentifier.getIdentifier(),
workspaceUser.getIdentifier().getIdentifier(),
workspaceUser.getIdentifier().getDataSource(),
workspaceUser.getWorkspaceIdentifier().getIdentifier(),
workspaceUser.getUserIdentifier().getIdentifier(),
assessingUser.getIdentifier(),
assessingUser.getSchoolDataSource(),
grade.getIdentifier(),
grade.getSchoolDataSource(),
grade.getGradingScaleIdentifier(),
grade.getSchoolDataSource(),
verbalAssessment,
date);
}
public void deleteWorkspaceAssessment(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier, SchoolDataIdentifier workspaceAssesmentIdentifier) {
gradingSchoolDataController.deleteWorkspaceAssessment(workspaceIdentifier, studentIdentifier, workspaceAssesmentIdentifier);
}
public void restoreLatestAssessmentRequest(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier) {
List<WorkspaceAssessmentRequest> requests = listWorkspaceAssessmentRequests(workspaceIdentifier.getDataSource(), workspaceIdentifier.getIdentifier(), studentIdentifier.getIdentifier());
if (CollectionUtils.isNotEmpty(requests)) {
requests.sort(new Comparator<WorkspaceAssessmentRequest>() {
public int compare(WorkspaceAssessmentRequest o1, WorkspaceAssessmentRequest o2) {
return o2.getDate().compareTo(o1.getDate()); // latest request first
}
});
// Mark the latest request as not handled
WorkspaceAssessmentRequest latestRequest = requests.get(0);
updateWorkspaceAssessmentRequest(
latestRequest.getSchoolDataSource(),
latestRequest.getIdentifier(),
latestRequest.getWorkspaceUserIdentifier(),
latestRequest.getWorkspaceUserSchoolDataSource(),
workspaceIdentifier.getIdentifier(),
studentIdentifier.getIdentifier(),
latestRequest.getRequestText(),
latestRequest.getDate(),
latestRequest.getArchived(),
Boolean.FALSE); // not handled
}
}
public WorkspaceAssessmentRequest createWorkspaceAssessmentRequest(String schoolDataSource, String workspaceUserIdentifier, String workspaceUserSchoolDataSource, String workspaceIdentifier,
String studentIdentifier, String requestText, Date date) {
return gradingSchoolDataController.createWorkspaceAssessmentRequest(schoolDataSource, workspaceUserIdentifier, workspaceUserSchoolDataSource, workspaceIdentifier, studentIdentifier, requestText, date);
}
public WorkspaceAssessmentRequest findWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceIdentifier, String studentIdentifier) {
return gradingSchoolDataController.findWorkspaceAssessmentRequest(schoolDataSource, identifier, workspaceIdentifier, studentIdentifier);
}
public List<WorkspaceAssessmentRequest> listWorkspaceAssessmentRequests(String schoolDataSource, String workspaceIdentifier) {
return gradingSchoolDataController.listWorkspaceAssessmentRequests(schoolDataSource, workspaceIdentifier);
}
public List<WorkspaceAssessmentRequest> listWorkspaceAssessmentRequests(String schoolDataSource, String workspaceIdentifier, String studentIdentifier) {
return gradingSchoolDataController.listWorkspaceAssessmentRequests(schoolDataSource, workspaceIdentifier, studentIdentifier);
}
public List<WorkspaceAssessmentRequest> listStudentAssessmentRequests(SchoolDataIdentifier studentIdentifier) {
return gradingSchoolDataController.listAssessmentRequestsByStudent(studentIdentifier.getDataSource(), studentIdentifier.getIdentifier());
}
public List<CompositeAssessmentRequest> listAssessmentRequestsByWorkspace(SchoolDataIdentifier workspaceIdentifier, List<String> workspaceStudentIdentifiers) {
return gradingSchoolDataController.listCompositeAssessmentRequestsByWorkspace(workspaceIdentifier.getDataSource(), workspaceIdentifier.getIdentifier(), workspaceStudentIdentifiers);
}
public Long countStudentWorkspaceAssessments(SchoolDataIdentifier studentIdentifier, Date fromDate, Date toDate, boolean onlyPassingGrades) {
return gradingSchoolDataController.countStudentWorkspaceAssessments(
studentIdentifier.getDataSource(), studentIdentifier.getIdentifier(), fromDate, toDate, onlyPassingGrades);
}
public List<CompositeAssessmentRequest> listAssessmentRequestsByStaffMember(SchoolDataIdentifier staffMemberIdentifier) {
return gradingSchoolDataController.listCompositeAssessmentRequestsByStaffMember(staffMemberIdentifier.getDataSource(), staffMemberIdentifier.getIdentifier());
}
public WorkspaceAssessment findLatestWorkspaceAssessmentByIdentifier(SchoolDataIdentifier studentIdentifier) {
return gradingSchoolDataController.findLatestWorkspaceAssessmentByStudent(studentIdentifier.getDataSource(), studentIdentifier.getIdentifier());
}
public WorkspaceAssessmentRequest findLatestAssessmentRequestByIdentifier(SchoolDataIdentifier studentIdentifier) {
return gradingSchoolDataController.findLatestAssessmentRequestByStudent(studentIdentifier.getDataSource(), studentIdentifier.getIdentifier());
}
public List<WorkspaceAssessmentRequest> listStudentAssessmentRequestsSince(SchoolDataIdentifier studentIdentifier, Date date) {
List<WorkspaceAssessmentRequest> result = new ArrayList<>();
for (WorkspaceAssessmentRequest workspaceAssessmentRequest : listStudentAssessmentRequests(studentIdentifier)) {
Date workspaceAssessmentRequestDate = workspaceAssessmentRequest.getDate();
if (workspaceAssessmentRequestDate != null && workspaceAssessmentRequest.getDate().after(date)) {
result.add(workspaceAssessmentRequest);
}
}
return result;
}
public WorkspaceAssessmentRequest updateWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceUserIdentifier, String workspaceUserSchoolDataSource,
String workspaceIdentifier, String studentIdentifier, String requestText, Date date, Boolean archived, Boolean handled) {
return gradingSchoolDataController.updateWorkspaceAssessmentRequest(
schoolDataSource,
identifier,
workspaceUserIdentifier,
workspaceUserSchoolDataSource,
workspaceIdentifier,
studentIdentifier,
requestText,
date,
archived,
handled);
}
public void deleteWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceIdentifier, String studentIdentifier) {
gradingSchoolDataController.deleteWorkspaceAssessmentRequest(schoolDataSource, identifier, workspaceIdentifier, studentIdentifier);
}
public List<TransferCredit> listStudentTransferCredits(SchoolDataIdentifier studentIdentifier) {
return gradingSchoolDataController.listStudentTransferCredits(studentIdentifier);
}
}