+++ /dev/null
-/*\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.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
- }\r
-\r
- public void update(final SlcExecution slcExecution) {\r
- getHibernateTemplate().update(slcExecution);\r
- }\r
-\r
- public void merge(final SlcExecution slcExecution) {\r
- getHibernateTemplate().merge(slcExecution);\r
- }\r
-\r
- public SlcExecution getSlcExecution(String uuid) {\r
- return (SlcExecution) getHibernateTemplate().get(SlcExecution.class,\r
- uuid);\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- public List<SlcExecution> listSlcExecutions() {\r
- return (List<SlcExecution>) getHibernateTemplate().loadAll(\r
- SlcExecution.class);\r
- }\r
-\r
- public void addSteps(final String slcExecutionId,\r
- final List<SlcExecutionStep> additionalSteps) {\r
- getHibernateTemplate().execute(new HibernateCallback() {\r
-\r
- public Object doInHibernate(Session session)\r
- throws HibernateException, SQLException {\r
- SlcExecution slcExecution = getSlcExecution(session,\r
- slcExecutionId);\r
- slcExecution.getSteps().addAll(additionalSteps);\r
- session.update(slcExecution);\r
- return slcExecution;\r
- }\r
- });\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