package org.sakaiproject.tool.gradebook.facades.sakai2impl;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sakaiproject.conditions.api.ConditionProvider;
import org.sakaiproject.conditions.api.ConditionService;
import org.sakaiproject.service.gradebook.shared.Assignment;
import org.sakaiproject.service.gradebook.shared.GradebookService;
public class GradebookConditionsProvider implements ConditionProvider {
private Map<String, String> eventLookup = new HashMap<String, String>();
private ConditionService conditionService;
public void setConditionService(ConditionService conditionService) {
this.conditionService = conditionService;
}
private GradebookService gbs;
public void setGradebookService(GradebookService gradebookService) {
this.gbs = gradebookService;
}
public void init() {
eventLookup.put("gradebook.updateItemScore", "org.sakaiproject.conditions.impl.AssignmentGrading");
eventLookup.put("gradebook.updateAssignment", "org.sakaiproject.conditions.impl.AssignmentUpdate");
conditionService.registerConditionProvider(this);
}
public Map<String, String> getEntitiesForContext(String gradebookUid) {
Map<String, String> rv = new HashMap<String, String>();
if (!gbs.isGradebookDefined(gradebookUid)) {
return rv;
}
List<Assignment> assignments = gbs.getAssignments(gradebookUid);
for (Assignment asn : assignments) {
String assignmentName = asn.getName();
String assignmentPoints = asn.getPoints().toString();
boolean isReleasedToStudents = asn.isReleased();
boolean isUsedInGradeCalculation = asn.isCounted();
Date dueDate = asn.getDueDate();
long dueDateMillis = 0;
if (dueDate != null) dueDateMillis = dueDate.getTime();
// event resource of the form: /gradebook/[gradebook id]/[assignment name]/[points possible]/[due date millis]/[is released]/[is included in course grade]/[has authz]
rv.put("/gradebook/"+ gradebookUid + "/" + assignmentName + "/" + assignmentPoints + "/" + dueDateMillis + "/" + isReleasedToStudents + "/" + isUsedInGradeCalculation , assignmentName + " (" + assignmentPoints + " points)");
}
return rv;
}
public String getId() {
return "gradebook";
}
public Map<String, String> getEventToDomainClassMapping() {
return eventLookup;
}
public Map<String, String> getData(String type, String context) {
Map<String, String> rv = new HashMap<String, String>();
if ("grades".equals(type)) {
String[] contextParts = context.split("\\|");
String gradebookId = contextParts[0];
String assignmentName = contextParts[1];
String studentId = contextParts[2];
Long assignmentId = null;
for (Object assignment : gbs.getAssignments(gradebookId)) {
if (((Assignment)assignment).getName().equals(assignmentName)) {
assignmentId = ((Assignment)assignment).getId();
break;
}
}
if (assignmentId != null) {
String score = gbs.getAssignmentScoreString(gradebookId, assignmentId, studentId);
if (score == null) {
score = "";
}
rv.put("score", score);
}
}
return rv;
}
}