package fi.otavanopisto.muikku.schooldata; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; import fi.otavanopisto.muikku.dao.base.SchoolDataSourceDAO; import fi.otavanopisto.muikku.model.base.SchoolDataSource; 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.WorkspaceAssessment; import fi.otavanopisto.muikku.schooldata.entity.WorkspaceAssessmentRequest; class GradingSchoolDataController { // TODO: Caching // TODO: Events @Inject private Logger logger; @Inject @Any private Instance<GradingSchoolDataBridge> gradingBridges; @Inject private SchoolDataSourceDAO schoolDataSourceDAO; /* WorkspaceAssessment */ public WorkspaceAssessment createWorkspaceAssessment(String schoolDataSource, String workspaceUserIdentifier, String workspaceUserSchoolDataSource, String workspaceIdentifier, String studentIdentifier, String assessingUserIdentifier, String assessingUserSchoolDataSource, String gradeIdentifier, String gradeSchoolDataSource, String gradingScaleIdentifier, String gradingScaleSchoolDataSource, String verbalAssessment, Date date) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.createWorkspaceAssessment( workspaceUserIdentifier, workspaceUserSchoolDataSource, workspaceIdentifier, studentIdentifier, assessingUserIdentifier, assessingUserSchoolDataSource, gradeIdentifier, gradeSchoolDataSource, gradingScaleIdentifier, gradingScaleSchoolDataSource, verbalAssessment, date); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public WorkspaceAssessment findWorkspaceAssessment(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier, SchoolDataIdentifier workspaceAssesmentIdentifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(workspaceAssesmentIdentifier.getDataSource()); if (schoolDataBridge != null) { return schoolDataBridge.findWorkspaceAssessment(workspaceAssesmentIdentifier.getIdentifier(), workspaceIdentifier.getIdentifier(), studentIdentifier.getIdentifier()); } else { logger.log(Level.SEVERE, String.format("School Data Bridge could not be found for data source: %s", workspaceAssesmentIdentifier.getDataSource())); } return null; } public List<WorkspaceAssessment> listWorkspaceAssessments(String schoolDataSource, String workspaceIdentifier, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); if (dataSource == null) { logger.severe(String.format("Could not find school data source %s", schoolDataSource)); return null; } return listWorkspaceAssessments(dataSource, workspaceIdentifier, studentIdentifier); } public List<WorkspaceAssessment> listWorkspaceAssessments(SchoolDataSource schoolDataSource, String workspaceIdentifier, String studentIdentifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.listWorkspaceAssessments(workspaceIdentifier, studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + schoolDataSource.getIdentifier()); } return null; } public WorkspaceAssessment updateWorkspaceAssessment(String schoolDataSource, String identifier, String workspaceUserIdentifier, String workspaceUserSchoolDataSource, String workspaceIdentifier, String studentIdentifier, String assessingUserIdentifier, String assessingUserSchoolDataSource, String gradeIdentifier, String gradeSchoolDataSource, String gradingScaleIdentifier, String gradingScaleSchoolDataSource, String verbalAssessment, Date date) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.updateWorkspaceAssessment( identifier, workspaceUserIdentifier, workspaceUserSchoolDataSource, workspaceIdentifier, studentIdentifier, assessingUserIdentifier, assessingUserSchoolDataSource, gradeIdentifier, gradeSchoolDataSource, gradingScaleIdentifier, gradingScaleSchoolDataSource, verbalAssessment, date); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public void deleteWorkspaceAssessment(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier studentIdentifier, SchoolDataIdentifier workspaceAssesmentIdentifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(workspaceAssesmentIdentifier.getDataSource()); if (schoolDataBridge != null) { schoolDataBridge.deleteWorkspaceAssessment(workspaceIdentifier, studentIdentifier, workspaceAssesmentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + workspaceAssesmentIdentifier.getDataSource()); } } /* TransferCredits */ public List<TransferCredit> listStudentTransferCredits(SchoolDataIdentifier studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(studentIdentifier.getDataSource()); if (dataSource == null) { logger.severe(String.format("Could not find school data source %s", studentIdentifier.getDataSource())); return Collections.emptyList(); } return listStudentTransferCredits(dataSource, studentIdentifier); } private List<TransferCredit> listStudentTransferCredits(SchoolDataSource schoolDataSource, SchoolDataIdentifier studentIdentifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.listStudentTransferCredits(studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + schoolDataSource.getIdentifier()); } return Collections.emptyList(); } /* CompositeGradingScale */ public List<CompositeGradingScale> listCompositeGradingScales() { List<CompositeGradingScale> result = new ArrayList<>(); for (GradingSchoolDataBridge gradingBridge : getGradingBridges()) { try { result.addAll(gradingBridge.listCompositeGradingScales()); } catch (SchoolDataBridgeInternalException e) { logger.log(Level.SEVERE, "School Data Bridge reported a problem while listing grades", e); } } return result; } /* GradingScales */ // TODO Deprecate after new evaluation public GradingScale findGradingScale(SchoolDataSource schoolDataSource, String identifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.findGradingScale(identifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + schoolDataSource.getIdentifier()); } return null; } // TODO Deprecate after new evaluation public GradingScale findGradingScale(String schoolDataSource, String identifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); if (dataSource != null) { return findGradingScale(dataSource, identifier); } else { logger.log(Level.SEVERE, "School Data Source could not be found by identifier: " + schoolDataSource); } return null; } // TODO Deprecate after new evaluation public List<GradingScale> listGradingScales() { // TODO: This method WILL cause performance problems, replace with something more sensible List<GradingScale> result = new ArrayList<>(); for (GradingSchoolDataBridge gradingBridge : getGradingBridges()) { try { result.addAll(gradingBridge.listGradingScales()); } catch (SchoolDataBridgeInternalException e) { logger.log(Level.SEVERE, "School Data Bridge reported a problem while listing grading scales", e); } } return result; } /* GradingScaleItems */ // TODO Deprecate after new evaluation public GradingScaleItem findGradingScaleItem(SchoolDataSource schoolDataSource, GradingScale gradingScale, String identifier) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.findGradingScaleItem(gradingScale.getIdentifier(), identifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + schoolDataSource.getIdentifier()); } return null; } // TODO Deprecate after new evaluation public GradingScaleItem findGradingScaleItem(String schoolDataSource, GradingScale gradingScale, String identifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); if (dataSource != null) { return findGradingScaleItem(dataSource, gradingScale, identifier); } else { logger.log(Level.SEVERE, "School Data Source could not be found by identifier: " + schoolDataSource); } return null; } // TODO Deprecate after new evaluation public List<GradingScaleItem> listGradingScaleItems(GradingScale gradingScale) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(gradingScale.getSchoolDataSource()); if (schoolDataSource != null) { GradingSchoolDataBridge schoolDataBridge = getGradingBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.listGradingScaleItems(gradingScale.getIdentifier()); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource.getIdentifier()); } } return null; } public WorkspaceAssessmentRequest createWorkspaceAssessmentRequest(String schoolDataSource, String workspaceUserIdentifier, String workspaceUserSchoolDataSource, String workspaceIdentifier, String studentIdentifier, String requestText, Date date) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.createWorkspaceAssessmentRequest( workspaceUserIdentifier, workspaceUserSchoolDataSource, workspaceIdentifier, studentIdentifier, requestText, date); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public WorkspaceAssessmentRequest findWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceIdentifier, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.findWorkspaceAssessmentRequest(identifier, workspaceIdentifier, studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public List<WorkspaceAssessmentRequest> listWorkspaceAssessmentRequests(String schoolDataSource, String workspaceIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.listWorkspaceAssessmentRequests(workspaceIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public List<WorkspaceAssessmentRequest> listWorkspaceAssessmentRequests(String schoolDataSource, String workspaceIdentifier, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.listWorkspaceAssessmentRequests(workspaceIdentifier, studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public WorkspaceAssessmentRequest findLatestAssessmentRequestByStudent(String schoolDataSource, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.findLatestAssessmentRequestByStudent(studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public WorkspaceAssessment findLatestWorkspaceAssessmentByStudent(String schoolDataSource, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.findLatestWorkspaceAssessmentByStudent(studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public List<WorkspaceAssessmentRequest> listAssessmentRequestsByStudent(String schoolDataSource, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.listAssessmentRequestsByStudent(studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public List<CompositeAssessmentRequest> listCompositeAssessmentRequestsByWorkspace(String schoolDataSource, String workspaceIdentifier, List<String> workspaceStudentIdentifiers) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.listCompositeAssessmentRequestsByWorkspace(workspaceIdentifier, workspaceStudentIdentifiers); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public List<CompositeAssessmentRequest> listCompositeAssessmentRequestsByStaffMember(String schoolDataSource, String staffMemberIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.listCompositeAssessmentRequestsByStaffMember(staffMemberIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public WorkspaceAssessmentRequest updateWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceUserIdentifier, String workspaceUserSchoolDataSource, String workspaceIdentifier, String studentIdentifier, String requestText, Date date, Boolean archived, Boolean handled) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.updateWorkspaceAssessmentRequest( identifier, workspaceUserIdentifier, workspaceUserSchoolDataSource, workspaceIdentifier, studentIdentifier, requestText, date, archived, handled); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } public void deleteWorkspaceAssessmentRequest(String schoolDataSource, String identifier, String workspaceIdentifier, String studentIdentifier) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { schoolDataBridge.deleteWorkspaceAssessmentRequest(identifier, workspaceIdentifier, studentIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } } private GradingSchoolDataBridge getGradingBridge(String schoolDataSource) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); if (dataSource == null) { logger.log(Level.SEVERE, String.format("Could not find GradingSchoolDataBridge for data source %s", schoolDataSource)); return null; } return getGradingBridge(dataSource); } private GradingSchoolDataBridge getGradingBridge(SchoolDataSource schoolDataSource) { Iterator<GradingSchoolDataBridge> iterator = gradingBridges.iterator(); while (iterator.hasNext()) { GradingSchoolDataBridge gradingSchoolDataBridge = iterator.next(); if (gradingSchoolDataBridge.getSchoolDataSource().equals(schoolDataSource.getIdentifier())) { return gradingSchoolDataBridge; } } return null; } private List<GradingSchoolDataBridge> getGradingBridges() { List<GradingSchoolDataBridge> result = new ArrayList<>(); Iterator<GradingSchoolDataBridge> iterator = gradingBridges.iterator(); while (iterator.hasNext()) { result.add(iterator.next()); } return Collections.unmodifiableList(result); } public Long countStudentWorkspaceAssessments(String schoolDataSource, String studentIdentifier, Date fromDate, Date toDate, boolean onlyPassingGrades) { SchoolDataSource dataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSource); GradingSchoolDataBridge schoolDataBridge = getGradingBridge(dataSource); if (schoolDataBridge != null) { return schoolDataBridge.countStudentWorkspaceAssessments(studentIdentifier, fromDate, toDate, onlyPassingGrades); } else { logger.log(Level.SEVERE, "School Data Bridge could not be found for data source: " + dataSource.getIdentifier()); } return null; } }