1 package org
.argeo
.slc
.jcr
.dao
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Calendar
;
6 import java
.util
.GregorianCalendar
;
10 import javax
.jcr
.NodeIterator
;
11 import javax
.jcr
.query
.Query
;
12 import javax
.jcr
.query
.QueryResult
;
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
;
20 public class SlcExecutionDaoJcr
extends AbstractSlcJcrDao
implements
22 // private final static Log log =
23 // LogFactory.getLog(SlcExecutionDaoJcr.class);
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
);
34 public void create(SlcExecution slcExecution
) {
36 nodeMapper
.save(getSession(), basePath(slcExecution
), slcExecution
);
38 } catch (Exception e
) {
39 throw new SlcException("Cannot create slcExecution" + slcExecution
,
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";
52 public SlcExecution
getSlcExecution(String uuid
) {
54 // TODO: optimize query
55 String queryString
= "//process[@uuid='" + uuid
+ "']";
56 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
57 Node node
= JcrUtils
.querySingleNode(query
);
60 return (SlcExecution
) nodeMapper
.load(node
);
61 } catch (Exception e
) {
62 throw new SlcException("Cannot load SLC execution " + uuid
, e
);
66 public List
<SlcExecution
> listSlcExecutions() {
67 List
<SlcExecution
> res
= new ArrayList
<SlcExecution
>();
68 // TODO: optimize query
69 String queryString
= "//process";
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
78 res
.add(slcExecution
);
81 } catch (Exception e
) {
82 throw new SlcException("Cannot list SLC executions", e
);
86 public void merge(SlcExecution slcExecution
) {
87 throw new UnsupportedOperationException();
90 public void update(SlcExecution slcExecution
) {
91 // TODO: optimize query
92 String queryString
= "//process[@uuid='" + slcExecution
.getUuid()
95 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
96 Node node
= JcrUtils
.querySingleNode(query
);
97 nodeMapper
.update(node
, slcExecution
);
99 } catch (Exception e
) {
100 throw new SlcException("Cannot update " + slcExecution
, e
);