]>
git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
1 package org
.argeo
.slc
.core
.test
.tree
;
6 import java
.util
.SortedMap
;
7 import java
.util
.TreeMap
;
8 import java
.util
.Vector
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.slc
.core
.SlcException
;
14 import org
.argeo
.slc
.core
.structure
.SimpleSElement
;
15 import org
.argeo
.slc
.core
.structure
.StructureAware
;
16 import org
.argeo
.slc
.core
.structure
.StructureElement
;
17 import org
.argeo
.slc
.core
.structure
.StructureRegistry
;
18 import org
.argeo
.slc
.core
.structure
.tree
.TreeSPath
;
19 import org
.argeo
.slc
.core
.test
.TestResult
;
20 import org
.argeo
.slc
.core
.test
.TestResultListener
;
21 import org
.argeo
.slc
.core
.test
.TestResultPart
;
22 import org
.argeo
.slc
.core
.test
.TestRun
;
23 import org
.argeo
.slc
.core
.test
.TestRunAware
;
26 * Complex implementation of a test result compatible with a tree based
29 public class TreeTestResult
implements TestResult
, StructureAware
<TreeSPath
>,
30 Comparable
<TreeTestResult
> {
31 private Log log
= LogFactory
.getLog(TreeTestResult
.class);
33 private List
<TestResultListener
<TreeTestResult
>> listeners
= new Vector
<TestResultListener
<TreeTestResult
>>();
35 private TreeSPath currentPath
;
36 private TestRun currentTestRun
;
38 private Map
<String
, String
> rootTags
= new TreeMap
<String
, String
>();
40 private Date closeDate
;
42 private boolean isClosed
= false;
46 private SortedMap
<TreeSPath
, PartSubList
> resultParts
= new TreeMap
<TreeSPath
, PartSubList
>();
47 private SortedMap
<TreeSPath
, StructureElement
> elements
= new TreeMap
<TreeSPath
, StructureElement
>();
49 /** Sets the list of listeners. */
50 public void setListeners(List
<TestResultListener
<TreeTestResult
>> listeners
) {
51 this.listeners
= listeners
;
54 public void addResultPart(TestResultPart part
) {
55 if (currentPath
== null) {
56 throw new SlcException("No current path set.");
58 PartSubList subList
= resultParts
.get(currentPath
);
59 if (subList
== null) {
60 subList
= new PartSubList();
61 resultParts
.put(currentPath
, subList
);
63 if (part
instanceof TestRunAware
&& currentTestRun
!= null) {
64 ((TestRunAware
) part
).notifyTestRun(currentTestRun
);
66 subList
.getParts().add(part
);
69 synchronized (listeners
) {
70 for (TestResultListener
<TreeTestResult
> listener
: listeners
) {
71 listener
.resultPartAdded(this, part
);
76 public void notifyCurrentPath(StructureRegistry
<TreeSPath
> registry
,
78 if (registry
!= null) {
79 for (TreeSPath p
: path
.getHierarchyAsList()) {
80 if (!elements
.containsKey(p
)) {
81 StructureElement elem
= registry
.getElement(p
);
84 if(elements
.size()==0 && (elem
instanceof SimpleSElement
)){
85 SimpleSElement sElem
= ((SimpleSElement
)elem
).clone();
86 sElem
.getTags().putAll(rootTags
);
90 elements
.put(p
, elem
);
93 if (log
.isTraceEnabled())
94 log
.trace("An element is already registered for path "
95 + p
+ " and was not updated");
101 currentPath
= (TreeSPath
) path
;
104 /** Gets the current path. */
105 public TreeSPath
getCurrentPath() {
109 /** Gets all the results structured as a map of <code>PartSubList<code>s. */
110 public SortedMap
<TreeSPath
, PartSubList
> getResultParts() {
114 /** Used by ORM systems. */
115 void setResultParts(SortedMap
<TreeSPath
, PartSubList
> resultParts
) {
116 this.resultParts
= resultParts
;
119 public void close() {
121 throw new SlcException("Test Result #" + getUuid()
122 + " alredy closed.");
124 closeDate
= new Date();
126 synchronized (listeners
) {
127 for (TestResultListener
<TreeTestResult
> listener
: listeners
) {
128 listener
.close(this);
134 log
.info("Test Result #" + getUuid() + " closed.");
137 public Date
getCloseDate() {
141 /** Sets the close date (for ORM) */
142 public void setCloseDate(Date closeDate
) {
143 this.closeDate
= closeDate
;
146 public void notifyTestRun(TestRun testRun
) {
147 currentTestRun
= testRun
;
150 public SortedMap
<TreeSPath
, StructureElement
> getElements() {
154 public void setElements(SortedMap
<TreeSPath
, StructureElement
> pathNames
) {
155 this.elements
= pathNames
;
158 public String
getUuid() {
162 public void setUuid(String uuid
) {
166 public SortedMap
<TreeSPath
, StructureElement
> getRelatedElements(
168 SortedMap
<TreeSPath
, StructureElement
> relatedElements
= new TreeMap
<TreeSPath
, StructureElement
>();
169 List
<TreeSPath
> hierarchy
= path
.getHierarchyAsList();
170 for (TreeSPath currPath
: elements
.keySet()) {
171 if (hierarchy
.contains(currPath
)) {
172 relatedElements
.put(currPath
, elements
.get(currPath
));
175 return relatedElements
;
178 public TestRun
getCurrentTestRun() {
179 return currentTestRun
;
182 public int compareTo(TreeTestResult ttr2
) {
183 TreeTestResult ttr1
= this;
184 if (ttr1
.getCloseDate() != null && ttr2
.getCloseDate() != null) {
185 return -ttr1
.getCloseDate().compareTo(ttr2
.getCloseDate());
186 } else if (ttr1
.getCloseDate() != null && ttr2
.getCloseDate() == null) {
188 } else if (ttr1
.getCloseDate() == null && ttr2
.getCloseDate() != null) {
191 return ttr1
.getUuid().compareTo(ttr2
.getUuid());
195 public Map
<String
, String
> getRootTags() {
199 public void setRootTags(Map
<String
, String
> rootTags
) {
200 this.rootTags
= rootTags
;