]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java
c64139eaec131d964e563b4ec4a760c4a414a01b
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / dao / SlcExecutionDaoJcr.java
1 package org.argeo.slc.jcr.dao;
2
3 import java.util.ArrayList;
4 import java.util.Calendar;
5 import java.util.Date;
6 import java.util.GregorianCalendar;
7 import java.util.List;
8
9 import javax.jcr.Node;
10 import javax.jcr.NodeIterator;
11 import javax.jcr.query.Query;
12 import javax.jcr.query.QueryResult;
13
14 import org.argeo.jcr.JcrUtils;
15 import org.argeo.slc.SlcException;
16 import org.argeo.slc.dao.process.SlcExecutionDao;
17 import org.argeo.slc.process.SlcExecution;
18 import org.argeo.slc.process.SlcExecutionStep;
19
20 public class SlcExecutionDaoJcr extends AbstractSlcJcrDao implements
21 SlcExecutionDao {
22 // private final static Log log =
23 // LogFactory.getLog(SlcExecutionDaoJcr.class);
24
25 public void addSteps(String slcExecutionId,
26 List<SlcExecutionStep> additionalSteps) {
27 // TODO: optimize, do one single query
28 SlcExecution slcExecution = getSlcExecution(slcExecutionId);
29 slcExecution.getSteps().addAll(additionalSteps);
30 update(slcExecution);
31
32 }
33
34 public void create(SlcExecution slcExecution) {
35 try {
36 nodeMapper.save(getSession(), basePath(slcExecution), slcExecution);
37 getSession().save();
38 } catch (Exception e) {
39 throw new SlcException("Cannot create slcExecution" + slcExecution,
40 e);
41 }
42 }
43
44 protected String basePath(SlcExecution slcExecution) {
45 Calendar cal = new GregorianCalendar();
46 cal.setTime(new Date());
47 // cal.setTime(slcExecution.getStartDate());
48 return "/slc/processes/" + JcrUtils.hostAsPath(slcExecution.getHost())
49 + '/' + JcrUtils.dateAsPath(cal) + "process";
50 }
51
52 public SlcExecution getSlcExecution(String uuid) {
53 try {
54 // TODO: optimize query
55 String queryString = "//process[@uuid='" + uuid + "']";
56 Query query = queryManager.createQuery(queryString, Query.XPATH);
57 Node node = JcrUtils.querySingleNode(query);
58 if (node == null)
59 return null;
60 return (SlcExecution) nodeMapper.load(node);
61 } catch (Exception e) {
62 throw new SlcException("Cannot load SLC execution " + uuid, e);
63 }
64 }
65
66 public List<SlcExecution> listSlcExecutions() {
67 List<SlcExecution> res = new ArrayList<SlcExecution>();
68 // TODO: optimize query
69 String queryString = "//process";
70 try {
71 Query query = queryManager.createQuery(queryString, Query.XPATH);
72 QueryResult qr = query.execute();
73 NodeIterator iterator = qr.getNodes();
74 while (iterator.hasNext()) {
75 Node node = iterator.nextNode();
76 SlcExecution slcExecution = (SlcExecution) nodeMapper
77 .load(node);
78 res.add(slcExecution);
79 }
80 return res;
81 } catch (Exception e) {
82 throw new SlcException("Cannot list SLC executions", e);
83 }
84 }
85
86 public void merge(SlcExecution slcExecution) {
87 throw new UnsupportedOperationException();
88 }
89
90 public void update(SlcExecution slcExecution) {
91 // TODO: optimize query
92 String queryString = "//process[@uuid='" + slcExecution.getUuid()
93 + "']";
94 try {
95 Query query = queryManager.createQuery(queryString, Query.XPATH);
96 Node node = JcrUtils.querySingleNode(query);
97 nodeMapper.update(node, slcExecution);
98 getSession().save();
99 } catch (Exception e) {
100 throw new SlcException("Cannot update " + slcExecution, e);
101 }
102 }
103
104 }