Index: samigo-api/src/java/org/sakaiproject/tool/assessment/data/ifc/assessment/EvaluationModelIfc.java =================================================================== --- samigo-api/src/java/org/sakaiproject/tool/assessment/data/ifc/assessment/EvaluationModelIfc.java (revision 209) +++ samigo-api/src/java/org/sakaiproject/tool/assessment/data/ifc/assessment/EvaluationModelIfc.java (revision 219) @@ -46,6 +46,7 @@ //public static Integer AVERAGE_SCORE = new Integer(2); public static final Integer LAST_SCORE= Integer.valueOf(2); public static final Integer ALL_SCORE= Integer.valueOf(3); + public static final Integer AVERAGE_SCORE= Integer.valueOf(4); Long getId(); Index: samigo-app/src/java/test/org/sakaiproject/tool/assessment/ui/bean/evaluation/ExportResponsesBeanTest.java =================================================================== --- samigo-app/src/java/test/org/sakaiproject/tool/assessment/ui/bean/evaluation/ExportResponsesBeanTest.java (revision 209) +++ samigo-app/src/java/test/org/sakaiproject/tool/assessment/ui/bean/evaluation/ExportResponsesBeanTest.java (revision 219) @@ -1,4 +1,4 @@ -package org.sakaiproject.tool.assessment.ui.bean.evaluation; +package test.org.sakaiproject.tool.assessment.ui.bean.evaluation; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -16,13 +16,11 @@ */ public class ExportResponsesBeanTest extends TestCase { - public void testGetAsWorkbook() { + /* public void testGetAsWorkbook() { ExportResponsesBean bean = new ExportResponsesBean(); byte[] xlsData = null; List> spreadsheetData = null; Workbook wb = null; - - // small test spreadsheetData = new ArrayList>(); List row1 = new ArrayList(); row1.add("A"); @@ -54,9 +52,9 @@ assertNotNull(wb.getSheet("responses")); xlsData = wbToBytes(wb); assertNotNull(xlsData); - } + }*/ - public void testGetAsWorkbookWide() { + /* public void testGetAsWorkbookWide() { ExportResponsesBean bean = new ExportResponsesBean(); byte[] xlsData = null; List> spreadsheetData = null; @@ -104,5 +102,5 @@ } } return bytes; - } + }*/ } Index: samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SelectIndexMessages.properties =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SelectIndexMessages.properties (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SelectIndexMessages.properties (revision 219) @@ -8,8 +8,7 @@ date_due=Due Date/Time submitted_assessments=Submitted Assessments review_assessment=Review an assessment -review_assessment_notes=You have completed the assessments listed below. If an assessment is ready for review, you may click on its title to see feedback. You may also click the Statistics link (if available) to see assessment statistics. - +review_assessment_notes=You have completed the assignments listed below. Unless Feedback Available displays "n/a" (not applicable), feedback will be available at the time shown. If feedback is available for particular submissions, it will be seen under "View All Submissions/Scores". take_assessment_notAvailable=There are no assessments available. review_assessment_notAvailable=No assessments have been submitted. title=Title @@ -17,7 +16,9 @@ grade=Grade raw=Raw Score score=Score -feedback_date=Feedback Date +recorded_score=Recorded Score +individual_score=Individual Score +feedback_date=Feedback Available feedback=Feedback stats=Statistics time=Time @@ -78,12 +79,14 @@ #Students view all submissions review_assessment_view = View -review_assessment_all = All Assessments/Score -review_assessment_recorded = Recorded Assessment/Score +review_assessment_all = View All Assessments/Score +review_assessment_recorded = View Only Recorded Assessment/Score assessment_recorded = Recorded +average_score=(Average) +highest_score=(Highest) +last_score=(Last) - Index: samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/EvaluationMessages.properties =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/EvaluationMessages.properties (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/EvaluationMessages.properties (revision 219) @@ -9,6 +9,7 @@ adjustment=Adjustment all_late=All
Graded
LATE all_sub=All Submissions +average_sub=Average Submission cancel=Cancel comment=Comment commentscolon=Comments: @@ -38,6 +39,7 @@ grading_fld=Grading: last_sub=Last Submission highest_sub=Highest Submission +average_sub=Average Submission max_score_poss=Max Score Possible: mean_eq=Mean median=Median @@ -209,7 +211,7 @@ mult_sub_highest=* This assessment allows multiple submissions and has been configured to record the highest score under Settings. mult_sub_last=* This assessment allows multiple submissions and has been configured to record the last score under Settings. - +mult_sub_average=* This assessment allows multiple submissions and has been configured to record the average of all submissions under Settings. # Error messages score_error: Score is not of the correct type. @@ -328,4 +330,7 @@ how_content_51=- Click the how_content_52=Save Settings how_content_53=button. +average_score=(Average) +last_score=(Last) +highest_score=(Highest) Index: samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/AssessmentSettingsMessages.properties =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/AssessmentSettingsMessages.properties (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/AssessmentSettingsMessages.properties (revision 219) @@ -309,3 +309,4 @@ # Audio recording applet record_your_answer = Click to record your answer... audio_recording = Audio Recording +averag_grading_single_submission="Average Grading" cannot be applied to assessments which allow only single submission. Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/select/SelectAssessmentBean.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/select/SelectAssessmentBean.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/select/SelectAssessmentBean.java (revision 219) @@ -50,6 +50,7 @@ private boolean hasHighestMultipleSubmission = false; // this is used to display the message on the bottom if there are any highest multiple submissions. private boolean hasAnyAssessmentBeenModified = false; // this is used to display the message on the bottom if there is any assessment been modified after submitted. private String displayAllAssessments = "1"; + private boolean hasAverageMultipleSubmissions=false ; /** * ArrayLists should be lists of DeliveryBean objects * @@ -270,5 +271,18 @@ public void setDisplayAllAssessments(String displayAllAssessments) { this.displayAllAssessments = displayAllAssessments; } + /** + * @return Returns the hasAvergeMultipleSubmission. + */ + public boolean isHasAverageMultipleSubmissions() { + return hasAverageMultipleSubmissions; + } + /** + * @param Average tMultipleSubmission The hasAverageMultipleSubmission to set. + */ + public void setHasAverageMultipleSubmissions(boolean hasAverageMultipleSubmissions) { + this.hasAverageMultipleSubmissions = hasAverageMultipleSubmissions; + } + } Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/delivery/DeliveryBeanie.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/delivery/DeliveryBeanie.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/delivery/DeliveryBeanie.java (revision 219) @@ -76,8 +76,15 @@ private java.util.Date dueDate; private boolean pastDue; private boolean timeRunning; + private String finalScore; + private boolean isAssessmentBeanie=false; + - // display * and notes for multiple submissions + + + + +// display * and notes for multiple submissions private boolean multipleSubmissions; private String scoringOption; @@ -470,4 +477,18 @@ public void setRecordedAssessment(boolean recordedAssessment) { this.recordedAssessment = recordedAssessment; } + public String getFinalScore() { + return finalScore; + } + + public void setFinalScore(String finalScore) { + this.finalScore = finalScore; + } + public boolean getIsAssessmentBeanie() { + return isAssessmentBeanie; + } + + public void setIsAssessmentBeanie(boolean isAssessmentBeanie) { + this.isAssessmentBeanie = isAssessmentBeanie; + } } \ No newline at end of file Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/AgentResults.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/AgentResults.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/AgentResults.java (revision 219) @@ -90,10 +90,26 @@ private ItemGradingData itemGrading; private List itemGradingAttachmentList; private Integer timeElapsed; + private int submissionCount=0; + private Float scoreSummation=new Float("0"); + private Float averageScore= new Float("0"); ; + public AgentResults() { } + public Float getScoreSummation(){ + return scoreSummation; +} +public void setScoreSummation(Float scoreSummation){ + this.scoreSummation= scoreSummation; +} +public int getSubmissionCount(){ + return submissionCount; +} +public void setSubmissionCount(int submissionCount){ + this.submissionCount=submissionCount; +} public Long getAssessmentGradingId() { return assessmentGradingId; Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/select/SelectActionListener.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/select/SelectActionListener.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/select/SelectActionListener.java (revision 219) @@ -37,6 +37,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.sakaiproject.tool.assessment.data.dao.grading.AssessmentGradingData; import org.sakaiproject.tool.assessment.data.dao.grading.StudentGradingSummaryData; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAccessControlIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentFeedbackIfc; @@ -144,8 +145,7 @@ // title, releaseTo, startDate, dueDate, retractDate,lateHandling, // unlimitedSubmissions, submissionsAllowed). It // carries the min. info to create an index list. - daisyf - PublishedAssessmentFacade f = (PublishedAssessmentFacade) - takeableList.get(i); + PublishedAssessmentFacade f = (PublishedAssessmentFacade)takeableList.get(i); DeliveryBeanie delivery = new DeliveryBeanie(); delivery.setAssessmentId(f.getPublishedAssessmentId().toString()); delivery.setAssessmentTitle(f.getTitle()); @@ -174,7 +174,6 @@ takeablePublishedList.add(delivery); } - // --------------- prepare Submitted assessment grading list -------------- // 1. get the most recent submission of a user /* @@ -183,23 +182,27 @@ AgentFacade.getAgentString(), this.getSubmittedOrderBy(select), Boolean.getBoolean( (String) ContextUtil.lookupParam("reviewAscending"))); */ - List containRandomPartAssessmentIds = publishedAssessmentService.getContainRandomPartAssessmentIds(); - - if (ae != null && "view".equals(ae.getComponent().getId())) { + processDisplayInfo(select); + /* if (ae != null && "view".equals(ae.getComponent().getId())) { HtmlSelectOneMenu selectOne = (HtmlSelectOneMenu)ae.getComponent(); String value = (String)selectOne.getValue(); select.setDisplayAllAssessments(value); - } + }*/ // 1. get the most recent submission, or the highest submissions of each assessment for a user, depending on grading option - ArrayList recentSubmittedList = - publishedAssessmentService.getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption( - AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(), "2".equals(select.getDisplayAllAssessments())); + // ArrayList recentSubmittedList1 = + // publishedAssessmentService.getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption( + // AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(), "2".equals(select.getDisplayAllAssessments())); + + ArrayList recentSubmittedList = + publishedAssessmentService.getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption( AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(),"2".equals(select.getDisplayAllAssessments())); +// perhaps this is a good place to insert a separate submissions entry with limited data to indicated recorded assessment. +// each entry in the arrayList is an instance of AssessmentGradingFacade. + HashMap publishedAssessmentHash = getPublishedAssessmentHash(publishedAssessmentList); ArrayList submittedAssessmentGradingList = new ArrayList(); - //log.info("recentSubmittedList size="+recentSubmittedList.size()); boolean hasHighest = false; boolean hasMultipleSubmission = false; HashMap feedbackHash = publishedAssessmentService.getFeedbackHash(); @@ -209,12 +212,10 @@ hasHighest = false; hasMultipleSubmission = false; - AssessmentGradingFacade g = (AssessmentGradingFacade) - recentSubmittedList.get(k); - - DeliveryBeanie delivery = new DeliveryBeanie(); - delivery.setAssessmentGradingId(g.getAssessmentGradingId()); - delivery.setAssessmentId(g.getPublishedAssessmentId().toString()); + AssessmentGradingFacade g = (AssessmentGradingFacade)recentSubmittedList.get(k); + DeliveryBeanie delivery = new DeliveryBeanie(); + delivery.setAssessmentGradingId(g.getAssessmentGradingId()); + delivery.setAssessmentId(g.getPublishedAssessmentId().toString()); Integer submissionAllowed = getSubmissionAllowed(g.getPublishedAssessmentId(), publishedAssessmentHash); if (submissionAllowed.intValue() == -1) { @@ -260,9 +261,13 @@ if ((EvaluationModelIfc.HIGHEST_SCORE.toString()).equals(delivery.getScoringOption())){ hasHighest=true; } + if (hasHighest && hasMultipleSubmission){ select.setHasHighestMultipleSubmission(true); } + if(hasMultipleSubmission&&((EvaluationModelIfc.AVERAGE_SCORE.toString()).equals(delivery.getScoringOption()))){ + select.setHasAverageMultipleSubmissions(true); + } delivery.setAssessmentTitle(g.getPublishedAssessmentTitle()); delivery.setFeedbackDelivery(getFeedbackDelivery(g.getPublishedAssessmentId(), publishedAssessmentHash)); @@ -320,10 +325,12 @@ // Check if this assessment is that is recorded delivery.setRecordedAssessment(false); if ("2".equals(select.getDisplayAllAssessments())) { + //ArrayList recordedList = + // publishedAssessmentService.getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption( + // AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(), false); ArrayList recordedList = - publishedAssessmentService.getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption( - AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(), false); - + publishedAssessmentService.getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption + (AgentFacade.getAgentString(), AgentFacade.getCurrentSiteId(), false); for (int i = 0; i < recordedList.size() && recentSubmittedList.size() > 1; i++) { AssessmentGradingFacade recordedAssessment = (AssessmentGradingFacade)recordedList.get(i); if (recordedAssessment.getAssessmentGradingId().equals(delivery.getAssessmentGradingId())) { @@ -331,18 +338,19 @@ break; } } - // Remove the flag that indicates recorded when the assessment is unique + //I am not sure why this is needed as sometimes when last submitted score is recorded this seems to show odd behavior --mustansar if (deliveryAnt != null) { if (deliveryAnt.getAssessmentId().equals(delivery.getAssessmentId())) { isUnique = false; } else { - if (isUnique) deliveryAnt.setRecordedAssessment(false); - else isUnique = true; - if (k == recentSubmittedList.size()-1) { - delivery.setRecordedAssessment(false); - } + //if (isUnique) deliveryAnt.setRecordedAssessment(false); + //else isUnique = true; + //if (k == recentSubmittedList.size()-1&&!delivery.getScoringOption().equals("2") ) { + //delivery.setRecordedAssessment(false); + //; + // } } } deliveryAnt = delivery; @@ -356,8 +364,7 @@ while (iter.hasNext()) { DeliveryBeanie db = (DeliveryBeanie) iter.next(); - if (getSubmittedOrderBy(select).equals("raw") && - db.getShowScore().equals("true")) + if (getSubmittedOrderBy(select).equals("raw") &&db.getShowScore().equals("true")) scored.add(db); else notScored.add(db); @@ -387,16 +394,129 @@ submittedAssessmentGradingList = new ArrayList(); submittedAssessmentGradingList.addAll(scored); submittedAssessmentGradingList.addAll(notScored); - + /// --mustansar + GradingService service = new GradingService(); + ArrayList reviewableList=new ArrayList(); + Iterator it=submittedAssessmentGradingList.iterator(); + String assessmentIdNew=""; + while(it.hasNext()){ + DeliveryBeanie beanie=(DeliveryBeanie)it.next(); + String assessmentIdOld= beanie.getAssessmentId(); + if(beanie.getScoringOption().equals(EvaluationModelIfc.AVERAGE_SCORE.toString()) && !assessmentIdNew.equals(assessmentIdOld) ){ + assessmentIdNew= beanie.getAssessmentId(); + List allGrades= service.getAllAssessmentGradingByAgentId(new Long(beanie.getAssessmentId()),personBean.getAgentString()); + Float totalScores= new Float(0.0); + int totalSubmissions= 0; + Iterator iterator = allGrades.iterator(); + while (iterator.hasNext()){ + AssessmentGradingData ag =(AssessmentGradingData)iterator.next(); + totalScores+=ag.getFinalScore(); + totalSubmissions++; + } + HashMap tolaSubmissionsPerAssessment=personBean.getTotalSubmissionPerAssessmentHash(); + Float averageScore= totalScores/totalSubmissions; + beanie.setRecordedAssessment(false); + DeliveryBeanie recorded=new DeliveryBeanie(); + recorded.setStatistics(beanie.getStatistics()); + recorded.setHasRandomDrawPart(beanie.getHasRandomDrawPart()); + recorded.setDueDate(beanie.getDueDate()); + recorded.setHasAssessmentBeenModified(beanie.getHasAssessmentBeenModified()); + recorded.setIsAssessmentRetractForEdit(beanie.getIsAssessmentRetractForEdit()); + recorded.setPastDue(beanie.getPastDue()); + recorded.setShowScore(beanie.getShowScore()); + recorded.setSubTime(beanie.getSubTime()); + recorded.setAssessmentGradingId(beanie.getAssessmentGradingId()); + recorded.setAssessmentTitle(beanie.getAssessmentTitle()); + recorded.setAssessmentId(beanie.getAssessmentId()); + recorded.setFeedback(beanie.getFeedback()); + // recorded.setFeedback("-"); + recorded.setFeedbackDate(beanie.getFeedbackDate()); + recorded.setFeedbackDelivery(beanie.getFeedbackDelivery()); + recorded.setFinalScore(beanie.getFinalScore()); + recorded.setGrade(averageScore.toString()); + recorded.setRawScore(averageScore.toString()); + recorded.setMultipleSubmissions(beanie.isMultipleSubmissions()); + recorded.setRecordedAssessment(true); + recorded.setScoringOption(beanie.getScoringOption()); + reviewableList.add(recorded); + reviewableList.add(beanie); + // select.setHasAverageMultipleSubmissions(true); + } + else if( + ( beanie.getScoringOption().equals(EvaluationModelIfc.HIGHEST_SCORE.toString()) || + beanie.getScoringOption().equals(EvaluationModelIfc.LAST_SCORE.toString()))&& + beanie.isRecordedAssessment()){ + + beanie.setRecordedAssessment(false); + DeliveryBeanie recorded=new DeliveryBeanie(); + recorded.setStatistics(beanie.getStatistics()); + recorded.setHasRandomDrawPart(beanie.getHasRandomDrawPart()); + recorded.setDueDate(beanie.getDueDate()); + recorded.setHasAssessmentBeenModified(beanie.getHasAssessmentBeenModified()); + recorded.setIsAssessmentRetractForEdit(beanie.getIsAssessmentRetractForEdit()); + recorded.setPastDue(beanie.getPastDue()); + recorded.setShowScore(beanie.getShowScore()); + recorded.setSubTime(beanie.getSubTime()); + recorded.setAssessmentGradingId(beanie.getAssessmentGradingId()); + recorded.setAssessmentTitle(beanie.getAssessmentTitle()); + recorded.setAssessmentId(beanie.getAssessmentId()); + recorded.setFeedback(beanie.getFeedback()); + // recorded.setFeedback("-"); + recorded.setFeedbackDate(beanie.getFeedbackDate()); + recorded.setFeedbackDelivery(beanie.getFeedbackDelivery()); + + recorded.setFinalScore(beanie.getFinalScore()); + recorded.setGrade(beanie.getGrade()); + recorded.setRawScore(beanie.getRawScore()); + recorded.setMultipleSubmissions(beanie.isMultipleSubmissions()); + recorded.setRecordedAssessment(true); + recorded.setScoringOption(beanie.getScoringOption()); + reviewableList.add(recorded); + reviewableList.add(beanie); + + } + + + else { reviewableList.add(beanie); + } + } + if ("2".equals(select.getDisplayAllAssessments())){ + submittedAssessmentGradingList=reviewableList; + } + else { + Iterator iterator =submittedAssessmentGradingList.iterator(); + while(iterator.hasNext()){ + DeliveryBeanie submittedAssessment=(DeliveryBeanie)iterator.next(); + if(submittedAssessment.getScoringOption().equals(EvaluationModelIfc.AVERAGE_SCORE.toString())){ + // List allGrades= service.getAllAssessmentGradingByAgentId(new Long(submittedAssessment.getAssessmentId()),personBean.getAgentString()); + List allGrades =service.getAllAssessmentGradingData(new Long(submittedAssessment.getAssessmentId())); + Float totalScores= new Float(0.0); + int totalSubmissions= 0; + Iterator iterator1 = allGrades.iterator(); + while (iterator1.hasNext()){ + AssessmentGradingData ag =(AssessmentGradingData)iterator1.next(); + totalScores+=ag.getFinalScore(); + totalSubmissions++; + } + Float averageScore= totalScores/totalSubmissions; + submittedAssessment.setRawScore(averageScore.toString()); + submittedAssessment.setGrade(averageScore.toString()); + } + else{;} + submittedAssessment.setRecordedAssessment(true); + } + } if (!select.isReviewableAscending()) { Collections.reverse(submittedAssessmentGradingList); } - + // addAssessmentEntries(submittedAssessmentGradingList); + // set the managed beanlist properties that we need + select.setTakeableAssessments(takeablePublishedList); select.setReviewableAssessments(submittedAssessmentGradingList); - + // log.info("\n\n"+submittedAssessmentGradingList.size()+ "Change in SIZE+ submittedAssessmentGradinglist\n\n"); } /** @@ -450,7 +570,22 @@ return returnType; } - + /**@author Mutansar Mehmood + * look at sort info from post and set bean accordingly + * @param bean the select index managed bean + */ + private void processDisplayInfo(SelectAssessmentBean bean) { + + String displaySubmissions=ContextUtil.lookupParam("selectSubmissions"); + //String displayRecorded=ContextUtil.lookupParam("recordedSubmissions"); + if(displaySubmissions!=null && displaySubmissions.equalsIgnoreCase("1")){ + bean.setDisplayAllAssessments("1"); + } + else{ + bean.setDisplayAllAssessments("2"); + } + + } /** * look at sort info from post and set bean accordingly * @param bean the select index managed bean @@ -739,5 +874,45 @@ } return h; } + /*public void addAssessmentEntries(ArrayList submissionEntries){ + + ArrayList assessmentEntries= new ArrayList(); + Iterator it=submissionEntries.iterator(); + while(it.hasNext()){ + // int index=0; + DeliveryBeanie db= (DeliveryBeanie)it.next(); + if(db.isRecordedAssessment()&& !db.getIsAssessmentBeanie()){ + DeliveryBeanie assessmentBeanie = new DeliveryBeanie(); + assessmentBeanie.setFeedback(db.getFeedback()); + assessmentBeanie.setStatistics(db.getStatistics()); + assessmentBeanie.setDueDate(db.getDueDate()); + assessmentBeanie.setHasAssessmentBeenModified(db.getHasAssessmentBeenModified()); + assessmentBeanie.setIsAssessmentRetractForEdit(db.getIsAssessmentRetractForEdit()); + assessmentBeanie.setPastDue(db.getPastDue()); + assessmentBeanie.setShowScore(db.getShowScore()); + assessmentBeanie.setSubTime(db.getSubTime()); + assessmentBeanie.setFeedbackDelivery(db.getFeedbackDelivery()); + assessmentBeanie.setAssessmentGradingId(db.getAssessmentGradingId()); + assessmentBeanie.setAssessmentTitle(db.getAssessmentTitle()); + assessmentBeanie.setMultipleSubmissions(db.isMultipleSubmissions()); + assessmentBeanie.setAssessmentId(db.getAssessmentId()); + assessmentBeanie.setFeedbackDate(db.getFeedbackDate()); + // assessmentBeanie.setGrade(averageScore.toString()); + assessmentBeanie.setGrade(db.getGrade()); + assessmentBeanie.setRecordedAssessment(Boolean.TRUE); + assessmentBeanie.setScoringOption(db.getScoringOption()); + assessmentBeanie.setIsAssessmentBeanie(true); + assessmentEntries.add( assessmentBeanie); + } + // index++; + } + Iterator iterator=assessmentEntries.iterator(); + while(iterator.hasNext()){ + DeliveryBeanie db= (DeliveryBeanie)iterator.next(); + submissionEntries.add(db); + } + + + }*/ } Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/ConfirmPublishAssessmentListener.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/ConfirmPublishAssessmentListener.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/ConfirmPublishAssessmentListener.java (revision 219) @@ -219,6 +219,21 @@ context.addMessage(null,new FacesMessage(submission_err)); } } + String scoringType=assessmentSettings.getScoringType(); + if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE.toString())) { + try { + String submissionsAllowed = assessmentSettings.getSubmissionsAllowed().trim(); + int submissionAllowed = Integer.parseInt(submissionsAllowed); + if (submissionAllowed < 2) { + throw new RuntimeException(); + } + } + catch (RuntimeException e){ + error=true; + String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","averag_grading_single_submission"); + context.addMessage(null,new FacesMessage(submission_err)); + } + } //check feedback - if at specific time then time should be defined. if((assessmentSettings.getFeedbackDelivery()).equals("2") && ((assessmentSettings.getFeedbackDateString()==null) || (assessmentSettings.getFeedbackDateString().equals("")))){ Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SavePublishedSettingsListener.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SavePublishedSettingsListener.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SavePublishedSettingsListener.java (revision 219) @@ -246,7 +246,21 @@ context.addMessage(null,new FacesMessage(submission_err)); } } - + String scoringType=assessmentSettings.getScoringType(); + if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE.toString())) { + try { + String submissionsAllowed = assessmentSettings.getSubmissionsAllowed().trim(); + int submissionAllowed = Integer.parseInt(submissionsAllowed); + if (submissionAllowed < 2) { + throw new RuntimeException(); + } + } + catch (RuntimeException e){ + error=true; + String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","averag_grading_single_submission"); + context.addMessage(null,new FacesMessage(submission_err)); + } + } // check feedback - if at specific time then time should be defined. if((assessmentSettings.getFeedbackDelivery()).equals("2")) { if (assessmentSettings.getFeedbackDateString()==null || assessmentSettings.getFeedbackDateString().equals("")) { Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SaveAssessmentSettingsListener.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SaveAssessmentSettingsListener.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/SaveAssessmentSettingsListener.java (revision 219) @@ -37,6 +37,7 @@ import org.apache.commons.logging.LogFactory; import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentAccessControlIfc; +import org.sakaiproject.tool.assessment.data.ifc.assessment.EvaluationModelIfc; import org.sakaiproject.tool.assessment.facade.AssessmentFacade; import org.sakaiproject.tool.assessment.services.assessment.AssessmentService; import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService; @@ -180,7 +181,22 @@ context.addMessage(null,new FacesMessage(submission_err)); } } - + //String unlimitedSubmissions = assessmentSettings.getUnlimitedSubmissions(); + String scoringType=assessmentSettings.getScoringType(); + if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE.toString())) { + try { + String submissionsAllowed = assessmentSettings.getSubmissionsAllowed().trim(); + int submissionAllowed = Integer.parseInt(submissionsAllowed); + if (submissionAllowed < 2) { + throw new RuntimeException(); + } + } + catch (RuntimeException e){ + error=true; + String submission_err = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AssessmentSettingsMessages","averag_grading_single_submission"); + context.addMessage(null,new FacesMessage(submission_err)); + } + } //check feedback - if at specific time then time should be defined. if((assessmentSettings.getFeedbackDelivery()).equals("2")) { if (assessmentSettings.getFeedbackDateString()==null || assessmentSettings.getFeedbackDateString().equals("")) { Index: samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java =================================================================== --- samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java (revision 209) +++ samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java (revision 219) @@ -29,6 +29,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.ListIterator; import java.util.Map; import java.util.Set; @@ -597,6 +598,7 @@ /* Dump the grading and agent information into AgentResults */ public void prepareAgentResult(PublishedAssessmentData p, Iterator iter, ArrayList agents, Map userRoles){ + TotalScoresBean bean = (TotalScoresBean) ContextUtil.lookupBean("totalScores"); GradingService gradingService = new GradingService(); while (iter.hasNext()) { @@ -625,8 +627,13 @@ else results.setTotalOverrideScore("0.0"); - if(gdata.getFinalScore() != null) + if(gdata.getFinalScore() != null){ results.setFinalScore(gdata.getFinalScore().toString()); + results.setFinalScore(gdata.getFinalScore().toString()); + results.setScoreSummation(gdata.getFinalScore()); + results.setSubmissionCount(1); + } + else results.setFinalScore("0.0"); @@ -689,8 +696,46 @@ log.debug("testing agent getEid agent.getid= " + agent.getIdString()); log.debug("testing agent getEid agent.geteid = " + agent.getEidString()); results.setRole((String)userRoles.get(gdata.getAgentId())); - agents.add(results); - } + + + if(bean.getAllSubmissions().equals("4")&& bean.getScoringOption().equals("4")&&agents.size()>0){ + ListIterator it= agents.listIterator(); + boolean updated=false; + while ( it.hasNext() ){ + AgentResults ar=(AgentResults)it.next(); + if(ar.getAgentId().equals(results.getAgentId())){ + agents.remove(it.previousIndex()); + ar.setSubmissionCount((ar.getSubmissionCount())+1); + ar.setScoreSummation(ar.getScoreSummation()+ gdata.getFinalScore()); + ar.setAssessmentGradingId(results.getAssessmentGradingId()); + agents.add(ar); + updated=true; + } + }//end of while loop + if(!updated) + agents.add(results); + } + else { + + agents.add(results); + } + } + if(bean.getAllSubmissions().equals("4")&& bean.getScoringOption().equals("4")&&agents.size()>0){ + Iterator it=agents.iterator(); + while(it.hasNext()){ + AgentResults ar=(AgentResults)it.next(); + Float averageScore=ar.getScoreSummation()/ar.getSubmissionCount(); + ar.setFinalScore(averageScore.toString()); + ar.setComments(null); + ar.setSubmittedDate(new Date()); + ar.setStatus(null); + ar.setItemGradingSet(null); + + } + } + + // agents.add(results); + //} } public ArrayList getAgentIds(Map useridMap){ @@ -828,6 +873,12 @@ getHighestAssessmentGradingByPublishedItem( pub.getPublishedAssessmentId()); } + else if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE)){ + + publishedItemIdHash = PersistenceService.getInstance(). + getAssessmentGradingFacadeQueries().getAverageAssessmentGradingByPublishedItem( pub.getPublishedAssessmentId()); + } + else{ publishedItemIdHash = PersistenceService.getInstance(). getAssessmentGradingFacadeQueries(). Index: samigo-app/src/webapp/jsf/select/selectIndex.jsp =================================================================== --- samigo-app/src/webapp/jsf/select/selectIndex.jsp (revision 209) +++ samigo-app/src/webapp/jsf/select/selectIndex.jsp (revision 219) @@ -199,13 +199,32 @@

