1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.workflow.business.task;
35
36 import fr.paris.lutece.plugins.workflow.utils.WorkflowUtils;
37 import fr.paris.lutece.plugins.workflowcore.business.action.Action;
38 import fr.paris.lutece.plugins.workflowcore.business.task.ITaskDAO;
39 import fr.paris.lutece.plugins.workflowcore.service.task.ITask;
40 import fr.paris.lutece.plugins.workflowcore.service.task.ITaskFactory;
41 import fr.paris.lutece.util.sql.DAOUtil;
42 import java.sql.Statement;
43
44 import java.util.ArrayList;
45 import java.util.List;
46 import java.util.Locale;
47
48 import javax.inject.Inject;
49
50
51
52
53
54
55 public class TaskDAO implements ITaskDAO
56 {
57 private static final String SQL_QUERY_FIND_BY_PRIMARY_KEY = "SELECT task_type_key,id_task,id_action, display_order, uid_task" + " FROM workflow_task WHERE id_task=?";
58 private static final String SQL_QUERY_SELECT_STATE_BY_ID_ACTION = "SELECT task_type_key,id_task,id_action, display_order, uid_task "
59 + " FROM workflow_task WHERE id_action=? ORDER BY display_order";
60 private static final String SQL_QUERY_INSERT = "INSERT INTO workflow_task " + "(task_type_key,id_action, display_order, uid_task) VALUES(?,?,?,?)";
61 private static final String SQL_QUERY_UPDATE = "UPDATE workflow_task SET id_task=?,task_type_key=?,id_action=?,display_order=?, uid_task=?" + " WHERE id_task=?";
62 private static final String SQL_QUERY_DELETE = "DELETE FROM workflow_task WHERE id_task=? ";
63 private static final String SQL_QUERY_FIND_MAXIMUM_ORDER_BY_ACTION = "SELECT MAX(display_order) FROM workflow_task WHERE id_action=?";
64 private static final String SQL_QUERY_DECREMENT_ORDER = "UPDATE workflow_task SET display_order = display_order -1 WHERE display_order > ? AND id_action=? ";
65 private static final String SQL_QUERY_TASKS_WITH_ORDER_BETWEEN = "SELECT task_type_key,id_task,id_action, display_order, uid_task FROM workflow_task WHERE (display_order BETWEEN ? AND ?) AND id_action=?";
66 private static final String SQL_QUERY_TASKS_AFTER_ORDER = "SELECT task_type_key,id_task,id_action, display_order, uid_task FROM workflow_task WHERE display_order >=? AND id_action=?";
67 private static final String SQL_QUERY_SELECT_TASK_FOR_ORDER_INIT = "SELECT task_type_key,id_task,id_action, display_order, uid_task "
68 + " FROM workflow_task WHERE id_action=? ORDER BY id_task";
69 @Inject
70 private ITaskFactory _taskFactory;
71
72
73
74
75 @Override
76 public synchronized void insert( ITask task )
77 {
78 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, Statement.RETURN_GENERATED_KEYS, WorkflowUtils.getPlugin( ) ) )
79 {
80 int nPos = 0;
81 daoUtil.setString( ++nPos, task.getTaskType( ).getKey( ) );
82 daoUtil.setInt( ++nPos, task.getAction( ).getId( ) );
83 daoUtil.setInt( ++nPos, task.getOrder( ) );
84 daoUtil.setString( ++nPos, task.getUid( ) );
85
86 daoUtil.executeUpdate( );
87 if ( daoUtil.nextGeneratedKey( ) )
88 {
89 task.setId( daoUtil.getGeneratedKeyInt( 1 ) );
90 }
91 }
92 }
93
94
95
96
97 @Override
98 public void store( ITask task )
99 {
100 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE, WorkflowUtils.getPlugin( ) ) )
101 {
102 int nPos = 0;
103
104 daoUtil.setInt( ++nPos, task.getId( ) );
105 daoUtil.setString( ++nPos, task.getTaskType( ).getKey( ) );
106 daoUtil.setInt( ++nPos, task.getAction( ).getId( ) );
107 daoUtil.setInt( ++nPos, task.getOrder( ) );
108 daoUtil.setString( ++nPos, task.getUid( ) );
109 daoUtil.setInt( ++nPos, task.getId( ) );
110
111 daoUtil.executeUpdate( );
112 }
113 }
114
115
116
117
118 @Override
119 public ITask load( int nIdTask, Locale locale )
120 {
121 ITask task = null;
122 Action action = null;
123 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_FIND_BY_PRIMARY_KEY, WorkflowUtils.getPlugin( ) ) )
124 {
125 daoUtil.setInt( 1, nIdTask );
126
127 daoUtil.executeQuery( );
128
129 int nPos = 0;
130
131 if ( daoUtil.next( ) )
132 {
133 task = _taskFactory.newTask( daoUtil.getString( ++nPos ), locale );
134 task.setId( daoUtil.getInt( ++nPos ) );
135 action = new Action( );
136 action.setId( daoUtil.getInt( ++nPos ) );
137 task.setOrder( daoUtil.getInt( ++nPos ) );
138 task.setAction( action );
139 task.setUid( daoUtil.getString( ++nPos ) );
140 }
141 }
142 return task;
143 }
144
145
146
147
148 @Override
149 public void delete( int nIdTask )
150 {
151 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, WorkflowUtils.getPlugin( ) ) )
152 {
153 daoUtil.setInt( 1, nIdTask );
154 daoUtil.executeUpdate( );
155 }
156 }
157
158
159
160
161 @Override
162 public List<ITask> selectTaskByIdAction( int nIdAction, Locale locale )
163 {
164 ITask task = null;
165 Action action = null;
166 List<ITask> listTask = new ArrayList<>( );
167 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_STATE_BY_ID_ACTION, WorkflowUtils.getPlugin( ) ) )
168 {
169 daoUtil.setInt( 1, nIdAction );
170
171 daoUtil.executeQuery( );
172
173 while ( daoUtil.next( ) )
174 {
175 int nPos = 0;
176 task = _taskFactory.newTask( daoUtil.getString( ++nPos ), locale );
177 task.setId( daoUtil.getInt( ++nPos ) );
178 action = new Action( );
179 action.setId( daoUtil.getInt( ++nPos ) );
180 task.setAction( action );
181 task.setActionUid( action.getUid( ) );
182
183 task.setOrder( daoUtil.getInt( ++nPos ) );
184 task.setUid( daoUtil.getString( ++nPos ) );
185
186 listTask.add( task );
187 }
188 }
189 return listTask;
190 }
191
192
193
194
195 @Override
196 public int findMaximumOrderByActionId( int nIdAction )
197 {
198 int nMaximumOrder = 0;
199 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_FIND_MAXIMUM_ORDER_BY_ACTION, WorkflowUtils.getPlugin( ) ) )
200 {
201 daoUtil.setInt( 1, nIdAction );
202 daoUtil.executeQuery( );
203
204 while ( daoUtil.next( ) )
205 {
206 nMaximumOrder = daoUtil.getInt( 1 );
207 }
208 }
209 return nMaximumOrder;
210 }
211
212
213
214
215 @Override
216 public void decrementOrderByOne( int nOrder, int nIdAction )
217 {
218 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DECREMENT_ORDER, WorkflowUtils.getPlugin( ) ) )
219 {
220 daoUtil.setInt( 1, nOrder );
221 daoUtil.setInt( 2, nIdAction );
222 daoUtil.executeUpdate( );
223 }
224 }
225
226
227
228
229 @Override
230 public List<ITask> findTasksBetweenOrders( int nOrder1, int nOrder2, int nIdAction, Locale locale )
231 {
232 List<ITask> listTask = new ArrayList<>( );
233 int nPos = 0;
234 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_TASKS_WITH_ORDER_BETWEEN, WorkflowUtils.getPlugin( ) ) )
235 {
236 daoUtil.setInt( 1, nOrder1 );
237 daoUtil.setInt( 2, nOrder2 );
238 daoUtil.setInt( 3, nIdAction );
239 daoUtil.executeQuery( );
240
241 while ( daoUtil.next( ) )
242 {
243 ITask task = null;
244 Action action = null;
245 nPos = 0;
246 task = _taskFactory.newTask( daoUtil.getString( ++nPos ), locale );
247 task.setId( daoUtil.getInt( ++nPos ) );
248 action = new Action( );
249 action.setId( daoUtil.getInt( ++nPos ) );
250 task.setAction( action );
251 task.setOrder( daoUtil.getInt( ++nPos ) );
252 task.setUid( daoUtil.getString( ++nPos ) );
253
254 listTask.add( task );
255 }
256 }
257 return listTask;
258 }
259
260
261
262
263 @Override
264 public List<ITask> findTasksAfterOrder( int nOrder, int nIdAction, Locale locale )
265 {
266 List<ITask> listTask = new ArrayList<>( );
267 int nPos = 0;
268 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_TASKS_AFTER_ORDER, WorkflowUtils.getPlugin( ) ) )
269 {
270 daoUtil.setInt( 1, nOrder );
271 daoUtil.setInt( 2, nIdAction );
272 daoUtil.executeQuery( );
273
274 while ( daoUtil.next( ) )
275 {
276 ITask task = null;
277 Action action = null;
278 nPos = 0;
279 task = _taskFactory.newTask( daoUtil.getString( ++nPos ), locale );
280 task.setId( daoUtil.getInt( ++nPos ) );
281 action = new Action( );
282 action.setId( daoUtil.getInt( ++nPos ) );
283 task.setAction( action );
284 task.setOrder( daoUtil.getInt( ++nPos ) );
285 task.setUid( daoUtil.getString( ++nPos ) );
286
287 listTask.add( task );
288 }
289 }
290 return listTask;
291 }
292
293
294
295
296 @Override
297 public List<ITask> findTasksForOrderInit( int nIdAction, Locale locale )
298 {
299 List<ITask> listTask = new ArrayList<>( );
300 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_TASK_FOR_ORDER_INIT, WorkflowUtils.getPlugin( ) ) )
301 {
302 daoUtil.setInt( 1, nIdAction );
303 daoUtil.executeQuery( );
304
305 while ( daoUtil.next( ) )
306 {
307 ITask task = null;
308 Action action = null;
309 int nPos = 0;
310 task = _taskFactory.newTask( daoUtil.getString( ++nPos ), locale );
311 task.setId( daoUtil.getInt( ++nPos ) );
312 action = new Action( );
313 action.setId( daoUtil.getInt( ++nPos ) );
314 task.setAction( action );
315 task.setOrder( daoUtil.getInt( ++nPos ) );
316 task.setUid( daoUtil.getString( ++nPos ) );
317
318 listTask.add( task );
319 }
320 }
321 return listTask;
322 }
323 }