]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java
Improve deployment
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / dao / SlcExecutionDaoJcr.java
index 30cc439ac3f5cb549981bdf62c12313a9a9bab7d..135f10760e91c3a73917918cd6c066b82ad63c56 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.jcr.dao;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -7,37 +8,36 @@ import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
 import javax.jcr.query.Query;
-import javax.jcr.query.QueryManager;
 import javax.jcr.query.QueryResult;
 
-import org.argeo.jcr.BeanNodeMapper;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.dao.process.SlcExecutionDao;
 import org.argeo.slc.process.SlcExecution;
 import org.argeo.slc.process.SlcExecutionStep;
 
-public class SlcExecutionDaoJcr implements SlcExecutionDao {
-       private Session session;
-
-       private BeanNodeMapper beanNodeMapper = new BeanNodeMapper();
+public class SlcExecutionDaoJcr extends AbstractSlcJcrDao implements
+               SlcExecutionDao {
+       // private final static Log log =
+       // LogFactory.getLog(SlcExecutionDaoJcr.class);
 
        public void addSteps(String slcExecutionId,
                        List<SlcExecutionStep> additionalSteps) {
-               // TODO Auto-generated method stub
+               // TODO: optimize, do one single query
+               SlcExecution slcExecution = getSlcExecution(slcExecutionId);
+               slcExecution.getSteps().addAll(additionalSteps);
+               update(slcExecution);
 
        }
 
        public void create(SlcExecution slcExecution) {
                try {
-                       beanNodeMapper.saveOrUpdate(getSession(), basePath(slcExecution),
-                                       slcExecution);
-                       session.save();
+                       nodeMapper.save(getSession(), basePath(slcExecution), slcExecution);
+                       getSession().save();
                } catch (Exception e) {
-                       throw new SlcException("Cannot import " + slcExecution, e);
+                       throw new SlcException("Cannot create slcExecution" + slcExecution,
+                                       e);
                }
        }
 
@@ -45,55 +45,63 @@ public class SlcExecutionDaoJcr implements SlcExecutionDao {
                Calendar cal = new GregorianCalendar();
                cal.setTime(new Date());
                // cal.setTime(slcExecution.getStartDate());
-               return "/slc/processes/" + slcExecution.getHost().replace('.', '/')
-                               + '/' + JcrUtils.dateAsPath(cal) + slcExecution.getUuid();
+               String host = slcExecution.getHost();
+               if (host == null)
+                       host = "UNKOWNHOST";
+               return "/slc/processes/" + JcrUtils.hostAsPath(host) + '/'
+                               + JcrUtils.dateAsPath(cal) + "process";
        }
 
        public SlcExecution getSlcExecution(String uuid) {
                try {
-                       Workspace workspace = session.getWorkspace();
-                       QueryManager qm = workspace.getQueryManager();
-
-                       String queryString = "//*[@uuid='" + uuid + "']";
-                       Query query = qm.createQuery(queryString, Query.XPATH);
-                       QueryResult queryResult = query.execute();
-                       NodeIterator nodeIterator = queryResult.getNodes();
-                       Node node;
-                       if (nodeIterator.hasNext())
-                               node = nodeIterator.nextNode();
-                       else
-                               throw new SlcException("Query returned no node.");
-
-                       if (nodeIterator.hasNext())
-                               throw new SlcException("Query returned more than one node.");
-
-                       return (SlcExecution) beanNodeMapper.nodeToBean(node);
+                       // TODO: optimize query
+                       String queryString = "//process[@uuid='" + uuid + "']";
+                       Query query = queryManager.createQuery(queryString, Query.XPATH);
+                       Node node = JcrUtils.querySingleNode(query);
+                       if (node == null)
+                               return null;
+                       return (SlcExecution) nodeMapper.load(node);
                } catch (Exception e) {
                        throw new SlcException("Cannot load SLC execution " + uuid, e);
                }
        }
 
        public List<SlcExecution> listSlcExecutions() {
-               // TODO Auto-generated method stub
-               return null;
+               List<SlcExecution> res = new ArrayList<SlcExecution>();
+               // TODO: optimize query
+               String queryString = "//process";
+               try {
+                       Query query = queryManager.createQuery(queryString, Query.XPATH);
+                       QueryResult qr = query.execute();
+                       NodeIterator iterator = qr.getNodes();
+                       while (iterator.hasNext()) {
+                               Node node = iterator.nextNode();
+                               SlcExecution slcExecution = (SlcExecution) nodeMapper
+                                               .load(node);
+                               res.add(slcExecution);
+                       }
+                       return res;
+               } catch (Exception e) {
+                       throw new SlcException("Cannot list SLC executions", e);
+               }
        }
 
        public void merge(SlcExecution slcExecution) {
-               // TODO Auto-generated method stub
-
+               throw new UnsupportedOperationException();
        }
 
        public void update(SlcExecution slcExecution) {
-               // TODO Auto-generated method stub
-
-       }
-
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
-       protected Session getSession() {
-               return session;
+               // TODO: optimize query
+               String queryString = "//process[@uuid='" + slcExecution.getUuid()
+                               + "']";
+               try {
+                       Query query = queryManager.createQuery(queryString, Query.XPATH);
+                       Node node = JcrUtils.querySingleNode(query);
+                       nodeMapper.update(node, slcExecution);
+                       getSession().save();
+               } catch (Exception e) {
+                       throw new SlcException("Cannot update " + slcExecution, e);
+               }
        }
 
 }