package org.argeo.slc.core.test.tree;\r
\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
import java.util.Date;\r
import java.util.List;\r
import java.util.Map;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
-import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.core.structure.StructureAware;\r
-import org.argeo.slc.core.structure.StructureElement;\r
-import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.SlcException;\r
+import org.argeo.slc.core.attachment.Attachment;\r
+import org.argeo.slc.core.attachment.AttachmentsEnabled;\r
+import org.argeo.slc.core.attachment.SimpleAttachment;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.TestResult;\r
-import org.argeo.slc.core.test.TestResultListener;\r
-import org.argeo.slc.core.test.TestResultPart;\r
-import org.argeo.slc.core.test.TestRun;\r
-import org.argeo.slc.core.test.TestRunAware;\r
+import org.argeo.slc.structure.StructureAware;\r
+import org.argeo.slc.structure.StructureElement;\r
+import org.argeo.slc.structure.StructureRegistry;\r
+import org.argeo.slc.test.TestResult;\r
+import org.argeo.slc.test.TestResultListener;\r
+import org.argeo.slc.test.TestResultPart;\r
+import org.argeo.slc.test.TestRun;\r
+import org.argeo.slc.test.TestRunAware;\r
\r
/**\r
* Complex implementation of a test result compatible with a tree based\r
* structure.\r
*/\r
public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,\r
- Comparable<TreeTestResult> {\r
+ Comparable<TreeTestResult>, AttachmentsEnabled, Serializable {\r
+ private static final long serialVersionUID = 1L;\r
+\r
private Log log = LogFactory.getLog(TreeTestResult.class);\r
\r
private List<TestResultListener<TreeTestResult>> listeners = new Vector<TestResultListener<TreeTestResult>>();\r
\r
private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
+ private List<SimpleAttachment> attachments = new ArrayList<SimpleAttachment>();\r
\r
private Map<String, String> attributes = new TreeMap<String, String>();\r
\r
for (TestResultListener<TreeTestResult> listener : listeners) {\r
listener.close(this);\r
}\r
- listeners.clear();\r
}\r
isClosed = true;\r
\r
public int compareTo(TreeTestResult ttr2) {\r
TreeTestResult ttr1 = this;\r
if (ttr1.getCloseDate() != null && ttr2.getCloseDate() != null) {\r
- return -ttr1.getCloseDate().compareTo(ttr2.getCloseDate());\r
+ if (ttr1.getCloseDate().equals(ttr2.getCloseDate()))\r
+ return compareUuid(ttr1, ttr2);\r
+ else\r
+ return -ttr1.getCloseDate().compareTo(ttr2.getCloseDate());\r
} else if (ttr1.getCloseDate() != null && ttr2.getCloseDate() == null) {\r
return 1;\r
} else if (ttr1.getCloseDate() == null && ttr2.getCloseDate() != null) {\r
return -1;\r
} else {\r
+ return compareUuid(ttr1, ttr2);\r
+ }\r
+ }\r
+\r
+ protected int compareUuid(TestResult ttr1, TestResult ttr2) {\r
+ if (ttr1.getUuid() == null || ttr2.getUuid() == null)\r
+ throw new SlcException(\r
+ "Cannot compare tree test result with null uuid");\r
+ else {\r
+ if (ttr1.getUuid().equals(ttr2.getUuid()))\r
+ return 0;\r
return ttr1.getUuid().compareTo(ttr2.getUuid());\r
}\r
}\r
\r
+ public boolean equals(Object obj) {\r
+ if (obj instanceof TestResult)\r
+ return compareUuid(this, ((TestResult) obj)) == 0;\r
+ else\r
+ return false;\r
+ }\r
+\r
+ public int hashCode() {\r
+ if (uuid != null)\r
+ return uuid.hashCode();\r
+ else\r
+ return super.hashCode();\r
+ }\r
+\r
public Map<String, String> getAttributes() {\r
return attributes;\r
}\r
this.warnIfAlreadyClosed = warnIfAlreadyClosed;\r
}\r
\r
+ public List<SimpleAttachment> getAttachments() {\r
+ return attachments;\r
+ }\r
+\r
+ public void setAttachments(List<SimpleAttachment> attachments) {\r
+ this.attachments = attachments;\r
+ }\r
+\r
+ public void addAttachment(Attachment attachment) {\r
+ attachments.add((SimpleAttachment) attachment);\r
+ synchronized (listeners) {\r
+ for (TestResultListener<TreeTestResult> listener : listeners) {\r
+ if (listener instanceof TreeTestResultListener)\r
+ ((TreeTestResultListener) listener).addAttachment(this,\r
+ attachment);\r
+ }\r
+ }\r
+ }\r
+\r
}\r