1 package org
.argeo
.slc
.hibernate
.test
.tree
;
3 import java
.sql
.SQLException
;
6 import java
.util
.SortedSet
;
7 import java
.util
.TreeSet
;
9 import org
.argeo
.slc
.SlcException
;
10 import org
.argeo
.slc
.core
.test
.tree
.ResultAttributes
;
11 import org
.argeo
.slc
.core
.test
.tree
.TreeTestResult
;
12 import org
.argeo
.slc
.core
.test
.tree
.TreeTestResultCollection
;
13 import org
.argeo
.slc
.dao
.test
.tree
.TreeTestResultCollectionDao
;
14 import org
.hibernate
.HibernateException
;
15 import org
.hibernate
.LockMode
;
16 import org
.hibernate
.Session
;
17 import org
.hibernate
.criterion
.DetachedCriteria
;
18 import org
.springframework
.orm
.hibernate3
.HibernateCallback
;
19 import org
.springframework
.orm
.hibernate3
.support
.HibernateDaoSupport
;
21 /** Hibernate implementation of collections DAO. */
22 public class TreeTestResultCollectionDaoHibernate
extends HibernateDaoSupport
23 implements TreeTestResultCollectionDao
{
25 public void create(TreeTestResultCollection ttrCollection
) {
26 getHibernateTemplate().save(ttrCollection
);
29 public TreeTestResultCollection
getTestResultCollection(String id
) {
30 return (TreeTestResultCollection
) getHibernateTemplate().get(
31 TreeTestResultCollection
.class, id
);
34 public void update(TreeTestResultCollection ttrCollection
) {
35 getHibernateTemplate().update(ttrCollection
);
38 public void delete(TreeTestResultCollection ttrCollection
) {
39 getHibernateTemplate().delete(ttrCollection
);
42 @SuppressWarnings("unchecked")
43 public SortedSet
<TreeTestResultCollection
> listCollections() {
44 return new TreeSet
<TreeTestResultCollection
>(getHibernateTemplate()
45 .find("from TreeTestResultCollection"));
48 public void addResultToCollection(final TreeTestResultCollection ttrc
,
49 final String resultUuid
) {
50 getHibernateTemplate().execute(new HibernateCallback() {
51 public Object
doInHibernate(Session session
)
52 throws HibernateException
, SQLException
{
53 session
.lock(ttrc
, LockMode
.NONE
);
54 TreeTestResult ttr
= (TreeTestResult
) session
.get(
55 TreeTestResult
.class, resultUuid
);
56 ttrc
.getResults().add(ttr
);
63 public void removeResultFromCollection(final TreeTestResultCollection ttrc
,
64 final String resultUuid
) {
65 getHibernateTemplate().execute(new HibernateCallback() {
66 public Object
doInHibernate(Session session
)
67 throws HibernateException
, SQLException
{
68 session
.lock(ttrc
, LockMode
.NONE
);
69 TreeTestResult ttr
= (TreeTestResult
) session
.get(
70 TreeTestResult
.class, resultUuid
);
71 if (ttrc
.getResults().remove(ttr
))
78 @SuppressWarnings("unchecked")
79 public List
<ResultAttributes
> listResultAttributes(String collectionId
) {
80 List
<ResultAttributes
> list
;
81 if (collectionId
== null)
82 list
= getHibernateTemplate().find(
83 "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr)"
84 + " from TreeTestResult ttr");
86 list
= getHibernateTemplate()
88 "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr) "
89 + " from TreeTestResult ttr, TreeTestResultCollection ttrc "
90 + " where ttr in elements(ttrc.results) and ttrc.id=?",
96 @SuppressWarnings("unchecked")
97 public List
<TreeTestResult
> listResults(String collectionId
,
98 Map
<String
, String
> attributes
) {
99 List
<TreeTestResult
> list
;
101 if (collectionId
== null) {
102 if (attributes
== null || attributes
.size() == 0)
103 list
= getHibernateTemplate().find("from TreeTestResult");
104 else if (attributes
.size() == 1) {
105 Map
.Entry
<String
, String
> entry
= attributes
.entrySet()
107 Object
[] args
= { entry
.getKey(), entry
.getValue() };
108 list
= getHibernateTemplate().find(
109 "select ttr from TreeTestResult ttr"
110 + " where attributes[?]=?", args
);
112 throw new SlcException(
113 "Multiple attributes filter are currently not supported.");
116 if (attributes
== null || attributes
.size() == 0)
117 list
= getHibernateTemplate()
120 + " from TreeTestResult ttr, TreeTestResultCollection ttrc "
121 + " where ttr in elements(ttrc.results) and ttrc.id=?",
123 else if (attributes
.size() == 1) {
124 Map
.Entry
<String
, String
> entry
= attributes
.entrySet()
126 Object
[] args
= { collectionId
, entry
.getKey(),
128 list
= getHibernateTemplate()
130 "select ttr from TreeTestResult ttr, TreeTestResultCollection ttrc "
131 + " where ttr in elements(ttrc.results) and ttrc.id=?"
132 + " and attributes[?]=?", args
);
134 throw new SlcException(
135 "Multiple attributes filter are currently not supported.");