Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmissionDetails.java =================================================================== diff -u -rb496f01cb0de2c2968b080bced80c36ce24bb323 -rfea7b488c176b774c9a6058d1eb00fb5996ec47c --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmissionDetails.java (.../SubmissionDetails.java) (revision b496f01cb0de2c2968b080bced80c36ce24bb323) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmissionDetails.java (.../SubmissionDetails.java) (revision fea7b488c176b774c9a6058d1eb00fb5996ec47c) @@ -143,6 +143,7 @@ .append("uuid",getUuid()) .append("versionID", getVersionID()) .append("userID",getUserID()) + .append("report",getReport()) .toString(); } @@ -202,11 +203,12 @@ /* (non-Javadoc) * @see java.lang.Object#clone() */ - protected Object clone() throws CloneNotSupportedException { + public Object clone() { Object obj = null; try { obj = super.clone(); - ((SubmissionDetails)obj).report = (SubmitFilesReport) this.report.clone(); + if(this.report != null) + ((SubmissionDetails)obj).report = (SubmitFilesReport) this.report.clone(); } catch (CloneNotSupportedException e) { log.error("When clone " + SubmissionDetails.class + " failed"); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesReport.java =================================================================== diff -u -r87db12aabbb89e2d5eac26832b1b3f4f8414d8de -rfea7b488c176b774c9a6058d1eb00fb5996ec47c --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesReport.java (.../SubmitFilesReport.java) (revision 87db12aabbb89e2d5eac26832b1b3f4f8414d8de) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesReport.java (.../SubmitFilesReport.java) (revision fea7b488c176b774c9a6058d1eb00fb5996ec47c) @@ -3,6 +3,8 @@ import java.io.Serializable; import java.util.Date; +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; @@ -100,4 +102,25 @@ } return obj; } + + public boolean equals(Object other) { + if ( (this == other ) ) return true; + if ( !(other instanceof SubmitFilesReport) ) return false; + SubmitFilesReport castOther = (SubmitFilesReport) other; + return new EqualsBuilder() + .append(this.getReportID(), castOther.getReportID()) + .append(this.getComments(), castOther.getComments()) + .append(this.getMarks(), castOther.getMarks()) + .append(this.getDateMarksReleased(), castOther.getDateMarksReleased()) + .isEquals(); + } + + public int hashCode() { + return new HashCodeBuilder() + .append(getReportID()) + .append(getComments()) + .append(getMarks()) + .append(getDateMarksReleased()) + .toHashCode(); + } } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesSession.java =================================================================== diff -u -rb496f01cb0de2c2968b080bced80c36ce24bb323 -rfea7b488c176b774c9a6058d1eb00fb5996ec47c --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesSession.java (.../SubmitFilesSession.java) (revision b496f01cb0de2c2968b080bced80c36ce24bb323) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitFilesSession.java (.../SubmitFilesSession.java) (revision fea7b488c176b774c9a6058d1eb00fb5996ec47c) @@ -10,7 +10,7 @@ /** * @hibernate.class table="tl_lasbmt11_session" */ -public class SubmitFilesSession implements Serializable{ +public class SubmitFilesSession implements Serializable,Cloneable{ private static Logger log = Logger.getLogger(SubmitFilesSession.class); public final static int INCOMPLETE = 0; @@ -82,7 +82,7 @@ /* (non-Javadoc) * @see java.lang.Object#clone() */ - protected Object clone() throws CloneNotSupportedException { + public Object clone() { Object obj = null; try { obj = super.clone(); Index: lams_tool_sbmt/test/java/org/lamsfoundation/lams/tool/sbmt/dao/TestModel.java =================================================================== diff -u -r87db12aabbb89e2d5eac26832b1b3f4f8414d8de -rfea7b488c176b774c9a6058d1eb00fb5996ec47c --- lams_tool_sbmt/test/java/org/lamsfoundation/lams/tool/sbmt/dao/TestModel.java (.../TestModel.java) (revision 87db12aabbb89e2d5eac26832b1b3f4f8414d8de) +++ lams_tool_sbmt/test/java/org/lamsfoundation/lams/tool/sbmt/dao/TestModel.java (.../TestModel.java) (revision fea7b488c176b774c9a6058d1eb00fb5996ec47c) @@ -21,15 +21,17 @@ package org.lamsfoundation.lams.tool.sbmt.dao; import java.util.Calendar; -import java.util.Date; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; +import junit.framework.TestCase; + import org.lamsfoundation.lams.tool.sbmt.SubmissionDetails; import org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent; import org.lamsfoundation.lams.tool.sbmt.SubmitFilesReport; import org.lamsfoundation.lams.tool.sbmt.SubmitFilesSession; -import junit.framework.TestCase; - /** * @author Steve.Ni * @@ -60,6 +62,14 @@ private static boolean deB = true; private static boolean offA = false; private static boolean offB = false; + //session data + private static Long sessA = new Long(100); + private static Integer statA = new Integer(100); + private static Long sessB = new Long(200); + private static Integer statB = new Integer(200); + //detail data + private String filePathA = "fpA"; + private String filePathB = "fpB"; private SubmitFilesContent content; private SubmitFilesReport report; @@ -94,6 +104,51 @@ } /* + * Class under test for SubmitFilesSession clone() + */ + public void testSessionClone() { + fillSessionA(session); + SubmitFilesSession sessionC = (SubmitFilesSession) session.clone(); + fillSessionB(session); + + assertEquals(sessionC.getSessionID(),sessA); + assertEquals(sessionC.getStatus(),statA); + + } + /* + * Class under test for SubmitFilesSession clone() + */ + public void testDetailClone() { + fillDetailA(detail); + SubmissionDetails detailC = (SubmissionDetails) detail.clone(); + fillDetailB(detail); + + assertEquals(detailC.getFilePath(),filePathA); + SubmitFilesReport report = new SubmitFilesReport(); + fillReportA(report); + assertEquals(detailC.getReport(),report); + + } + /** + * @param detail2 + */ + private void fillDetailA(SubmissionDetails detail) { + detail.setFilePath(filePathA); + SubmitFilesReport report = new SubmitFilesReport(); + fillReportA(report); + detail.setReport(report); + } + /** + * @param detail2 + */ + private void fillDetailB(SubmissionDetails detail) { + detail.setFilePath(filePathB); + SubmitFilesReport report = new SubmitFilesReport(); + fillReportB(report); + detail.setReport(report); + } + + /* * Class under test for SubmitFilesContent clone() */ public void testContentClone() { @@ -105,11 +160,35 @@ assertEquals(contentC.getTitle(),titA); assertEquals(contentC.isDefineLater(),deA); assertEquals(contentC.isRunOffline(),offA); -// assertEquals(contentC.getSubmissionDetails(),insA); -// assertEquals(contentC.getToolSession(),insA); + //test SubmissionDetails Set + Iterator iter = contentC.getSubmissionDetails().iterator(); + SubmissionDetails detail = new SubmissionDetails(); + fillDetailA(detail); + assertEquals(iter.next(),detail); + //test SubmitFilesSession l Set + iter = contentC.getToolSession().iterator(); + SubmitFilesSession session = new SubmitFilesSession(); + fillSessionA(session); + assertEquals(iter.next(),session); + //do more test to ensure origial object keep desired values "B" + assertEquals(content.getInstructions(),insB); + assertEquals(content.getTitle(),titB); + assertEquals(content.isDefineLater(),deB); + assertEquals(content.isRunOffline(),offB); + //test SubmissionDetails Set + iter = content.getSubmissionDetails().iterator(); + detail = new SubmissionDetails(); + fillDetailB(detail); + assertEquals(iter.next(),detail); + //test SubmitFilesSession l Set + iter = content.getToolSession().iterator(); + session = new SubmitFilesSession(); + fillSessionB(session); + assertEquals(iter.next(),session); + } - + //================Fill init data for model object========== private void fillReportA(SubmitFilesReport report){ report.setComments(commA); Calendar cal = Calendar.getInstance(); @@ -131,16 +210,43 @@ content.setInstructions(insA); content.setRunOffline(offA); content.setTitle(titA); -// content.setSubmissionDetails(); -// content.setToolSession(); + //fill details + SubmissionDetails detail = new SubmissionDetails(); + fillDetailA(detail); + Set details = new TreeSet(); + details.add(detail); + content.setSubmissionDetails(details); + //fill sessions + SubmitFilesSession session = new SubmitFilesSession(); + fillSessionA(session); + Set sessions = new TreeSet(); + sessions.add(session); + content.setToolSession(sessions); } private void fillContentB(SubmitFilesContent content){ content.setDefineLater(deB); content.setInstructions(insB); content.setRunOffline(offB); content.setTitle(titB); -// content.setSubmissionDetails(); -// content.setToolSession(); + //fill details + SubmissionDetails detail = new SubmissionDetails(); + fillDetailB(detail); + Set details = new TreeSet(); + details.add(detail); + content.setSubmissionDetails(details); + //fill sessions + SubmitFilesSession session = new SubmitFilesSession(); + fillSessionB(session); + Set sessions = new TreeSet(); + sessions.add(session); + content.setToolSession(sessions); } - + private void fillSessionA(SubmitFilesSession session){ + session.setSessionID(sessA); + session.setStatus(statA); + } + private void fillSessionB(SubmitFilesSession session){ + session.setSessionID(sessB); + session.setStatus(statB); + } }