X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2FJcrTestResult.java;h=daeb3249135caad35a12aeabc9eb5cb2f2cd900a;hb=a66f1580f7f1fcd781917d749eb9b29670f661f5;hp=74a31678df4dcce1d5f490491d990571431303fa;hpb=99acd32f30678d05eaacc6c5db41d6134d9ce6f9;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java index 74a31678d..daeb32491 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java @@ -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 attributes = new HashMap(); + 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 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; + } + }