+ @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