Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java =================================================================== diff -u -r9c3a64b840753192b333afb73c8fe7bdb54be638 -rf280ea4699aa04587b63c0fef3e2a02b7d847c0d --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision 9c3a64b840753192b333afb73c8fe7bdb54be638) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision f280ea4699aa04587b63c0fef3e2a02b7d847c0d) @@ -20,9 +20,9 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.assessment.model; +import java.time.LocalDateTime; import java.util.Date; import java.util.Set; import java.util.TreeSet; @@ -53,38 +53,38 @@ @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long uid; - + @Column(name = "start_date") private Date startDate; - + //date when user has started activity (pressed start button) that has time limitation @Column(name = "time_limit_launched_date") - private Date timeLimitLaunchedDate; - + private LocalDateTime timeLimitLaunchedDate; + //indicates the latest retry @Column private Boolean latest; - + @Column(name = "finish_date") private Date finishDate; - + @Column(name = "session_id") private Long sessionId; - + @Column(name = "maximum_grade") private int maximumGrade; - + @Column private float grade; - + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "assessment_uid") private Assessment assessment; - + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_uid") private AssessmentUser user; - + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "result_uid") private Set questionResults = new TreeSet<>(); @@ -129,14 +129,14 @@ public void setStartDate(Date startDate) { this.startDate = startDate; } - - public Date getTimeLimitLaunchedDate() { + + public LocalDateTime getTimeLimitLaunchedDate() { return timeLimitLaunchedDate; - } + } - public void setTimeLimitLaunchedDate(Date timeLimitLaunchedDate) { + public void setTimeLimitLaunchedDate(LocalDateTime timeLimitLaunchedDate) { this.timeLimitLaunchedDate = timeLimitLaunchedDate; - } + } public Boolean isLatest() { return latest; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r36e9121497b2c963250d22ec0f660fd66934182e -rf280ea4699aa04587b63c0fef3e2a02b7d847c0d --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 36e9121497b2c963250d22ec0f660fd66934182e) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision f280ea4699aa04587b63c0fef3e2a02b7d847c0d) @@ -26,6 +26,8 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.sql.Timestamp; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -306,7 +308,7 @@ @Override public void launchTimeLimit(Long assessmentUid, Long userId) { AssessmentResult lastResult = getLastAssessmentResult(assessmentUid, userId); - lastResult.setTimeLimitLaunchedDate(new Date()); + lastResult.setTimeLimitLaunchedDate(LocalDateTime.now()); assessmentResultDao.saveObject(lastResult); } @@ -318,9 +320,11 @@ if (assessment.getTimeLimit() != 0) { // if user has pressed OK button already - calculate remaining time, and full time otherwise boolean isTimeLimitNotLaunched = (lastResult == null) || (lastResult.getTimeLimitLaunchedDate() == null); + secondsLeft = isTimeLimitNotLaunched ? assessment.getTimeLimit() * 60 : assessment.getTimeLimit() * 60 - - (System.currentTimeMillis() - lastResult.getTimeLimitLaunchedDate().getTime()) / 1000; + - Duration.between(lastResult.getTimeLimitLaunchedDate(), LocalDateTime.now()).toSeconds(); + // change negative or zero number to 1 secondsLeft = Math.max(1, secondsLeft); } @@ -339,8 +343,7 @@ //check if the time limit is exceeded return (lastLeaderResult != null) && (lastLeaderResult.getTimeLimitLaunchedDate() != null) - && lastLeaderResult.getTimeLimitLaunchedDate().getTime() + timeLimit * 60000 < System - .currentTimeMillis(); + && lastLeaderResult.getTimeLimitLaunchedDate().plusSeconds(timeLimit).isBefore(LocalDateTime.now()); } @Override