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
.RepositoryException
;
12 import javax
.jcr
.Session
;
13 import javax
.jcr
.Workspace
;
14 import javax
.jcr
.query
.Query
;
15 import javax
.jcr
.query
.QueryManager
;
16 import javax
.jcr
.query
.QueryResult
;
18 import org
.argeo
.jcr
.BeanNodeMapper
;
19 import org
.argeo
.jcr
.JcrUtils
;
20 import org
.argeo
.slc
.SlcException
;
21 import org
.argeo
.slc
.dao
.process
.SlcExecutionDao
;
22 import org
.argeo
.slc
.process
.SlcExecution
;
23 import org
.argeo
.slc
.process
.SlcExecutionStep
;
25 public class SlcExecutionDaoJcr
implements SlcExecutionDao
{
26 private Session session
;
27 private Workspace workspace
;
28 private QueryManager queryManager
;
30 private BeanNodeMapper beanNodeMapper
= new BeanNodeMapper();
34 workspace
= session
.getWorkspace();
35 queryManager
= workspace
.getQueryManager();
36 } catch (RepositoryException e
) {
37 throw new SlcException("Cannot initialize DAO", e
);
41 public void addSteps(String slcExecutionId
,
42 List
<SlcExecutionStep
> additionalSteps
) {
43 // TODO: optimize, do one single query
44 SlcExecution slcExecution
= getSlcExecution(slcExecutionId
);
45 slcExecution
.getSteps().addAll(additionalSteps
);
50 public void create(SlcExecution slcExecution
) {
52 beanNodeMapper
.save(getSession(), basePath(slcExecution
),
55 } catch (Exception e
) {
56 throw new SlcException("Cannot import " + slcExecution
, e
);
60 protected String
basePath(SlcExecution slcExecution
) {
61 Calendar cal
= new GregorianCalendar();
62 cal
.setTime(new Date());
63 // cal.setTime(slcExecution.getStartDate());
64 return "/slc/processes/" + slcExecution
.getHost().replace('.', '/')
65 + '/' + JcrUtils
.dateAsPath(cal
) + "process";
68 public SlcExecution
getSlcExecution(String uuid
) {
70 // TODO: optimize query
71 String queryString
= "//process[@uuid='" + uuid
+ "']";
72 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
73 Node node
= JcrUtils
.querySingleNode(query
);
76 return (SlcExecution
) beanNodeMapper
.nodeToBean(node
);
77 } catch (Exception e
) {
78 throw new SlcException("Cannot load SLC execution " + uuid
, e
);
82 public List
<SlcExecution
> listSlcExecutions() {
83 List
<SlcExecution
> res
= new ArrayList
<SlcExecution
>();
84 // TODO: optimize query
85 String queryString
= "//process";
87 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
88 QueryResult qr
= query
.execute();
89 NodeIterator iterator
= qr
.getNodes();
90 while (iterator
.hasNext()) {
91 Node node
= iterator
.nextNode();
92 SlcExecution slcExecution
= (SlcExecution
) beanNodeMapper
94 res
.add(slcExecution
);
97 } catch (Exception e
) {
98 throw new SlcException("Cannot list SLC executions", e
);
102 public void merge(SlcExecution slcExecution
) {
103 throw new UnsupportedOperationException();
106 public void update(SlcExecution slcExecution
) {
107 // TODO: optimize query
108 String queryString
= "//process[@uuid='" + slcExecution
.getUuid()
111 Query query
= queryManager
.createQuery(queryString
, Query
.XPATH
);
112 Node node
= JcrUtils
.querySingleNode(query
);
113 beanNodeMapper
.update(node
, slcExecution
);
114 } catch (Exception e
) {
115 throw new SlcException("Cannot update " + slcExecution
, e
);
119 public void setSession(Session session
) {
120 this.session
= session
;
123 protected Session
getSession() {
127 public void setBeanNodeMapper(BeanNodeMapper beanNodeMapper
) {
128 this.beanNodeMapper
= beanNodeMapper
;