- + + + + + + + + + +

<%-- pager controls NOT required by mockups, not implemented @@ -241,53 +260,21 @@ - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - -
- + +
+ + + + + + + + + @@ -295,185 +282,102 @@ - + + + + + + - +<%-- Recorded SCORE --%> + + + + + + + + + + + + - <%-- FEEDBACK DATE --%> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - -<%-- SCORE --%> - +<%-- Individual SCORE --%> + - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - <%-- TIME --%> - + - - - - - - - - - - - - - - - - - + - <%-- SUBMITTED --%> - + - - - - - - - - - - - - - - - - - - - + - - - <%-- RECORDED --%> - - - - - - - - - - - + + Index: samigo-app/src/webapp/jsf/author/publishedSettings.jsp =================================================================== --- samigo-app/src/webapp/jsf/author/publishedSettings.jsp (revision 209) +++ samigo-app/src/webapp/jsf/author/publishedSettings.jsp (revision 219) @@ -815,6 +815,7 @@ value="#{publishedSettings.scoringType}" layout="pageDirection"> + Index: samigo-app/src/webapp/jsf/author/authorSettings.jsp =================================================================== --- samigo-app/src/webapp/jsf/author/authorSettings.jsp (revision 209) +++ samigo-app/src/webapp/jsf/author/authorSettings.jsp (revision 219) @@ -829,6 +829,7 @@ + Index: samigo-app/src/webapp/jsf/evaluation/detailedStatistics.jsp =================================================================== --- samigo-app/src/webapp/jsf/evaluation/detailedStatistics.jsp (revision 209) +++ samigo-app/src/webapp/jsf/evaluation/detailedStatistics.jsp (revision 219) @@ -124,6 +124,12 @@ + + + + Index: samigo-app/src/webapp/jsf/evaluation/totalScores.jsp =================================================================== --- samigo-app/src/webapp/jsf/evaluation/totalScores.jsp (revision 209) +++ samigo-app/src/webapp/jsf/evaluation/totalScores.jsp (revision 219) @@ -194,6 +194,13 @@ + + + + + @@ -241,6 +248,13 @@ + + + + + @@ -274,15 +288,17 @@ - + + rendered="#{description.submittedDate!=null && description.assessmentGradingId ne '-1' && totalScores.allSubmissions!='4' }" > + @@ -294,7 +310,7 @@
- + @@ -323,15 +339,17 @@ - + + rendered="#{description.submittedDate!=null && description.assessmentGradingId ne '-1' && totalScores.allSubmissions!='4'}" > + @@ -371,15 +389,17 @@ - + + rendered="#{description.submittedDate!=null && description.assessmentGradingId ne '-1' && totalScores.allSubmissions!='4' }" > + @@ -406,20 +426,23 @@ - + - - + + + - - + + + @@ -428,12 +451,15 @@ + + - + + - + @@ -441,10 +467,12 @@ type="org.sakaiproject.tool.assessment.ui.listener.evaluation.TotalScoreListener" /> - - + + + @@ -453,23 +481,30 @@ + + + - + + - + + - - + + + @@ -478,10 +513,14 @@ + + + + @@ -568,7 +607,7 @@ - + @@ -695,7 +734,7 @@ - + @@ -735,7 +774,7 @@ - + @@ -827,7 +866,7 @@ - + @@ -897,11 +936,12 @@ +

