]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java
Logout when closing
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / JcrTestResult.java
index 74a31678df4dcce1d5f490491d990571431303fa..daeb3249135caad35a12aeabc9eb5cb2f2cd900a 100644 (file)
@@ -15,13 +15,15 @@ import javax.jcr.query.QueryManager;
 
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
+import org.argeo.slc.core.attachment.Attachment;
+import org.argeo.slc.core.attachment.AttachmentsEnabled;
 import org.argeo.slc.test.TestResult;
 import org.argeo.slc.test.TestResultPart;
 import org.argeo.slc.test.TestRun;
 import org.argeo.slc.test.TestStatus;
 
 /** {@link TestResult} wrapping a JCR node of type {@link SlcTypes#SLC_RESULT}. */
-public class JcrTestResult implements TestResult, SlcNames {
+public class JcrTestResult implements TestResult, SlcNames, AttachmentsEnabled {
        /** Should only be set for an already existing result. */
        private String uuid;
        private Session session;
@@ -30,6 +32,10 @@ public class JcrTestResult implements TestResult, SlcNames {
        /** cached for performance purposes */
        private String nodeIdentifier = null;
 
+       private Boolean logoutWhenDestroyed = true;
+
+       private Map<String, String> attributes = new HashMap<String, String>();
+
        public void init() {
                try {
                        if (uuid == null) {
@@ -38,6 +44,15 @@ public class JcrTestResult implements TestResult, SlcNames {
                                String path = SlcJcrUtils.createResultPath(uuid);
                                Node resultNode = JcrUtils.mkdirs(session, path, resultType);
                                resultNode.setProperty(SLC_UUID, uuid);
+                               for (String attr : attributes.keySet()) {
+                                       String property = attr;
+                                       // compatibility with legacy applications
+                                       if ("testCase".equals(attr))
+                                               property = SLC_TEST_CASE;
+                                       else if ("testCaseType".equals(attr))
+                                               property = SLC_TEST_CASE_TYPE;
+                                       resultNode.setProperty(property, attributes.get(attr));
+                               }
                                session.save();
                        }
                } catch (Exception e) {
@@ -47,7 +62,8 @@ public class JcrTestResult implements TestResult, SlcNames {
        }
 
        public void destroy() {
-
+               if (logoutWhenDestroyed)
+                       JcrUtils.logoutQuietly(session);
        }
 
        public Node getNode() {
@@ -117,6 +133,8 @@ public class JcrTestResult implements TestResult, SlcNames {
                        JcrUtils.discardUnderlyingSessionQuietly(node);
                        throw new SlcException("Cannot get close date from " + node, e);
                }
+               if (logoutWhenDestroyed)
+                       JcrUtils.logoutQuietly(session);
        }
 
        public Date getCloseDate() {
@@ -146,6 +164,10 @@ public class JcrTestResult implements TestResult, SlcNames {
                }
        }
 
+       public void addAttachment(Attachment attachment) {
+               // TODO implement it
+       }
+
        public void setUuid(String uuid) {
                this.uuid = uuid;
        }
@@ -158,4 +180,16 @@ public class JcrTestResult implements TestResult, SlcNames {
                this.resultType = resultType;
        }
 
+       public void setAttributes(Map<String, String> attributes) {
+               if (uuid != null)
+                       throw new SlcException(
+                                       "Attributes cannot be set on an already initialized test result."
+                                                       + " Update the related JCR node directly instead.");
+               this.attributes = attributes;
+       }
+
+       public void setLogoutWhenDestroyed(Boolean logoutWhenDestroyed) {
+               this.logoutWhenDestroyed = logoutWhenDestroyed;
+       }
+
 }