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=66b658b750e06dd786c90f3681ab1461b1ab6551;hb=844bc386a1854a29d282a23ffda820ed7a52b74e;hp=ea2495e3ec19889708ae2bceacf9a75a3fc6a3d9;hpb=b3c5eaf56f98afc3e1068c154320b51e10b6424b;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 ea2495e3e..66b658b75 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 @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.argeo.slc.jcr; import java.util.Date; @@ -9,35 +24,45 @@ import java.util.UUID; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.PropertyIterator; +import javax.jcr.Repository; import javax.jcr.Session; import javax.jcr.query.Query; 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 { +/** + * {@link TestResult} wrapping a JCR node of type + * {@link SlcTypes#SLC_TEST_RESULT}. + */ +public class JcrTestResult implements TestResult, SlcNames, AttachmentsEnabled { /** Should only be set for an already existing result. */ private String uuid; + private Repository repository; private Session session; - private String resultType = SlcTypes.SLC_RESULT; + private String resultType = SlcTypes.SLC_TEST_RESULT; /** cached for performance purposes */ private String nodeIdentifier = null; + private Boolean logoutWhenDestroyed = true; + private Map attributes = new HashMap(); public void init() { try { + session = repository.login(); if (uuid == null) { // create new result uuid = UUID.randomUUID().toString(); - String path = SlcJcrUtils.createResultPath(uuid); + String path = SlcJcrUtils.createResultPath(session, uuid); Node resultNode = JcrUtils.mkdirs(session, path, resultType); resultNode.setProperty(SLC_UUID, uuid); for (String attr : attributes.keySet()) { @@ -58,7 +83,8 @@ public class JcrTestResult implements TestResult, SlcNames { } public void destroy() { - + if (logoutWhenDestroyed) + JcrUtils.logoutQuietly(session); } public Node getNode() { @@ -68,9 +94,9 @@ public class JcrTestResult implements TestResult, SlcNames { return session.getNodeByIdentifier(nodeIdentifier); } else { QueryManager qm = session.getWorkspace().getQueryManager(); - Query q = qm.createQuery( - "select * from [slc:result] where [slc:uuid]='" + uuid - + "'", Query.JCR_SQL2); + Query q = qm.createQuery("select * from [" + + SlcTypes.SLC_TEST_RESULT + "] where [slc:uuid]='" + + uuid + "'", Query.JCR_SQL2); resultNode = JcrUtils.querySingleNode(q); if (resultNode != null) nodeIdentifier = resultNode.getIdentifier(); @@ -87,9 +113,8 @@ public class JcrTestResult implements TestResult, SlcNames { public void addResultPart(TestResultPart testResultPart) { Node node = getNode(); try { - // TODO: find a better way to name it by default - String partName = Long.toString(System.currentTimeMillis()); - Node resultPartNode = node.addNode(partName, SlcTypes.SLC_CHECK); + Node resultPartNode = node.addNode(SlcNames.SLC_STATUS, + SlcTypes.SLC_CHECK); resultPartNode.setProperty(SLC_SUCCESS, testResultPart.getStatus() == TestStatus.PASSED); if (testResultPart.getMessage() != null) @@ -128,6 +153,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() { @@ -157,12 +184,16 @@ public class JcrTestResult implements TestResult, SlcNames { } } + public void addAttachment(Attachment attachment) { + // TODO implement it + } + public void setUuid(String uuid) { this.uuid = uuid; } - public void setSession(Session session) { - this.session = session; + public void setRepository(Repository repository) { + this.repository = repository; } public void setResultType(String resultType) { @@ -177,4 +208,8 @@ public class JcrTestResult implements TestResult, SlcNames { this.attributes = attributes; } + // public void setLogoutWhenDestroyed(Boolean logoutWhenDestroyed) { + // this.logoutWhenDestroyed = logoutWhenDestroyed; + // } + }