Skip to content

Commit

Permalink
SAK-29406 Allow Assignment tool to grade with two decimal points
Browse files Browse the repository at this point in the history
  • Loading branch information
annuelo committed Jun 5, 2015
1 parent aa96379 commit 1edf942
Show file tree
Hide file tree
Showing 15 changed files with 391 additions and 192 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ public class AssignmentConstants {
public final static int NOTE_READ_BY_OTHER = 2;

public final static int NOTE_READ_AND_WRITE_BY_OTHER = 3;

public final static int DEFAULT_SCALED_FACTOR = 10;

public final static int DEFAULT_DECIMAL_POINT = 2;

/**********************************************************************************************************************************************************************************************************************************************************
* EVENT STRINGS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ public interface AssignmentContent extends Entity, AttachmentContainer
* @return int The maximum grade score, or zero if the grade type is not SCORE_GRADE_TYPE(3).
*/
public int getMaxGradePoint();

/**
*
* @return The number of decimal points to store the grade score
*/
public int getFactor();

/**
* Get the maximum grade for grade type = SCORE_GRADE_TYPE(3) Formated to show one decimal place
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ public interface AssignmentContentEdit extends AssignmentContent, AttachmentCont
*/
public void setMaxGradePoint(int maxPoints);

/**
*
* @return The number of decimal points to store the grade score
*/
public void setFactor(int factor);

/**
* Set whether this project can be a group project.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ public interface AssignmentPeerAssessmentService extends ScheduledInvocationComm

public void removeScheduledPeerReview(String assignmentId);

public List<PeerAssessmentItem> getPeerAssessmentItems(String assignmentId, String assessorUserId);
public List<PeerAssessmentItem> getPeerAssessmentItems(String assignmentId, String assessorUserId, Integer scaledFactor);

public PeerAssessmentItem getPeerAssessmentItem(String submissionId, String assessorUserId);

public void savePeerAssessmentItem(PeerAssessmentItem item);

public List<PeerAssessmentItem> getPeerAssessmentItems(String submissionId);
public List<PeerAssessmentItem> getPeerAssessmentItems(String submissionId, Integer scaledFactor);

public List<PeerAssessmentItem> getPeerAssessmentItemsByAssignmentId(String assignmentId);
public List<PeerAssessmentItem> getPeerAssessmentItemsByAssignmentId(String assignmentId, Integer scaledFactor);

public List<PeerAssessmentItem> getPeerAssessmentItems(Collection<String> submissionsIds);
public List<PeerAssessmentItem> getPeerAssessmentItems(Collection<String> submissionsIds, Integer scaledFactor);

/**
* returns true if the score was updated and saved
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -912,4 +912,10 @@ public void removeAssignmentContent(AssignmentContentEdit content) throws Assign
* Params: AssignmentSubmission s
*/
public boolean assignmentUsesAnonymousGrading(Assignment a);

/**
* Get Scale Factor from the property assignment.grading.decimals
* @return
*/
public Integer getScaleFactor();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.io.Serializable;

import org.sakaiproject.assignment.api.AssignmentConstants;

public class PeerAssessmentItem implements Serializable{

private static final long serialVersionUID = -8376570648172966170L;
Expand All @@ -16,6 +18,8 @@ public class PeerAssessmentItem implements Serializable{
private boolean submitted;
//transient variables for displaying information in the UI
private String assessorDisplayName;

private Integer scaledFactor = AssignmentConstants.DEFAULT_SCALED_FACTOR;

public String getSubmissionId() {
return submissionId;
Expand Down Expand Up @@ -53,9 +57,9 @@ public String getAssignmentId() {
public void setAssignmentId(String assignmentId) {
this.assignmentId = assignmentId;
}
//score is stored as a integer value in the DB, but is really a decimal value (divide by 10)
//score is stored as a integer value in the DB, but is really a decimal value (divide by "factor")
public String getScoreDisplay(){
return getScore() == null ? "" : "" + score/10.0;
return getScore() == null ? "" : "" + score/(double)getScaledFactor();
}
//transient variable that is only set for UI
public String getAssessorDisplayName(){
Expand All @@ -65,6 +69,12 @@ public String getAssessorDisplayName(){
public void setAssessorDisplayName(String assessorDisplayName) {
this.assessorDisplayName = assessorDisplayName;
}
public Integer getScaledFactor() {
return scaledFactor;
}
public void setScaledFactor(Integer scaledFactor) {
this.scaledFactor = scaledFactor;
}
public boolean isSubmitted() {
return submitted;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -866,4 +866,13 @@ public static String escapeInvalidCharsEntry(java.lang.String param0) {
return null;
return service.escapeInvalidCharsEntry(param0);
}


public static Integer getScaleFactor() {
org.sakaiproject.assignment.api.AssignmentService service = getInstance();
if (service == null) {
return null;
}
return service.getScaleFactor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ plesuse0 = ''{0}'' is invalid. Please use correct grade string.

plesuse1 = Please use a number for the grade field.

plesuse2 = Please use only one decimal place for the grade field.
plesuse2 = Please use only {0} decimal place(s) for the grade field.

plesuse3 = Please use a positive number or zero for the grade field.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ plesuse0=Utilitzeu la taula de qualificacions correcta.

plesuse1=Utilitzeu un n\u00famero al camp de qualificaci\u00f3.

plesuse2=Utilitzeu \u00fanicament un decimal en la qualificaci\u00f3.
plesuse2=Utilitzeu \u00fanicament {0} decimal(s) en la qualificaci\u00f3.

plesuse3=Utilitzeu un zero o un n\u00famero positiu en la qualificaci\u00f3.

Expand Down Expand Up @@ -661,8 +661,8 @@ uploadall.alert.invalidUserId=Assegureu-vos que els identificadors d'usuari es c
uploadall.alert.noGradeFile=Assegureu-vos que hi ha un fitxer de qualificacions i una estructura de carpetes correcta.
downloadall.alert.choose.element=Escolliu almenys un element a les opcions de desc\u00e0rrega.
uploadall.alert.zipFile=No heu seleccionat un arxiu de tipus zip. Heu de seleccionar un arxiu .zip o .sit com a fitxer a pujar.
uploadall.note=AV\u00CDS: Si desc\u00E0rrega la plantilla en un idioma i despr\u00E9s ho canvia, deixar\u00E0 de funcionar la pujada/baixada d'arxius amb eixa plantilla fins que restaure l'idioma amb qu\u00E8 se la va descarregar (o desc\u00E0rrega i use una nova plantilla amb l'idioma actual).
downloadall.note=AV\u00CDS: Si desc\u00E0rrega la plantilla en un idioma i despr\u00E9s ho canvia, deixar\u00E0 de funcionar la pujada/baixada d'arxius amb eixa plantilla fins que restaure l'idioma amb qu\u00E8 se la va descarregar (o desc\u00E0rrega i use una nova plantilla amb l'idioma actual).
uploadall.note=AV\u00cdS: Si desc\u00e0rrega la plantilla en un idioma i despr\u00e9s ho canvia, deixar\u00e0 de funcionar la pujada/baixada d'arxius amb eixa plantilla fins que restaure l'idioma amb qu\u00e8 se la va descarregar (o desc\u00e0rrega i use una nova plantilla amb l'idioma actual).
downloadall.note=AV\u00cdS: Si desc\u00e0rrega la plantilla en un idioma i despr\u00e9s ho canvia, deixar\u00e0 de funcionar la pujada/baixada d'arxius amb eixa plantilla fins que restaure l'idioma amb qu\u00e8 se la va descarregar (o desc\u00e0rrega i use una nova plantilla amb l'idioma actual).
# SAK-19147 Assignments : Download All - flat file structure
uploadall.folders.yes=Desa les presentacions en carpetes d'usuari separades
uploadall.folders.no=Des totes les opcions de desc\u00e0rrega seleccionades en una sola carpeta (d'aquesta manera NO es podr\u00e0 tornar a pujar a l'eina)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ plesuse0=Por favor, utilice una cadena de calificaci\u00f3n correcta.

plesuse1=Por favor, utilice un n\u00famero en el campo de calificaci\u00f3n.

plesuse2=Por favor, utilice \u00fanicamente un decimal en la calificaci\u00f3n.
plesuse2=Por favor, utilice \u00fanicamente {0} decimal(es) en la calificaci\u00f3n.

plesuse3=Por favor, utilice un cero o un n\u00famero positivo en la calificaci\u00f3n.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public void execute(String opaqueContext){
}
//this could be an update to an existing assessment... just make sure to grab any existing
//review items first
List<PeerAssessmentItem> existingItems = getPeerAssessmentItems(submissionIdMap.keySet());
List<PeerAssessmentItem> existingItems = getPeerAssessmentItems(submissionIdMap.keySet(), assignment.getContent().getFactor());
List<PeerAssessmentItem> removeItems = new ArrayList<PeerAssessmentItem>();
//remove all empty items to start from scratch:
for (Iterator iterator = existingItems.iterator(); iterator
Expand Down Expand Up @@ -262,10 +262,11 @@ private String findLowestAssignedAssessor(Map<String, Map<String, PeerAssessment
return lowestAssignedAssessor;
}

public List<PeerAssessmentItem> getPeerAssessmentItems(final Collection<String> submissionsIds){
public List<PeerAssessmentItem> getPeerAssessmentItems(final Collection<String> submissionsIds, Integer scaledFactor){
List<PeerAssessmentItem> listPeerAssessmentItem = new ArrayList<>();
if(submissionsIds == null || submissionsIds.size() == 0){
//return an empty list
return new ArrayList<PeerAssessmentItem>();
return listPeerAssessmentItem;
}
HibernateCallback hcb = new HibernateCallback()
{
Expand All @@ -277,14 +278,21 @@ public Object doInHibernate(Session session) throws HibernateException,
return q.list();
}
};

listPeerAssessmentItem = (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

return (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);
for (PeerAssessmentItem item : listPeerAssessmentItem) {
item.setScaledFactor(scaledFactor);
}

return listPeerAssessmentItem;
}

public List<PeerAssessmentItem> getPeerAssessmentItems(final String assignmentId, final String assessorUserId){
public List<PeerAssessmentItem> getPeerAssessmentItems(final String assignmentId, final String assessorUserId, Integer scaledFactor){
List<PeerAssessmentItem> listPeerAssessmentItem = new ArrayList<>();
if(assignmentId == null || assessorUserId == null){
//return an empty list
return new ArrayList<PeerAssessmentItem>();
return listPeerAssessmentItem;
}
HibernateCallback hcb = new HibernateCallback()
{
Expand All @@ -297,14 +305,21 @@ public Object doInHibernate(Session session) throws HibernateException,
return q.list();
}
};

return (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

listPeerAssessmentItem = (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

for (PeerAssessmentItem item : listPeerAssessmentItem) {
item.setScaledFactor(scaledFactor);
}

return listPeerAssessmentItem;
}

public List<PeerAssessmentItem> getPeerAssessmentItems(final String submissionId){
public List<PeerAssessmentItem> getPeerAssessmentItems(final String submissionId, Integer scaledFactor){
List<PeerAssessmentItem> listPeerAssessmentItem = new ArrayList<>();
if(submissionId == null || "".equals(submissionId)){
//return an empty list
return new ArrayList<PeerAssessmentItem>();
return listPeerAssessmentItem;
}
HibernateCallback hcb = new HibernateCallback()
{
Expand All @@ -316,14 +331,21 @@ public Object doInHibernate(Session session) throws HibernateException,
return q.list();
}
};

return (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

listPeerAssessmentItem = (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

for (PeerAssessmentItem item : listPeerAssessmentItem) {
item.setScaledFactor(scaledFactor);
}

return listPeerAssessmentItem;
}

public List<PeerAssessmentItem> getPeerAssessmentItemsByAssignmentId(final String assignmentId){
public List<PeerAssessmentItem> getPeerAssessmentItemsByAssignmentId(final String assignmentId, Integer scaledFactor){
List<PeerAssessmentItem> listPeerAssessmentItem = new ArrayList<>();
if(assignmentId == null || "".equals(assignmentId)){
//return an empty list
return new ArrayList<PeerAssessmentItem>();
return listPeerAssessmentItem;
}
HibernateCallback hcb = new HibernateCallback()
{
Expand All @@ -335,8 +357,14 @@ public Object doInHibernate(Session session) throws HibernateException,
return q.list();
}
};

listPeerAssessmentItem = (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);

return (List<PeerAssessmentItem>) getHibernateTemplate().execute(hcb);
for (PeerAssessmentItem item : listPeerAssessmentItem) {
item.setScaledFactor(scaledFactor);
}

return listPeerAssessmentItem;
}

public PeerAssessmentItem getPeerAssessmentItem(final String submissionId, final String assessorUserId){
Expand Down Expand Up @@ -395,7 +423,7 @@ public SecurityAdvice isAllowed(String userId, String function, String reference
if(submission != null &&
(submission.getGraded() == false || submission.getGradedBy() == null || "".equals(submission.getGradedBy().trim())
|| AssignmentPeerAssessmentService.class.getName().equals(submission.getGradedBy().trim()))){
List<PeerAssessmentItem> items = getPeerAssessmentItems(submissionId);
List<PeerAssessmentItem> items = getPeerAssessmentItems(submissionId, submission.getAssignment().getContent().getFactor());
if(items != null){
//scores are stored w/o decimal points, so a score of 3.4 is stored as 34 in the DB
//add all the scores together and divide it by the number of scores added. Then round.
Expand Down
Loading

0 comments on commit 1edf942

Please sign in to comment.