+/*
+ * 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;
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<String, String> attributes = new HashMap<String, String>();
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()) {
}
public void destroy() {
-
+ if (logoutWhenDestroyed)
+ JcrUtils.logoutQuietly(session);
}
public Node getNode() {
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();
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)
JcrUtils.discardUnderlyingSessionQuietly(node);
throw new SlcException("Cannot get close date from " + node, e);
}
+ if (logoutWhenDestroyed)
+ JcrUtils.logoutQuietly(session);
}
public Date getCloseDate() {
}
}
+ 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) {
this.attributes = attributes;
}
+ // public void setLogoutWhenDestroyed(Boolean logoutWhenDestroyed) {
+ // this.logoutWhenDestroyed = logoutWhenDestroyed;
+ // }
+
}