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 String host
= slcExecution
.getHost();
51 return "/slc/processes/" + JcrUtils
.hostAsPath(host
) + '/'
52 + JcrUtils
.dateAsPath(cal
) + "process";
55 public SlcExecution
getSlcExecution(String uuid
) {
57 // TODO: optimize query
58 String queryString
= "//process[@uuid='" + uuid
+ "']";
59 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
60 Node node
= JcrUtils
.querySingleNode(query
);
63 return (SlcExecution
) nodeMapper
.load(node
);
64 } catch (Exception e
) {
65 throw new SlcException("Cannot load SLC execution " + uuid
, e
);
69 public List
<SlcExecution
> listSlcExecutions() {
70 List
<SlcExecution
> res
= new ArrayList
<SlcExecution
>();
71 // TODO: optimize query
72 String queryString
= "//process";
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
81 res
.add(slcExecution
);
84 } catch (Exception e
) {
85 throw new SlcException("Cannot list SLC executions", e
);
89 public void merge(SlcExecution slcExecution
) {
90 throw new UnsupportedOperationException();
93 public void update(SlcExecution slcExecution
) {
94 // TODO: optimize query
95 String queryString
= "//process[@uuid='" + slcExecution
.getUuid()
98 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
99 Node node
= JcrUtils
.querySingleNode(query
);
100 nodeMapper
.update(node
, slcExecution
);
102 } catch (Exception e
) {
103 throw new SlcException("Cannot update " + slcExecution
, e
);