+/*\r
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
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
import java.util.SortedMap;\r
import java.util.TreeMap;\r
+import java.util.UUID;\r
import java.util.Vector;\r
\r
import org.apache.commons.logging.Log;\r
*/\r
public class TreeTestResult implements TestResult, StructureAware<TreeSPath>,\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 TreeSPath currentPath;\r
- private TestRun currentTestRun;\r
+ private static final long serialVersionUID = 1L;\r
+ private final static Log log = LogFactory.getLog(TreeTestResult.class);\r
\r
+ // Persistence data\r
+ private String uuid = UUID.randomUUID().toString();\r
private Date closeDate;\r
\r
- private Boolean isClosed = false;\r
-\r
- private Boolean warnIfAlreadyClosed = true;\r
-\r
- private String uuid;\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
+ // Headers. Used to accelerate request on a specific test result.\r
+ private SortedMap<String, String> attributes = new TreeMap<String, String>();\r
+\r
+ // Runtime Data\r
+ private TreeSPath currentPath;\r
+ private transient TestRun currentTestRun;\r
+ private Boolean warnIfAlreadyClosed = true;\r
+ private Boolean strictChecks = false;\r
+ // TODO is it really necessary closeDate == null ?\r
+ private Boolean isClosed = false;\r
+\r
+ private transient List<TestResultListener<TreeTestResult>> listeners = new Vector<TestResultListener<TreeTestResult>>();\r
\r
/** Sets the list of listeners. */\r
public void setListeners(List<TestResultListener<TreeTestResult>> listeners) {\r
\r
public void addResultPart(TestResultPart part) {\r
if (isClosed)\r
- throw new SlcException("Cannot result parts to a closed result");\r
+ notifyIssue(\r
+ "Trying to add result parts to an already closed result,"\r
+ + " consider changing the scope of this test result:"\r
+ + " you are referencing the same stored data with each new call.",\r
+ null);\r
\r
if (currentPath == null)\r
throw new SlcException("No current path set.");\r
}\r
}\r
\r
+ protected void notifyIssue(String msg, Exception e) {\r
+ if (strictChecks)\r
+ throw new SlcException(msg, e);\r
+ else\r
+ log.error(msg, e);\r
+ }\r
+\r
public void notifyCurrentPath(StructureRegistry<TreeSPath> registry,\r
TreeSPath path) {\r
if (registry != null) {\r
return resultParts;\r
}\r
\r
- /** Used by ORM systems. */\r
- void setResultParts(SortedMap<TreeSPath, PartSubList> resultParts) {\r
+ /**\r
+ * Used by ORM systems. Changed to public in order to enable jcr persistence\r
+ */\r
+ public void setResultParts(SortedMap<TreeSPath, PartSubList> resultParts) {\r
this.resultParts = resultParts;\r
}\r
\r
return super.hashCode();\r
}\r
\r
- public Map<String, String> getAttributes() {\r
+ public SortedMap<String, String> getAttributes() {\r
return attributes;\r
}\r
\r
- public void setAttributes(Map<String, String> attributes) {\r
+ public void setAttributes(SortedMap<String, String> attributes) {\r
this.attributes = attributes;\r
}\r
\r
}\r
}\r
\r
+ public void setStrictChecks(Boolean strictChecks) {\r
+ this.strictChecks = strictChecks;\r
+ }\r
+\r
}\r