Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolAnswer.java =================================================================== diff -u -r2b3d3b2f61d37cf2fa7cccc0cf4565e5dfc4b88e -r7f09ca6e27d33ac2afa5859c4b482178657748c4 --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolAnswer.java (.../QbToolAnswer.java) (revision 2b3d3b2f61d37cf2fa7cccc0cf4565e5dfc4b88e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolAnswer.java (.../QbToolAnswer.java) (revision 7f09ca6e27d33ac2afa5859c4b482178657748c4) @@ -1,5 +1,7 @@ package org.lamsfoundation.lams.qb.model; +import java.util.Comparator; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -22,7 +24,18 @@ @Entity @Table(name = "lams_qb_tool_answer") @Inheritance(strategy = InheritanceType.JOINED) -public abstract class QbToolAnswer { +public abstract class QbToolAnswer implements Comparable { + public static final Comparator COMPARATOR = Comparator + .comparing(a -> a.getQbToolQuestion().getDisplayOrder()); + + // it makes sense to put comparator here as an internal class, so we do not need to look for it in other classes + public static class QbToolAnswerComparator implements Comparator { + @Override + public int compare(QbToolAnswer o1, QbToolAnswer o2) { + return COMPARATOR.compare(o1, o2); + } + } + @Id @Column(name = "answer_uid") @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -39,6 +52,11 @@ @JoinColumn(name = "qb_option_uid") protected QbOption qbOption; + @Override + public int compareTo(QbToolAnswer other) { + return COMPARATOR.compare(this, other); + } + public Long getUid() { return this.uid; } @@ -84,4 +102,5 @@ QbToolAnswer other = (QbToolAnswer) obj; return new EqualsBuilder().append(this.getUid(), other.getUid()).isEquals(); } -} + +} \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java =================================================================== diff -u -r0dc158981713b0ab875102e364bd7c4a3a0e2235 -r7f09ca6e27d33ac2afa5859c4b482178657748c4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 0dc158981713b0ab875102e364bd7c4a3a0e2235) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 7f09ca6e27d33ac2afa5859c4b482178657748c4) @@ -52,7 +52,7 @@ @Table(name = "tl_laasse10_question_result") //in this entity's table primary key is "uid", but it references "answer_uid" in lams_qb_tool_answer @PrimaryKeyJoinColumn(name = "uid") -public class AssessmentQuestionResult extends QbToolAnswer implements Comparable { +public class AssessmentQuestionResult extends QbToolAnswer { @Column(name = "answer_float") private float answerFloat; @@ -224,14 +224,4 @@ public void setQuestionDto(QuestionDTO questionDto) { this.questionDto = questionDto; } - - @Override - public int compareTo(AssessmentQuestionResult o) { - if (o != null) { - return qbToolQuestion.getDisplayOrder() - o.qbToolQuestion.getDisplayOrder(); - } else { - return 1; - } - } - -} +} \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java =================================================================== diff -u -rf280ea4699aa04587b63c0fef3e2a02b7d847c0d -r7f09ca6e27d33ac2afa5859c4b482178657748c4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision f280ea4699aa04587b63c0fef3e2a02b7d847c0d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision 7f09ca6e27d33ac2afa5859c4b482178657748c4) @@ -40,6 +40,9 @@ import javax.persistence.Table; import javax.persistence.Transient; +import org.hibernate.annotations.SortComparator; +import org.lamsfoundation.lams.qb.model.QbToolAnswer; + /** * Assessment Result * @@ -87,6 +90,7 @@ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "result_uid") + @SortComparator(QbToolAnswer.QbToolAnswerComparator.class) private Set questionResults = new TreeSet<>(); // *************** NON Persist Fields ******************** Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McUsrAttempt.java =================================================================== diff -u -r0a5a11351daa8e308190921254096c712ce88837 -r7f09ca6e27d33ac2afa5859c4b482178657748c4 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McUsrAttempt.java (.../McUsrAttempt.java) (revision 0a5a11351daa8e308190921254096c712ce88837) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McUsrAttempt.java (.../McUsrAttempt.java) (revision 7f09ca6e27d33ac2afa5859c4b482178657748c4) @@ -51,7 +51,7 @@ @Table(name = "tl_lamc11_usr_attempt") //in this entity's table primary key is "uid", but it references "answer_uid" in lams_qb_tool_answer @PrimaryKeyJoinColumn(name = "uid") -public class McUsrAttempt extends QbToolAnswer implements Serializable, Comparable { +public class McUsrAttempt extends QbToolAnswer implements Serializable { private static final long serialVersionUID = 4514268732673337338L; @Column(name = "attempt_time") @@ -184,14 +184,4 @@ return getMark(); } - - @Override - public int compareTo(McUsrAttempt other) { - // if the object does not exist yet, then just return any one of 0, -1, 1. Should not make a difference. - if (uid == null) { - return 1; - } else { - return (int) (uid.longValue() - other.uid.longValue()); - } - } } \ No newline at end of file