Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolQuestion.java =================================================================== diff -u -r6de3d240b76c900f96a93ab784838f2153fbe7c5 -r114a48edf9af0975b8d67d3240ae2de2a773de46 --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolQuestion.java (.../QbToolQuestion.java) (revision 6de3d240b76c900f96a93ab784838f2153fbe7c5) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbToolQuestion.java (.../QbToolQuestion.java) (revision 114a48edf9af0975b8d67d3240ae2de2a773de46) @@ -1,72 +1,89 @@ -package org.lamsfoundation.lams.qb.model; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - -/** - * - * Serves as a super class for all tools' questions. - * Storing references to QB questions in a single table allows easy tracking of a question's usage thorough LAMS. - * - * @author Marcin Cieslak - */ -@Entity -@Table(name = "lams_qb_tool_question") -@Inheritance(strategy = InheritanceType.JOINED) -public abstract class QbToolQuestion { - @Id - @Column(name = "tool_question_uid") - @GeneratedValue(strategy = GenerationType.IDENTITY) - protected Long uid; - - // part of question's data is stored in Question Bank's DB tables - // getters and setters of this data (question, mark, feedback) are mapped to QbQuestion - @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.MERGE, - CascadeType.PERSIST, CascadeType.REFRESH }) - @JoinColumn(name = "qb_question_uid") - protected QbQuestion qbQuestion; - - @Column(name = "tool_content_id") - protected Long toolContentId; - - @Column(name = "display_order") - protected int displayOrder = 1; - - public Long getUid() { - return this.uid; - } - - public QbQuestion getQbQuestion() { - return qbQuestion; - } - - public void setQbQuestion(QbQuestion qbQuestion) { - this.qbQuestion = qbQuestion; - } - - public Long getToolContentId() { - return toolContentId; - } - - public void setToolContentId(Long toolContentId) { - this.toolContentId = toolContentId; - } - - public int getDisplayOrder() { - return displayOrder; - } - - public void setDisplayOrder(int displayOrder) { - this.displayOrder = displayOrder; - } +package org.lamsfoundation.lams.qb.model; + +import java.util.Comparator; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * + * Serves as a super class for all tools' questions. + * Storing references to QB questions in a single table allows easy tracking of a question's usage thorough LAMS. + * + * @author Marcin Cieslak + */ +@Entity +@Table(name = "lams_qb_tool_question") +@Inheritance(strategy = InheritanceType.JOINED) +public abstract class QbToolQuestion implements Comparable { + public static final Comparator COMPARATOR = Comparator.comparing(QbToolQuestion::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 QbToolQuestionComparator implements Comparator { + @Override + public int compare(QbToolQuestion o1, QbToolQuestion o2) { + return COMPARATOR.compare(o1, o2); + } + } + + @Id + @Column(name = "tool_question_uid") + @GeneratedValue(strategy = GenerationType.IDENTITY) + protected Long uid; + + // part of question's data is stored in Question Bank's DB tables + // getters and setters of this data (question, mark, feedback) are mapped to QbQuestion + @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = { CascadeType.DETACH, CascadeType.MERGE, + CascadeType.PERSIST, CascadeType.REFRESH }) + @JoinColumn(name = "qb_question_uid") + protected QbQuestion qbQuestion; + + @Column(name = "tool_content_id") + protected Long toolContentId; + + @Column(name = "display_order") + protected int displayOrder = 1; + + @Override + public int compareTo(QbToolQuestion other) { + return COMPARATOR.compare(this, other); + } + + public Long getUid() { + return this.uid; + } + + public QbQuestion getQbQuestion() { + return qbQuestion; + } + + public void setQbQuestion(QbQuestion qbQuestion) { + this.qbQuestion = qbQuestion; + } + + public Long getToolContentId() { + return toolContentId; + } + + public void setToolContentId(Long toolContentId) { + this.toolContentId = toolContentId; + } + + public int getDisplayOrder() { + return displayOrder; + } + + public void setDisplayOrder(int displayOrder) { + this.displayOrder = displayOrder; + } } \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java =================================================================== diff -u -r394f403c289f0fd7808c228840bead5c4e7d5d32 -r114a48edf9af0975b8d67d3240ae2de2a773de46 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision 394f403c289f0fd7808c228840bead5c4e7d5d32) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision 114a48edf9af0975b8d67d3240ae2de2a773de46) @@ -45,6 +45,8 @@ import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.SortComparator; +import org.lamsfoundation.lams.qb.model.QbToolQuestion; import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; /** @@ -72,7 +74,7 @@ private String instructions; // *** advance tab *** - + @Column(name = "use_select_leader_tool_ouput") private boolean useSelectLeaderToolOuput; @@ -120,7 +122,7 @@ @Column(name = "display_summary") private boolean displaySummary; - + @Column(name = "define_later") private boolean defineLater; @@ -134,7 +136,7 @@ private String reflectInstructions; // general information - + @Column(name = "create_date") private Date created; @@ -152,6 +154,7 @@ // Question bank questions @OneToMany @JoinColumn(name = "assessment_uid") + @SortComparator(QbToolQuestion.QbToolQuestionComparator.class) private Set questions = new TreeSet<>(); // assessment questions references that form question list Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== diff -u -r6cbd849584c40532c6be292f9f009c88cde9439c -r114a48edf9af0975b8d67d3240ae2de2a773de46 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 6cbd849584c40532c6be292f9f009c88cde9439c) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 114a48edf9af0975b8d67d3240ae2de2a773de46) @@ -29,14 +29,12 @@ import javax.persistence.Entity; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; -import javax.persistence.Transient; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.log4j.Logger; import org.lamsfoundation.lams.qb.model.QbToolQuestion; -import org.lamsfoundation.lams.qb.service.IQbService; import org.lamsfoundation.lams.tool.assessment.dto.QuestionDTO; /** @@ -48,11 +46,10 @@ @Table(name = "tl_laasse10_assessment_question") //in this entity's table primary key is "uid", but it references "tool_question_uid" in lams_qb_tool_question @PrimaryKeyJoinColumn(name = "uid") -public class AssessmentQuestion extends QbToolQuestion - implements Serializable, Cloneable, Comparable { +public class AssessmentQuestion extends QbToolQuestion implements Serializable, Cloneable { private static final long serialVersionUID = -7767327140430305575L; private static final Logger log = Logger.getLogger(AssessmentQuestion.class); - + @Column(name = "random_question") private boolean randomQuestion; @@ -91,11 +88,6 @@ } @Override - public int compareTo(AssessmentQuestion anotherQuestion) { - return displayOrder - anotherQuestion.getDisplayOrder(); - } - - @Override public String toString() { return new ToStringBuilder(this).append("uid", getUid()).toString(); } @@ -118,14 +110,15 @@ // ********************************************************** // Get/Set methods // ********************************************************** + @Override public Long getUid() { return uid; } public void setUid(Long userID) { this.uid = userID; } - + public boolean isRandomQuestion() { return randomQuestion; } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McQueContent.java =================================================================== diff -u -r887cde82a7847b6294b50d242c448f2a575f9c9e -r114a48edf9af0975b8d67d3240ae2de2a773de46 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McQueContent.java (.../McQueContent.java) (revision 887cde82a7847b6294b50d242c448f2a575f9c9e) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/model/McQueContent.java (.../McQueContent.java) (revision 114a48edf9af0975b8d67d3240ae2de2a773de46) @@ -24,7 +24,6 @@ import java.io.Serializable; -import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; @@ -40,7 +39,8 @@ /** *

- * Persistent object/bean that defines the questionDescription content for the MCQ tool. Provides accessors and mutators to get/set + * Persistent object/bean that defines the questionDescription content for the MCQ tool. Provides accessors and mutators + * to get/set * attributes It maps to database table: tl_lamc11_que_content *

* @@ -50,7 +50,7 @@ @Table(name = "tl_lamc11_que_content") // in this entity's table primary key is "uid", but it references "tool_question_uid" in lams_qb_tool_question @PrimaryKeyJoinColumn(name = "uid") -public class McQueContent extends QbToolQuestion implements Serializable, Comparable { +public class McQueContent extends QbToolQuestion implements Serializable { private static final long serialVersionUID = 4022287106119453962L; @ManyToOne(fetch = FetchType.LAZY) @@ -84,7 +84,7 @@ newMcContent); return newQueContent; } - + public String getName() { return this.qbQuestion.getName(); } @@ -142,18 +142,6 @@ qbQuestion.setFeedback(feedback); } - @Override - public int compareTo(McQueContent queContent) { - // 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 if (queContent.getUid() == null) { - return -1; - } else { - return (int) (uid.longValue() - queContent.getUid().longValue()); - } - } - /** * @return Returns the mark. */