]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrTestResult.java
Deal with destruction callbacks
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / JcrTestResult.java
index ea2495e3ec19889708ae2bceacf9a75a3fc6a3d9..d7f0b434d5d74b0c7814f93144573b504d9b86d1 100644 (file)
@@ -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;
@@ -6,26 +21,43 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import javax.jcr.Credentials;
 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.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 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 {
+       private final static Log log = LogFactory.getLog(JcrTestResult.class);
+
        /** Should only be set for an already existing result. */
        private String uuid;
+       private Repository repository;
        private Session session;
-       private String resultType = SlcTypes.SLC_RESULT;
+       /**
+        * For testing purposes, best practice is to not set them explicitely but
+        * via other mechanisms such as JAAS or SPring Security.
+        */
+       private Credentials credentials = null;
+       private String resultType = SlcTypes.SLC_TEST_RESULT;
 
        /** cached for performance purposes */
        private String nodeIdentifier = null;
@@ -34,10 +66,11 @@ public class JcrTestResult implements TestResult, SlcNames {
 
        public void init() {
                try {
+                       session = repository.login(credentials);
                        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()) {
@@ -50,6 +83,8 @@ public class JcrTestResult implements TestResult, SlcNames {
                                        resultNode.setProperty(property, attributes.get(attr));
                                }
                                session.save();
+                               if (log.isDebugEnabled())
+                                       log.debug("Created test result " + uuid);
                        }
                } catch (Exception e) {
                        JcrUtils.discardQuietly(session);
@@ -58,7 +93,9 @@ public class JcrTestResult implements TestResult, SlcNames {
        }
 
        public void destroy() {
-
+               JcrUtils.logoutQuietly(session);
+               if (log.isTraceEnabled())
+                       log.trace("Logged out session for result " + uuid);
        }
 
        public Node getNode() {
@@ -68,9 +105,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();
@@ -82,14 +119,17 @@ public class JcrTestResult implements TestResult, SlcNames {
        }
 
        public void notifyTestRun(TestRun testRun) {
+               // TODO store meta data about the test running
+               // if (log.isDebugEnabled())
+               // log.debug("Running test "
+               // + testRun.getTestDefinition().getClass().getName() + "...");
        }
 
        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)
@@ -116,6 +156,7 @@ public class JcrTestResult implements TestResult, SlcNames {
                }
        }
 
+       /** JCR session is NOT logged out */
        public void close() {
                Node node = getNode();
                try {
@@ -157,12 +198,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 +222,7 @@ public class JcrTestResult implements TestResult, SlcNames {
                this.attributes = attributes;
        }
 
+       public void setCredentials(Credentials credentials) {
+               this.credentials = credentials;
+       }
 }