]> 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
63cada00878e1201f5599084b5f6b18ab2d2651b
[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.io.InputStream;
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.Session;
12 import javax.jcr.Workspace;
13 import javax.jcr.query.Query;
14 import javax.jcr.query.QueryManager;
15 import javax.jcr.query.QueryResult;
16
17 import org.apache.commons.io.IOUtils;
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;
24 import org.springframework.oxm.Marshaller;
25 import org.springframework.xml.transform.StringResult;
26
27 public class SlcExecutionDaoJcr implements SlcExecutionDao {
28 private Session session;
29
30 private Marshaller marshaller;
31
32 private BeanNodeMapper beanNodeMapper = new BeanNodeMapper();
33
34 public void addSteps(String slcExecutionId,
35 List<SlcExecutionStep> additionalSteps) {
36 // TODO Auto-generated method stub
37
38 }
39
40 public void create(SlcExecution slcExecution) {
41 StringResult result = new StringResult();
42 InputStream in = null;
43 try {
44 beanNodeMapper.saveOrUpdate(getSession(), basePath(slcExecution),
45 slcExecution);
46
47 // TODO: optimize with piped streams
48 // marshaller.marshal(slcExecution, result);
49 // in = new ByteArrayInputStream(result.toString().getBytes());
50 //
51 // String basePath = basePath(slcExecution);
52 // JcrUtils.mkdirs(getSession(), basePath);
53 //
54 // session.importXML(basePath(slcExecution), in,
55 // ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
56
57 JcrUtils.debug(session.getRootNode());
58 session.save();
59 } catch (Exception e) {
60 throw new SlcException("Cannot import " + slcExecution, e);
61 } finally {
62 IOUtils.closeQuietly(in);
63 }
64 }
65
66 protected String basePath(SlcExecution slcExecution) {
67 Calendar cal = new GregorianCalendar();
68 cal.setTime(new Date());
69 // cal.setTime(slcExecution.getStartDate());
70 return "/slc/processes/" + slcExecution.getHost().replace('.', '/')
71 + '/' + JcrUtils.dateAsPath(cal) + slcExecution.getUuid();
72 }
73
74 public SlcExecution getSlcExecution(String uuid) {
75 try {
76 Workspace workspace = session.getWorkspace();
77 QueryManager qm = workspace.getQueryManager();
78
79 String queryString = "//*[@uuid='" + uuid + "']";
80 Query query = qm.createQuery(queryString, Query.XPATH);
81 QueryResult queryResult = query.execute();
82 NodeIterator nodeIterator = queryResult.getNodes();
83 Node node;
84 if (nodeIterator.hasNext())
85 node = nodeIterator.nextNode();
86 else
87 throw new SlcException("Query returned no node.");
88
89 if (nodeIterator.hasNext())
90 throw new SlcException("Query returned more than one node.");
91
92 return (SlcExecution) beanNodeMapper.nodeToBean(node);
93 } catch (Exception e) {
94 throw new SlcException("Cannot load SLC execution " + uuid, e);
95 }
96 }
97
98 public List<SlcExecution> listSlcExecutions() {
99 // TODO Auto-generated method stub
100 return null;
101 }
102
103 public void merge(SlcExecution slcExecution) {
104 // TODO Auto-generated method stub
105
106 }
107
108 public void update(SlcExecution slcExecution) {
109 // TODO Auto-generated method stub
110
111 }
112
113 public void setSession(Session session) {
114 this.session = session;
115 }
116
117 public void setMarshaller(Marshaller marshaller) {
118 this.marshaller = marshaller;
119 }
120
121 protected Session getSession() {
122 return session;
123 }
124
125 }