1 package org.cateproject.workflow.contribution.hibernate;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.cateproject.model.Contribution;
9 import org.cateproject.workflow.contribution.ContributionPAO;
10 import org.cateproject.workflow.contribution.ContributionTask;
11 import org.cateproject.workflow.hibernate.ProcessPAOHibernateImpl;
12 import org.hibernate.Criteria;
13 import org.hibernate.Query;
14 import org.hibernate.Session;
15 import org.hibernate.criterion.Projections;
16 import org.hibernate.criterion.Restrictions;
17 import org.jbpm.JbpmContext;
18 import org.jbpm.JbpmException;
19 import org.jbpm.context.exe.ContextInstance;
20 import org.jbpm.graph.exe.ProcessInstance;
21 import org.jbpm.taskmgmt.exe.TaskInstance;
22 import org.springmodules.workflow.jbpm31.JbpmCallback;
23
24 public class ContributionPAOHibernateImpl extends ProcessPAOHibernateImpl implements ContributionPAO {
25 private static Log log = LogFactory.getLog(ContributionPAOHibernateImpl.class);
26
27 public Long countContributionTasks(String actorId, Boolean isOpen) {
28 Session session = this.getTemplate().getHibernateTemplate().getSessionFactory().getCurrentSession();
29 Criteria criteria = session.createCriteria(TaskInstance.class);
30 criteria.add(Restrictions.eq("name","check contribution"));
31 criteria.add(Restrictions.eq("actorId", actorId));
32
33 if(isOpen != null) {
34 criteria.add(Restrictions.eq("isOpen", isOpen));
35 }
36
37 criteria.setProjection(Projections.rowCount());
38
39
40 return new Long((Integer)criteria.uniqueResult());
41 }
42
43 public ContributionTask getContributionTask(Long taskId) {
44 Session session = this.getTemplate().getHibernateTemplate().getSessionFactory().getCurrentSession();
45 Query query = session.createQuery("from TaskInstance task where task.name = 'check contribution' and task.id = ?");
46 query.setParameter(0, taskId);
47 List<TaskInstance> tasks = (List<TaskInstance>)query.list();
48
49 if(tasks.size() > 0) {
50 TaskInstance task = tasks.get(0);
51 this.getTemplate().getHibernateTemplate().initialize(task.getVariable("contribution"));
52 Contribution contribution = (Contribution)task.getVariable("contribution");
53 ContributionTask contributionTask = new ContributionTask();
54 contributionTask.setTaskId(task.getId());
55 contributionTask.setOpen(task.isOpen());
56
57 getTemplate().getHibernateTemplate().initialize(contribution.getComment());
58 getTemplate().getHibernateTemplate().initialize(contribution.getContributor());
59 getTemplate().getHibernateTemplate().initialize(contribution.getParentContribution());
60 getTemplate().getHibernateTemplate().initialize(contribution.getParentTaxon());
61
62 if(contribution.getParentTaxon() != null) {
63 getTemplate().getHibernateTemplate().initialize(contribution.getParentTaxon().getName());
64 }
65
66 contributionTask.setContribution(contribution);
67 return contributionTask;
68 }
69
70 return null;
71 }
72
73 public List<ContributionTask> getContributionTasks(String actorId, Boolean isOpen, Integer pageSize, Integer pageNumber) {
74 Session session = this.getTemplate().getHibernateTemplate().getSessionFactory().getCurrentSession();
75 Criteria criteria = session.createCriteria(TaskInstance.class);
76 criteria.add(Restrictions.eq("name","check contribution"));
77 criteria.add(Restrictions.eq("actorId", actorId));
78
79 if(isOpen != null) {
80 criteria.add(Restrictions.eq("isOpen", isOpen));
81 }
82
83 if(pageSize != null) {
84 criteria.setMaxResults(pageSize);
85
86 if(pageNumber != null) {
87 criteria.setFirstResult(pageNumber * pageSize);
88 }
89 }
90
91 List<TaskInstance> tasks = (List<TaskInstance>)criteria.list();
92 List<ContributionTask> contributionTasks = new ArrayList<ContributionTask>();
93
94 for(TaskInstance task : tasks) {
95 this.getTemplate().getHibernateTemplate().initialize(task.getVariable("contribution"));
96 Contribution contribution = (Contribution)task.getVariable("contribution");
97 ContributionTask contributionTask = new ContributionTask();
98 contributionTask.setTaskId(task.getId());
99 contributionTask.setOpen(task.isOpen());
100
101 getTemplate().getHibernateTemplate().initialize(contribution.getParentContribution());
102 getTemplate().getHibernateTemplate().initialize(contribution.getParentTaxon());
103 getTemplate().getHibernateTemplate().initialize(contribution.getContributor());
104
105 if(contribution.getParentTaxon() != null) {
106 getTemplate().getHibernateTemplate().initialize(contribution.getParentTaxon().getName());
107 }
108
109 contributionTask.setContribution(contribution);
110 contributionTasks.add(contributionTask);
111 }
112
113 return contributionTasks;
114 }
115
116 public void createNewCheckContributionTask(final Contribution contribution) {
117 System.out.println("Creating new check contribution process for contribution with id " + contribution.getId());
118 log.debug("Creating new check contribution process for contribution with id " + contribution.getId());
119
120 getTemplate().execute(new JbpmCallback() {
121
122 public Object doInJbpm(JbpmContext jbpmContext) throws JbpmException {
123 ProcessInstance contributionProcess = jbpmContext.newProcessInstance("The Contribution Process");
124 ContextInstance contextInstance = contributionProcess.getContextInstance();
125 contextInstance.setVariable("contribution",contribution);
126 jbpmContext.save(contributionProcess);
127 contributionProcess.getRootToken().signal();
128 return null;
129 }
130
131 });
132 }
133 }