+/*\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
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\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
uuid);\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
public List<SlcExecution> listSlcExecutions() {\r
return (List<SlcExecution>) getHibernateTemplate().loadAll(\r
SlcExecution.class);\r
\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
\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