View Javadoc

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 }