]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/process/SlcExecutionDaoHibernate.java
Adapt to new Commons structure
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.hibernate / src / main / java / org / argeo / slc / hibernate / process / SlcExecutionDaoHibernate.java
index b60f6f5828a271de4d781ce8c60644764a8dbfb3..f581f9261de1203f9381f339ee60963836c4a5ad 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>\r
+ * Copyright (C) 2007-2012 Mathieu Baudier\r
  *\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
  * See the License for the specific language governing permissions and\r
  * limitations under the License.\r
  */\r
-\r
 package org.argeo.slc.hibernate.process;\r
 \r
 import java.sql.SQLException;\r
 import java.util.List;\r
 \r
-import org.springframework.orm.hibernate3.HibernateCallback;\r
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
-\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
 import org.argeo.slc.SlcException;\r
 import org.argeo.slc.dao.process.SlcExecutionDao;\r
 import org.argeo.slc.process.SlcExecution;\r
 import org.argeo.slc.process.SlcExecutionStep;\r
 import org.hibernate.HibernateException;\r
 import org.hibernate.Session;\r
+import org.springframework.orm.hibernate3.HibernateCallback;\r
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
 \r
 public class SlcExecutionDaoHibernate extends HibernateDaoSupport implements\r
                SlcExecutionDao {\r
+       private final static Log log = LogFactory\r
+                       .getLog(SlcExecutionDaoHibernate.class);\r
 \r
        public void create(SlcExecution slcExecution) {\r
                getHibernateTemplate().save(slcExecution);\r
@@ -61,13 +63,8 @@ public class SlcExecutionDaoHibernate extends HibernateDaoSupport implements
 \r
                        public Object doInHibernate(Session session)\r
                                        throws HibernateException, SQLException {\r
-                               SlcExecution slcExecution = (SlcExecution) session.get(\r
-                                               SlcExecution.class, slcExecutionId);\r
-\r
-                               if (slcExecution == null)\r
-                                       throw new SlcException("Could not find SLC execution "\r
-                                                       + slcExecutionId);\r
-\r
+                               SlcExecution slcExecution = getSlcExecution(session,\r
+                                               slcExecutionId);\r
                                slcExecution.getSteps().addAll(additionalSteps);\r
                                session.update(slcExecution);\r
                                return slcExecution;\r
@@ -76,4 +73,58 @@ public class SlcExecutionDaoHibernate extends HibernateDaoSupport implements
 \r
        }\r
 \r
+       @SuppressWarnings("unchecked")\r
+       public List<SlcExecutionStep> tailSteps(final String slcExecutionId,\r
+                       final Integer nbrOfSteps) {\r
+               return (List<SlcExecutionStep>) getHibernateTemplate().execute(\r
+                               new HibernateCallback() {\r
+\r
+                                       public Object doInHibernate(Session session)\r
+                                                       throws HibernateException, SQLException {\r
+                                               SlcExecution slcExecution = getSlcExecution(session,\r
+                                                               slcExecutionId);\r
+                                               // TODO: do a query count() instead?\r
+                                               int stepCount = slcExecution.getSteps().size();\r
+                                               if (stepCount > nbrOfSteps) {\r
+                                                       return session.createFilter(\r
+                                                                       slcExecution.getSteps(), "")\r
+                                                                       .setFirstResult(stepCount - nbrOfSteps)\r
+                                                                       .setMaxResults(nbrOfSteps).list();\r
+                                               } else {\r
+                                                       return slcExecution.getSteps();\r
+                                               }\r
+                                       }\r
+                               });\r
+       }\r
+\r
+       @SuppressWarnings("unchecked")\r
+       public List<SlcExecutionStep> tailSteps(final String slcExecutionId,\r
+                       final String slcExecutionStepId) {\r
+               Object[] values = { slcExecutionStepId, slcExecutionId };\r
+               List<Integer> indexes = getHibernateTemplate().findByNamedQuery(\r
+                               SlcExecutionStep.class.getName() + ".stepIndex", values);\r
+\r
+               Integer index = indexes.get(0);\r
+               if (log.isTraceEnabled()){\r
+                       log.trace(indexes.size());\r
+                       log.trace("Index " + index + " for step " + slcExecutionStepId\r
+                                       + " in process " + slcExecutionId);\r
+               }\r
+               Object[] values2 = { slcExecutionId, index };\r
+               return getHibernateTemplate().findByNamedQuery(\r
+                               SlcExecutionStep.class.getName() + ".stepsAfter", values2);\r
+       }\r
+\r
+       protected SlcExecution getSlcExecution(Session session,\r
+                       String slcExecutionId) {\r
+               SlcExecution slcExecution = (SlcExecution) session.get(\r
+                               SlcExecution.class, slcExecutionId);\r
+\r
+               if (slcExecution == null)\r
+                       throw new SlcException("Could not find SLC execution "\r
+                                       + slcExecutionId);\r
+\r
+               return slcExecution;\r
+       }\r
+\r
 }\r