View Javadoc

1   /*
2    *  DISCLAIMER
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    /* RCS ID */
29    public final static String rcsid =
30            "$Id: WorkflowInstanceDaoHibernate.java,v 1.2 2006/01/15 19:56:17 skleinei Exp $";
31  
32    /* Logger */
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 /* EOF */