--- /dev/null
+package org.argeo.slc.hibernate.test.tree;\r
+\r
+import java.sql.SQLException;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.SortedMap;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.SimpleResultPart;\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.tree.PartSubList;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;\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
+/**\r
+ * The Hibernate implementation for tree-based result of the test result dao.\r
+ * \r
+ * @see TreeTestResult\r
+ */\r
+public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements\r
+ TreeTestResultDao {\r
+\r
+ public void create(TestResult testResult) {\r
+ getHibernateTemplate().save(testResult);\r
+ }\r
+\r
+ public void update(TestResult testResult) {\r
+ getHibernateTemplate().saveOrUpdate(testResult);\r
+ }\r
+\r
+ public TreeTestResult getTestResult(String uuid) {\r
+ List<?> list = getHibernateTemplate().find(\r
+ "from TreeTestResult where uuid=?", uuid);\r
+ if (list.size() == 0) {\r
+ return null;\r
+ } else {\r
+ return (TreeTestResult) list.get(0);\r
+ }\r
+\r
+ }\r
+\r
+ public List<TreeTestResult> listTestResults() {\r
+ return (List<TreeTestResult>) getHibernateTemplate().find(\r
+ "from TreeTestResult");\r
+ }\r
+\r
+ public List<TreeTestResult> listResults(TreeSPath path) {\r
+ List<TreeTestResult> list = getHibernateTemplate().find(\r
+ "from TreeTestResult res where ? in indices(res.resultParts)",\r
+ path.getAsUniqueString());\r
+ return list;\r
+ }\r
+\r
+ public void close(final String testResultId, final Date closeDate) {\r
+ getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+ public Object doInHibernate(Session session)\r
+ throws HibernateException, SQLException {\r
+ TreeTestResult treeTestResult = getTreeTestResult(session,\r
+ testResultId);\r
+ treeTestResult.setCloseDate(closeDate);\r
+ session.update(treeTestResult);\r
+ return treeTestResult;\r
+ }\r
+ });\r
+ }\r
+\r
+ public void addResultPart(final String testResultId, final TreeSPath path,\r
+ final SimpleResultPart resultPart,\r
+ final Map<TreeSPath, StructureElement> relatedElements) {\r
+\r
+ getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+ public Object doInHibernate(Session session)\r
+ throws HibernateException, SQLException {\r
+ TreeTestResult treeTestResult = getTreeTestResult(session,\r
+ testResultId);\r
+ PartSubList lst = treeTestResult.getResultParts().get(path);\r
+ if (lst == null) {\r
+ lst = new PartSubList();\r
+ treeTestResult.getResultParts().put(path, lst);\r
+ }\r
+ lst.getParts().add(resultPart);\r
+ treeTestResult.getElements().putAll(relatedElements);\r
+\r
+ session.update(treeTestResult);\r
+ return treeTestResult;\r
+ }\r
+ });\r
+\r
+ }\r
+\r
+ protected TreeTestResult getTreeTestResult(Session session,\r
+ String testResultId) {\r
+ TreeTestResult treeTestResult = (TreeTestResult) session.get(\r
+ TreeTestResult.class, testResultId);\r
+ if (treeTestResult == null)\r
+ throw new SlcException("No result with id " + testResultId);\r
+ return treeTestResult;\r
+ }\r
+\r
+ public void updateAttributes(final String testResultId,\r
+ final Map<String, String> attributes) {\r
+ getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+ public Object doInHibernate(Session session)\r
+ throws HibernateException, SQLException {\r
+ TreeTestResult treeTestResult = getTreeTestResult(session,\r
+ testResultId);\r
+ treeTestResult.setAttributes(attributes);\r
+\r
+ session.update(treeTestResult);\r
+ return treeTestResult;\r
+ }\r
+ });\r
+ }\r
+\r
+}\r