1
2
3
4 package org.flowfuse.base.dao.hibernate;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.flowfuse.base.dao.WorkflowInstanceDao;
9 import org.flowfuse.base.model.WorkItem;
10 import org.flowfuse.base.model.filter.WorklistFilter;
11 import org.springframework.dao.IncorrectResultSizeDataAccessException;
12 import org.springframework.orm.ObjectRetrievalFailureException;
13
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Set;
19
20 /***
21 * @author <a href="stefan@flowfuse.org">Stefan Kleineikenscheidt</a>,
22 * Flowfuse.org
23 * @version $Id: WorkflowInstanceDaoHibernate.java,v 1.2 2006/01/15 19:56:17 skleinei Exp $
24 */
25 public class WorkflowInstanceDaoHibernate extends BaseDaoHibernate
26 implements WorkflowInstanceDao {
27
28
29 public final static String rcsid =
30 "$Id: WorkflowInstanceDaoHibernate.java,v 1.2 2006/01/15 19:56:17 skleinei Exp $";
31
32
33 protected final Log logger = LogFactory.getLog(this.getClass());
34
35 public WorkItem getWorkflowInstance(Long id) {
36 WorkItem workItem = (WorkItem) getHibernateTemplate().get(
37 WorkItem.class, id);
38
39 if (workItem == null) {
40 throw new ObjectRetrievalFailureException(WorkItem.class, id);
41 }
42
43 return workItem;
44 }
45
46 public WorkItem getWorkflowInstanceByOswfId(Long oswfId) {
47 List results = getHibernateTemplate().find(
48 "from WorkItem w where w.oswfId=?", oswfId);
49
50 if (results == null) {
51 throw new ObjectRetrievalFailureException(WorkItem.class, oswfId);
52 }
53
54 if (results.size() == 0 || results.size() > 1) {
55 throw new IncorrectResultSizeDataAccessException(1, results.size());
56 }
57
58 return (WorkItem) results.get(0);
59 }
60
61 public WorkItem getWorkflowInstanceByKey(String key) {
62 List results = getHibernateTemplate().find(
63 "from WorkItem w where w.key like ?", key);
64
65 if (results == null) {
66 throw new ObjectRetrievalFailureException(WorkItem.class, key);
67 }
68
69 if (results.size() == 0 || results.size() > 1) {
70 throw new IncorrectResultSizeDataAccessException(1, results.size());
71 }
72
73 return (WorkItem) results.get(0);
74 }
75
76 public void saveWorkflowInstance(WorkItem workItem) {
77 getHibernateTemplate().saveOrUpdate(workItem);
78 }
79
80 public void removeWorkflowInstance(Long id) {
81 getHibernateTemplate().delete(getWorkflowInstance(id));
82 }
83
84 public List query(Map filters) {
85
86 List results = new ArrayList();
87 StringBuffer whereConditions = new StringBuffer();
88 List parameters = new ArrayList();
89
90 if (filters != null) {
91 Set filterKeys = filters.keySet();
92
93 for (Iterator iterator = filterKeys.iterator(); iterator.hasNext();)
94 {
95
96 Object key = (Object) iterator.next();
97 WorklistFilter filter = (WorklistFilter) filters.get(key);
98
99 if (filter.isSet()) {
100 if (whereConditions.length() == 0) {
101 whereConditions.append("where ");
102 } else {
103 whereConditions.append(" and ");
104 }
105 whereConditions.append(filter.getWhereConditions());
106
107 parameters.addAll(filter.getParameters());
108 }
109 }
110 }
111
112 String queryString =
113 "from WorkItem w " + whereConditions.toString();
114
115 if (logger.isDebugEnabled()) {
116 logger.debug("Filtering Worklist with conditions: " + queryString);
117 }
118
119 results = getHibernateTemplate().find(queryString,
120 parameters.toArray());
121
122 if (results == null) {
123 throw new ObjectRetrievalFailureException(WorkItem.class, filters);
124 }
125
126 return results;
127 }
128
129 public int count(Map filter) {
130 return query(filter).size();
131 }
132 }
133
134