<%-- --%> - + + + + + Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java (revision 209) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java (revision 219) @@ -318,7 +318,8 @@ * @return */ public ArrayList getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption(String agentId, String siteId, boolean allAssessments); - + public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption( final String agentId, final String siteId); + public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption( final String agentId, final String siteId, boolean allAssessments); public PublishedAssessmentData getBasicInfoOfPublishedAssessment(Long publishedId); public String getPublishedAssessmentSiteId(String publishedAssessmentId); Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java (revision 209) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueries.java (revision 219) @@ -27,6 +27,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -180,6 +181,9 @@ if (which.equals(EvaluationModelIfc.ALL_SCORE.toString())) { return list; } + if(which.equals(EvaluationModelIfc.AVERAGE_SCORE.toString())){ + return list; + } else { // only take highest or latest Iterator items = list.iterator(); @@ -261,6 +265,7 @@ public HashMap getItemScores(final Long itemId, List scores) { try { + //scores = getTotalScores(publishedId.toString(), which);//this needs to visited later in case scores values needed corrected --mustansar HashMap map = new HashMap(); //List list = new ArrayList(); @@ -1007,7 +1012,7 @@ } } } - + private byte[] getMediaStream(Long mediaId){ byte[] b = new byte[4000]; Session session = null; @@ -1083,6 +1088,7 @@ return b; } + public List getAssessmentGradingIds(final Long publishedItemId){ final HibernateCallback hcb = new HibernateCallback(){ @@ -1195,7 +1201,74 @@ } return l; } + /*** + * + *@author Mustansar Mehmood + */ + public Float getAverageSubmittedAssessmentGrading( final Long publishedAssessmentId, final String agentId) + { + Float averageScore= new Float(0.0); + AssessmentGradingData ag = null; + final String query ="from AssessmentGradingData a "+ + " where a.publishedAssessmentId=? and a.agentId=? and "+ + " a.forGrade=? order by a.submittedDate desc"; + + final HibernateCallback hcb = new HibernateCallback(){ + public Object doInHibernate(Session session) throws HibernateException, SQLException { + Query q = session.createQuery(query); + q.setLong(0, publishedAssessmentId.longValue()); + q.setString(1, agentId); + q.setBoolean(2, true); + return q.list(); + }; + }; + List assessmentGradings = getHibernateTemplate().executeFind(hcb); +// List assessmentGradings = getHibernateTemplate().find(query, +// new Object[] { publishedAssessmentId, agentId }, +// new org.hibernate.type.Type[] { Hibernate.LONG, Hibernate.STRING }); + if (assessmentGradings.size() != 0){ + AssessmentGradingData agd=null; + Float cumulativeScore=new Float(0); + Iterator i = assessmentGradings.iterator(); + + while(i.hasNext()){ + agd= (AssessmentGradingData)i.next(); + cumulativeScore+=agd.getFinalScore(); + } + averageScore= cumulativeScore/assessmentGradings.size(); + averageScore= new Float((new DecimalFormat("0.##").format((float)averageScore))); + // ag = (AssessmentGradingData) assessmentGradings.get(0); + // ag.setFinalScore(averageScore); + // ag.setItemGradingSet(getItemGradingSet(ag.getAssessmentGradingId())); + } + return averageScore; + } + public List getHighestSubmittedAssessmentGradingList(final Long publishedAssessmentId){ + final String query = "from AssessmentGradingData a where a.publishedAssessmentId=? and a.forGrade=? order by a.agentId asc, a.finalScore desc"; + + final HibernateCallback hcb = new HibernateCallback(){ + public Object doInHibernate(Session session) throws HibernateException, SQLException { + Query q = session.createQuery(query); + q.setLong(0, publishedAssessmentId.longValue()); + q.setBoolean(1, true); + return q.list(); + }; + }; + List assessmentGradings = getHibernateTemplate().executeFind(hcb); + + ArrayList l = new ArrayList(); + String currentAgent=""; + for (int i=0; i 1) { + multiSubmissionAllowed = true; + } + else { + multiSubmissionAllowed = false; + } + } + else { + multiSubmissionAllowed = true; + } + + if ((multiSubmissionAllowed) + && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption)) + && (!a.getPublishedAssessmentId().equals(currentid))) { + currentid = a.getPublishedAssessmentId(); + AssessmentGradingFacade f = new AssessmentGradingFacade(a); + assessmentList.add(f); + } + + } + //*assessments with average grades + + for (int i = 0; i < highest_list.size(); i++) { + AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i); + + // get the scoring option + if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) { + scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId()); + } + else { + // I use Last as default because it is what set above --mustansar + scoringOption = EvaluationModelIfc.LAST_SCORE; + } + if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) { + submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId()); + } + else { + submissionAllowed = null; + } + if (submissionAllowed != null) { + if (submissionAllowed.intValue() > 1) { + multiSubmissionAllowed = true; + } + else { + multiSubmissionAllowed = false; + } + } + else { + multiSubmissionAllowed = true; + } + + if ((multiSubmissionAllowed) + && (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption)) + && (!a.getPublishedAssessmentId().equals(currentid))) { + currentid = a.getPublishedAssessmentId(); + + AssessmentGradingFacade f = new AssessmentGradingFacade(a); + assessmentList.add(f); + } + + } + //*end of finding assessments with average grades + //return assessmentList; + return null; + } + /** * return an array list of the AssessmentGradingFacade that a user has + * submitted for grade. one per published assessment. If an assessment + * allows multiple submissions and its grading option is to send highest, + * then return only the submission with highest finalScore. If an assessment + * allows multiple submissions and its grading option is to send last, then + * return only the last submission. + * @author Mustansar Mehmood mustansar@rice.edu + * @param agentId + * @param siteId + * @param allAssessments + * @return + */ + public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption( + final String agentId, final String siteId, boolean allAssessments) { + // Get total no. of submission per assessment by the given agent + // sorted by submittedData DESC + final String last_query = "select new AssessmentGradingData(" + + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId," + + " a.submittedDate, a.isLate," + + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore," + + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate," + + " a.timeElapsed) " + + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az" + + " where a.publishedAssessmentId = p.publishedAssessmentId" + + " and a.forGrade=? and a.agentId=? and az.agentIdString=? " + + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId" + + " order by p.publishedAssessmentId DESC, a.submittedDate DESC"; + + // Get total no. of submission per assessment by the given agent + // sorted by finalScore DESC + + final String highest_query = "select new AssessmentGradingData(" + + " a.assessmentGradingId, p.publishedAssessmentId, p.title, a.agentId," + + " a.submittedDate, a.isLate," + + " a.forGrade, a.totalAutoScore, a.totalOverrideScore,a.finalScore," + + " a.comments, a.status, a.gradedBy, a.gradedDate, a.attemptDate," + + " a.timeElapsed) " + + " from AssessmentGradingData a, PublishedAssessmentData p, AuthorizationData az" + + " where a.publishedAssessmentId = p.publishedAssessmentId" + + " and a.forGrade=? and a.agentId=? and az.agentIdString=? " + + " and az.functionId=? and az.qualifierId=p.publishedAssessmentId" + + " order by p.publishedAssessmentId DESC, a.finalScore DESC, a.submittedDate DESC"; + + final HibernateCallback hcb_last = new HibernateCallback() { + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + Query q = session.createQuery(last_query); + q.setBoolean(0, true); + q.setString(1, agentId); + q.setString(2, siteId); + q.setString(3, "TAKE_PUBLISHED_ASSESSMENT"); + return q.list(); + }; + }; + + // this list is sorted by submittedDate desc. + List last_list = getHibernateTemplate().executeFind(hcb_last); + + final HibernateCallback hcb_highest = new HibernateCallback() { + public Object doInHibernate(Session session)throws HibernateException, SQLException { + Query q = session.createQuery(highest_query); + q.setBoolean(0, true); + q.setString(1, agentId); + q.setString(2, siteId); + q.setString(3, "TAKE_PUBLISHED_ASSESSMENT"); + return q.list(); + }; + }; + + // this list is sorted by finalScore desc. + List highest_list = getHibernateTemplate().executeFind(hcb_highest); + String query = "select a.publishedAssessmentId, e.scoringType, ac.submissionsAllowed " + + "from PublishedEvaluationModel e, PublishedAccessControl ac, PublishedAssessmentData a " + + "where e.assessment.publishedAssessmentId = a.publishedAssessmentId " + + "and ac.assessment.publishedAssessmentId = a.publishedAssessmentId "; + + List l = getHibernateTemplate().find(query); + HashMap scoringTypeMap = new HashMap(); + HashMap subissionAllowedMap = new HashMap(); + Iterator iter = l.iterator(); + while (iter.hasNext()) { + Object o[] = (Object[]) iter.next(); + scoringTypeMap.put(o[0], o[1]); + subissionAllowedMap.put(o[0], o[2]); + } + // The sorting for each column will be done in the action listener. + ArrayList assessmentList = new ArrayList(); + Long currentid = new Long("0"); + Integer scoringOption = EvaluationModelIfc.LAST_SCORE; // use Last as defaut + Integer submissionAllowed = null; + boolean multiSubmissionAllowed = false; + + // now go through the last_list, and get the first entry in the list for + // each publishedAssessment, if not + + for (int i = 0; i < last_list.size(); i++) { + AssessmentGradingData a = (AssessmentGradingData) last_list.get(i); + + // get the scoring option + if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) { + scoringOption = (Integer) scoringTypeMap.get(a + .getPublishedAssessmentId()); + } else { + // I use Last as default because it is what set above + scoringOption = EvaluationModelIfc.LAST_SCORE; + } + if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) { + submissionAllowed = (Integer) subissionAllowedMap.get(a + .getPublishedAssessmentId()); + } else { + submissionAllowed = null; + } + if (submissionAllowed != null) { + if (submissionAllowed.intValue() == 1) { + scoringOption = EvaluationModelIfc.LAST_SCORE; + } + } + if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption) + && (!a.getPublishedAssessmentId().equals(currentid) + || allAssessments)) { + currentid = a.getPublishedAssessmentId(); + AssessmentGradingFacade f = new AssessmentGradingFacade(a); + assessmentList.add(f); + } + + } + + // now go through the highest_list ,and get the first entry in the list + // for each publishedAssessment. + + for (int i = 0; i < highest_list.size(); i++) { + AssessmentGradingData a = (AssessmentGradingData) highest_list.get(i); + + // get the scoring option + if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) { + scoringOption = (Integer) scoringTypeMap.get(a + .getPublishedAssessmentId()); + } else { + // I use Last as default because it is what set above + scoringOption = EvaluationModelIfc.LAST_SCORE; + } + if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) { + submissionAllowed = (Integer) subissionAllowedMap.get(a + .getPublishedAssessmentId()); + } else { + submissionAllowed = null; + } + if (submissionAllowed != null) { + if (submissionAllowed.intValue() > 1) { + multiSubmissionAllowed = true; + } else { + multiSubmissionAllowed = false; + } + } else { + multiSubmissionAllowed = true; + } + + if ((multiSubmissionAllowed) + && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption)) + && ((!a.getPublishedAssessmentId().equals(currentid)) + || allAssessments)) { + currentid = a.getPublishedAssessmentId(); + AssessmentGradingFacade f = new AssessmentGradingFacade(a); + assessmentList.add(f); + } + } + /* + * assessments with average grades + */ + for (int i = 0; i < last_list.size(); i++) { + AssessmentGradingData a = (AssessmentGradingData) last_list.get(i); + // get the scoring option + if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) { + scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId()); + } else { + // I use Last as default because it is what set above + // --mustansar + scoringOption = EvaluationModelIfc.LAST_SCORE; + } + if (subissionAllowedMap.get(a.getPublishedAssessmentId()) != null) { + submissionAllowed = (Integer) subissionAllowedMap.get(a.getPublishedAssessmentId()); + } else { + submissionAllowed = null; + } + if (submissionAllowed != null) { + if (submissionAllowed.intValue() > 1) { + multiSubmissionAllowed = true; + } else { + multiSubmissionAllowed = false; + } + } else { + multiSubmissionAllowed = true; + } + if ( + (multiSubmissionAllowed) + && (EvaluationModelIfc.AVERAGE_SCORE.equals(scoringOption))&& (!a.getPublishedAssessmentId().equals(currentid)|| allAssessments)) { + currentid = a.getPublishedAssessmentId(); + AssessmentGradingFacade f = new AssessmentGradingFacade(a); + assessmentList.add(f); + } + } + /* + * end of finding assessments with average grades + */ + + return assessmentList; + } + /** + * return an array list of the AssessmentGradingFacade that a user has * submitted for grade. one per published assessment, when allAssessments is false, * and all submissions per published assessment when allAssesments is true. * If an assessment allows multiple submissions and its grading option is to send highest, @@ -2191,7 +2621,7 @@ } // just for debuging - /* + Set keySet = scoringTypeMap.keySet(); iter = keySet.iterator(); Long asssessmentId = null; @@ -2199,7 +2629,7 @@ while (iter.hasNext()) { asssessmentId = (Long) iter.next(); scoringType = (Integer) scoringTypeMap.get(asssessmentId); - log.debug("(asssessmentId, scoringType) = (" + asssessmentId + "," + scoringType + ")"); + log.info("(asssessmentId, scoringType) = (" + asssessmentId + "," + scoringType + ")"); } keySet = subissionAllowedMap.keySet(); iter = keySet.iterator(); @@ -2207,10 +2637,10 @@ while (iter.hasNext()) { asssessmentId = (Long) iter.next(); assessmentAllowed = (Integer) subissionAllowedMap.get(asssessmentId); - log.debug("(asssessmentId, assessmentAllowed) = (" + asssessmentId + "," + assessmentAllowed + ")"); + log.info("(asssessmentId, assessmentAllowed) = (" + asssessmentId + "," + assessmentAllowed + ")"); } - */ + // The sorting for each column will be done in the action listener. ArrayList assessmentList = new ArrayList(); Long currentid = new Long("0"); @@ -2219,12 +2649,9 @@ boolean multiSubmissionAllowed = false; // now go through the last_list, and get the first entry in the list for - // each publishedAssessment, if - // not - + // each publishedAssessment, if not for (int i = 0; i < last_list.size(); i++) { AssessmentGradingData a = (AssessmentGradingData) last_list.get(i); - // get the scoring option if (scoringTypeMap.get(a.getPublishedAssessmentId()) != null) { scoringOption = (Integer) scoringTypeMap.get(a.getPublishedAssessmentId()); @@ -2244,30 +2671,12 @@ scoringOption = EvaluationModelIfc.LAST_SCORE; } } - - /* - PublishedAssessmentFacade paf = getPublishedAssessment(a - .getPublishedAssessmentId()); - multiSubmissionAllowed = false; - if (paf != null) { - scoringOption = paf.getEvaluationModel().getScoringType(); - AssessmentAccessControlIfc ac = paf - .getAssessmentAccessControl(); - - if (ac.getSubmissionsAllowed() != null) { - if (ac.getSubmissionsAllowed().intValue() == 1) { - scoringOption = EvaluationModelIfc.LAST_SCORE; - } - } - } - */ if (EvaluationModelIfc.LAST_SCORE.equals(scoringOption) && (!a.getPublishedAssessmentId().equals(currentid) || allAssessments)) { currentid = a.getPublishedAssessmentId(); AssessmentGradingFacade f = new AssessmentGradingFacade(a); assessmentList.add(f); } - } // now go through the highest_list ,and get the first entry in the list @@ -2302,26 +2711,7 @@ else { multiSubmissionAllowed = true; } - /* - PublishedAssessmentFacade paf = getPublishedAssessment(a - .getPublishedAssessmentId()); - multiSubmissionAllowed = false; - if (paf != null) { - scoringOption = paf.getEvaluationModel().getScoringType(); - AssessmentAccessControlIfc ac = paf - .getAssessmentAccessControl(); - - if (ac.getSubmissionsAllowed() != null) { - if (ac.getSubmissionsAllowed().intValue() > 1) { - multiSubmissionAllowed = true; - } else { - multiSubmissionAllowed = false; - } - } else { - multiSubmissionAllowed = true; - } - } - */ + if ((multiSubmissionAllowed) && (EvaluationModelIfc.HIGHEST_SCORE.equals(scoringOption)) && (!a.getPublishedAssessmentId().equals(currentid) || allAssessments)) { Index: samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueriesAPI.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueriesAPI.java (revision 209) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/facade/AssessmentGradingFacadeQueriesAPI.java (revision 219) @@ -121,7 +121,8 @@ public ArrayList getMediaArray(ItemGradingData item); public HashMap getMediaItemGradingHash(Long assessmentGradingId); - + public List getHighestSubmittedAssessmentGradingList(final Long publishedAssessmentId); + public Float getAverageSubmittedAssessmentGrading( final Long publishedAssessmentId, final String agentId); public List getMediaArray(Long publishedItemId, Long agentId, String which); public ItemGradingData getLastItemGradingDataByAgent(Long publishedItemId, @@ -232,5 +233,7 @@ public HashMap getSubmittedCounts(String siteId); - public void completeItemGradingData(AssessmentGradingData assessmentGradingData); + public void completeItemGradingData(AssessmentGradingData assessmentGradingData); + +public HashMap getAverageAssessmentGradingByPublishedItem(Long publishedAssessmentId); } Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java (revision 209) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/assessment/PublishedAssessmentService.java (revision 219) @@ -553,7 +553,16 @@ getPublishedAssessmentFacadeQueries(). getBasicInfoOfLastOrHighestSubmittedAssessmentsByScoringOption(agentId, siteId, allAssessments); } - + public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(String agentId, String siteId){ + return PersistenceService.getInstance(). + getPublishedAssessmentFacadeQueries(). + getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(agentId, siteId); + } + public ArrayList getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(String agentId, String siteId,boolean allAssessments ){ + return PersistenceService.getInstance(). + getPublishedAssessmentFacadeQueries(). + getBasicInfoOfLastOrHighestOrAverageSubmittedAssessmentsByScoringOption(agentId, siteId, allAssessments); + } public PublishedAssessmentData getBasicInfoOfPublishedAssessment(String publishedId) { return PersistenceService.getInstance(). getPublishedAssessmentFacadeQueries(). Index: samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (revision 209) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/services/GradingService.java (revision 219) @@ -222,8 +222,29 @@ // no need to notify gradebook if this submission is not for grade // we only want to notify GB when there are changes - ArrayList newList = getAssessmentGradingsByScoringType( + ArrayList newList = getAssessmentGradingsByScoringType( scoringType, gdata.getPublishedAssessmentId()); + ArrayList l = getListForGradebookNotification(newList, oldList); + if(scoringType==4){ + Iterator it=l.iterator(); + while(it.hasNext()){ + notifyGradebookByScoringType((AssessmentGradingData)it.next() ,pub ); + } + } + else { + notifyGradebook(l, pub); + } + } catch (GradebookServiceException ge) { + ge.printStackTrace(); + throw ge; + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + /* ArrayList newList = getAssessmentGradingsByScoringType( scoringType, gdata.getPublishedAssessmentId()); + ArrayList l = getListForGradebookNotification(newList, oldList); notifyGradebook(l, pub); @@ -237,8 +258,26 @@ } - } + }*/ + /**@author Mustansar Mehmood + * to populate the grade book once a published assessment(counting average scores) is connected to gradebook + * */ + public void populateGradebookWithAverageScores(ArrayList l, PublishedAssessmentIfc pub){ + + Iterator it=l.iterator(); + while(it.hasNext()){ + notifyGradebookByScoringType((AssessmentGradingData)it.next() ,pub ); + } + } + /* + * @author Mustansar + * */ + public ArrayList getAsessmentGradingForAll( Integer scoringType, Long publishedAssessmentId){ + List l = null; + l=this.getTotalScores(publishedAssessmentId.toString(), "3"); + return new ArrayList(l); + } private ArrayList getListForGradebookNotification( ArrayList newList, ArrayList oldList){ @@ -265,7 +304,7 @@ return l; } - public ArrayList getAssessmentGradingsByScoringType( + /* public ArrayList getAssessmentGradingsByScoringType( Integer scoringType, Long publishedAssessmentId){ List l = null; // get the list of highest score @@ -277,8 +316,38 @@ l = getLastSubmittedOrGradedAssessmentGradingList(publishedAssessmentId); } return new ArrayList(l); + }*/ +// + public List getHighestSubmittedAssessmentGradingList(Long publishedId) + { + ArrayList results = null; + try { + results = + new ArrayList(PersistenceService.getInstance(). + getAssessmentGradingFacadeQueries().getHighestSubmittedAssessmentGradingList(publishedId)); + } catch (Exception e) { + e.printStackTrace(); + } + return results; } + private ArrayList getAssessmentGradingsByScoringType( + Integer scoringType, Long publishedAssessmentId){ + List l = null; + // get the list of highest score + if ((scoringType).equals(EvaluationModelIfc.HIGHEST_SCORE)){ + l = getHighestSubmittedAssessmentGradingList(publishedAssessmentId); + } + // get the list of last score + else if ((scoringType).equals(EvaluationModelIfc.LAST_SCORE)) { + l = getLastSubmittedAssessmentGradingList(publishedAssessmentId); + } + else{ + l=this.getTotalScores(publishedAssessmentId.toString(), "3"); + } + return new ArrayList(l); + } + // public Integer getScoringType(PublishedAssessmentIfc pub){ Integer scoringType = null; EvaluationModelIfc e = pub.getEvaluationModel(); @@ -538,7 +607,19 @@ return assessmentGranding; } - + /** Method Written to get Average grading data for assessment. + * @author Mustansar Mehmood + * */ + public Float getAverageSubmittedAssessmentGrading(String publishedAssessmentId, String agentId){ + try{ + return PersistenceService.getInstance().getAssessmentGradingFacadeQueries(). + getAverageSubmittedAssessmentGrading(new Long(publishedAssessmentId), agentId); + } + catch(Exception e) + { + log.error(e); throw new RuntimeException(e); + } + } public void saveItemGrading(ItemGradingIfc item) { try { @@ -896,8 +977,17 @@ if (updateGradebook(data, pub)){ AssessmentGradingIfc d = data; // data is the last submission // need to decide what to tell gradebook - if ((scoringType).equals(EvaluationModelIfc.HIGHEST_SCORE)) + if ((scoringType).equals(EvaluationModelIfc.HIGHEST_SCORE)){ d = getHighestSubmittedAssessmentGrading(pub.getPublishedAssessmentId().toString(), data.getAgentId()); + } + else if ((scoringType).equals(EvaluationModelIfc.AVERAGE_SCORE)){ //mustansar + Float avgScore=getAverageSubmittedAssessmentGrading(pub.getPublishedAssessmentId().toString(), data.getAgentId()); + d.setFinalScore(avgScore); + } + else { + ; + } + notifyGradebook(d, pub); } } Index: samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java =================================================================== --- samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java (revision 209) +++ samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/ExtractionHelper.java (revision 219) @@ -654,14 +654,14 @@ { evaluationModel.setScoringType(EvaluationModel.HIGHEST_SCORE); } - /* + // not implementing average for now - else if ("AVERAGE".equalsIgnoreCase(assessment.getAssessmentMetaDataByLabel( + else if ("AVERAGE_SCORE".equalsIgnoreCase(assessment.getAssessmentMetaDataByLabel( "GRADE_SCORE"))) { evaluationModel.setScoringType(EvaluationModel.AVERAGE_SCORE); } - */ + else if ("LAST_SCORE".equalsIgnoreCase(assessment.getAssessmentMetaDataByLabel( "GRADE_SCORE"))) { Index: samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/assessment/AssessmentHelperBase.java =================================================================== --- samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/assessment/AssessmentHelperBase.java (revision 209) +++ samigo-qti/src/java/org/sakaiproject/tool/assessment/qti/helper/assessment/AssessmentHelperBase.java (revision 219) @@ -227,14 +227,13 @@ { assessmentXml.setFieldentry("GRADE_SCORE", "HIGHEST_SCORE"); } - /* - // not implementing average for now + else if (EvaluationModelIfc.AVERAGE_SCORE.equals(evaluationModel. getScoringType())) { assessmentXml.setFieldentry("GRADE_SCORE", "AVERAGE_SCORE"); } - */ + else if (EvaluationModelIfc.LAST_SCORE.equals(evaluationModel. getScoringType())) {