]> git.argeo.org Git - gpl/argeo-slc.git/blob - SlcExecutionDaoJcr.java
135f10760e91c3a73917918cd6c066b82ad63c56
[gpl/argeo-slc.git] / 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 String host = slcExecution.getHost();
49 if (host == null)
50 host = "UNKOWNHOST";
51 return "/slc/processes/" + JcrUtils.hostAsPath(host) + '/'
52 + JcrUtils.dateAsPath(cal) + "process";
53 }
54
55 public SlcExecution getSlcExecution(String uuid) {
56 try {
57 // TODO: optimize query
58 String queryString = "//process[@uuid='" + uuid + "']";
59 Query query = queryManager.createQuery(queryString, Query.XPATH);
60 Node node = JcrUtils.querySingleNode(query);
61 if (node == null)
62 return null;
63 return (SlcExecution) nodeMapper.load(node);
64 } catch (Exception e) {
65 throw new SlcException("Cannot load SLC execution " + uuid, e);
66 }
67 }
68
69 public List<SlcExecution> listSlcExecutions() {
70 List<SlcExecution> res = new ArrayList<SlcExecution>();
71 // TODO: optimize query
72 String queryString = "//process";
73 try {
74 Query query = queryManager.createQuery(queryString, Query.XPATH);
75 QueryResult qr = query.execute();
76 NodeIterator iterator = qr.getNodes();
77 while (iterator.hasNext()) {
78 Node node = iterator.nextNode();
79 SlcExecution slcExecution = (SlcExecution) nodeMapper
80 .load(node);
81 res.add(slcExecution);
82 }
83 return res;
84 } catch (Exception e) {
85 throw new SlcException("Cannot list SLC executions", e);
86 }
87 }
88
89 public void merge(SlcExecution slcExecution) {
90 throw new UnsupportedOperationException();
91 }
92
93 public void update(SlcExecution slcExecution) {
94 // TODO: optimize query
95 String queryString = "//process[@uuid='" + slcExecution.getUuid()
96 + "']";
97 try {
98 Query query = queryManager.createQuery(queryString, Query.XPATH);
99 Node node = JcrUtils.querySingleNode(query);
100 nodeMapper.update(node, slcExecution);
101 getSession().save();
102 } catch (Exception e) {
103 throw new SlcException("Cannot update " + slcExecution, e);
104 }
105 }
106
107 }