]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernate.java
Introduce listResults service with filtering on collectionId and attributes
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.hibernate / src / main / java / org / argeo / slc / hibernate / test / tree / TreeTestResultCollectionDaoHibernate.java
1 package org.argeo.slc.hibernate.test.tree;
2
3 import java.sql.SQLException;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.SortedSet;
7 import java.util.TreeSet;
8
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;
20
21 /** Hibernate implementation of collections DAO. */
22 public class TreeTestResultCollectionDaoHibernate extends HibernateDaoSupport
23 implements TreeTestResultCollectionDao {
24
25 public void create(TreeTestResultCollection ttrCollection) {
26 getHibernateTemplate().save(ttrCollection);
27 }
28
29 public TreeTestResultCollection getTestResultCollection(String id) {
30 return (TreeTestResultCollection) getHibernateTemplate().get(
31 TreeTestResultCollection.class, id);
32 }
33
34 public void update(TreeTestResultCollection ttrCollection) {
35 getHibernateTemplate().update(ttrCollection);
36 }
37
38 public void delete(TreeTestResultCollection ttrCollection) {
39 getHibernateTemplate().delete(ttrCollection);
40 }
41
42 @SuppressWarnings("unchecked")
43 public SortedSet<TreeTestResultCollection> listCollections() {
44 return new TreeSet<TreeTestResultCollection>(getHibernateTemplate()
45 .find("from TreeTestResultCollection"));
46 }
47
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);
57 session.update(ttrc);
58 return ttrc;
59 }
60 });
61 }
62
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))
72 session.update(ttrc);
73 return ttrc;
74 }
75 });
76 }
77
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");
85 else
86 list = getHibernateTemplate()
87 .find(
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=?",
91 collectionId);
92
93 return list;
94 }
95
96 @SuppressWarnings("unchecked")
97 public List<TreeTestResult> listResults(String collectionId,
98 Map<String, String> attributes) {
99 List<TreeTestResult> list;
100
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()
106 .iterator().next();
107 Object[] args = { entry.getKey(), entry.getValue() };
108 list = getHibernateTemplate().find(
109 "select ttr from TreeTestResult ttr"
110 + " where attributes[?]=?", args);
111 } else {
112 throw new SlcException(
113 "Multiple attributes filter are currently not supported.");
114 }
115 } else {
116 if (attributes == null || attributes.size() == 0)
117 list = getHibernateTemplate()
118 .find(
119 "select ttr "
120 + " from TreeTestResult ttr, TreeTestResultCollection ttrc "
121 + " where ttr in elements(ttrc.results) and ttrc.id=?",
122 collectionId);
123 else if (attributes.size() == 1) {
124 Map.Entry<String, String> entry = attributes.entrySet()
125 .iterator().next();
126 Object[] args = { collectionId, entry.getKey(),
127 entry.getValue() };
128 list = getHibernateTemplate()
129 .find(
130 "select ttr from TreeTestResult ttr, TreeTestResultCollection ttrc "
131 + " where ttr in elements(ttrc.results) and ttrc.id=?"
132 + " and attributes[?]=?", args);
133 } else {
134 throw new SlcException(
135 "Multiple attributes filter are currently not supported.");
136 }
137 }
138 return list;
139 }
140 }