Index: BeginDeliveryActionListener.java =================================================================== --- BeginDeliveryActionListener.java (revision 5421) +++ BeginDeliveryActionListener.java (revision 5823) @@ -163,6 +163,27 @@ // populate backing bean from published assessment populateBeanFromPub(delivery, pub); } + + /** + * Determines whether this is an expired assessment or not + * @return true if ran out of time + */ + private void hasTimeExpired(DeliveryBean delivery, + PublishedAssessmentIfc pubAssessment, AssessmentGradingData record) { + if(record != null) { + /* + * Get timeLimit in milliseconds, startedTime in millis as well and then substract NOW - Started to check whether it is greater than static quantity timeLimit + */ + boolean expired = false; + long timeLimit = pubAssessment.getAssessmentAccessControl().getTimeLimit()*1000L; + long startedTime = record.getAttemptDate().getTime(); + if((System.currentTimeMillis() - startedTime) > (timeLimit)) { + expired = true; + } + delivery.setIsTimeExpired(expired); + delivery.setBeginAssessment(!(expired)); // if false, then true and viceversa + } + } private PublishedAssessmentFacade lookupPublishedAssessment(String id, PublishedAssessmentService publishedAssessmentService @@ -285,6 +306,7 @@ delivery.setFeedbackOnDate(false); delivery.setDueDate(control.getDueDate()); delivery.setRetractDate(control.getRetractDate()); + delivery.setIsTimeExpired(false); // initializing to false by default although it would be done by the DeliveryBean constructor, just to make sure. if (control.getMarkForReview() != null && (Integer.valueOf(1)).equals(control.getMarkForReview())) { delivery.setDisplayMardForReview(true); @@ -315,16 +337,18 @@ GradingService gradingService = new GradingService (); List unSubmittedAssessmentGradingList = gradingService.getUnSubmittedAssessmentGradingDataList(publishedAssessmentId, AgentFacade.getAgentString()); + AssessmentGradingData unSubmittedAssessmentGrading = null; if (unSubmittedAssessmentGradingList.size() != 0){ delivery.setFirstTimeTaking(false); - AssessmentGradingData unSubmittedAssessmentGrading = (AssessmentGradingData) unSubmittedAssessmentGradingList.get(0); - setTimedAssessment(delivery, pubAssessment, unSubmittedAssessmentGrading); + unSubmittedAssessmentGrading = (AssessmentGradingData) unSubmittedAssessmentGradingList.get(0); } else { delivery.setFirstTimeTaking(true); - setTimedAssessment(delivery, pubAssessment, null); } - + + setTimedAssessment(delivery, pubAssessment, unSubmittedAssessmentGrading); // unSubm... can be either null or record + + // #3 - if this is a timed assessment, set the time limit in hr, min & sec. delivery.setDeadline(); @@ -406,7 +430,13 @@ delivery.setTimeLimit(timeBeforeDueRetract); long adjustedTimedAssesmentDueDateLong = attemptDate.getTime() + Long.parseLong(timeBeforeDueRetract) * 1000; delivery.setAdjustedTimedAssesmentDueDate(new Date(adjustedTimedAssesmentDueDateLong)); + try { + hasTimeExpired(delivery, pubAssessment, unSubmittedAssessmentGrading); + } catch (Exception e) { + e.printStackTrace(); + } } + } else{ delivery.setHasTimeLimit(false);