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.resource;
35
36 import fr.paris.lutece.plugins.workflow.utils.WorkflowUtils;
37 import fr.paris.lutece.plugins.workflowcore.business.resource.IResourceWorkflowDAO;
38 import fr.paris.lutece.plugins.workflowcore.business.resource.ResourceWorkflow;
39 import fr.paris.lutece.plugins.workflowcore.business.resource.ResourceWorkflowFilter;
40 import fr.paris.lutece.plugins.workflowcore.business.state.State;
41 import fr.paris.lutece.plugins.workflowcore.business.workflow.Workflow;
42 import fr.paris.lutece.util.ReferenceList;
43 import fr.paris.lutece.util.sql.DAOUtil;
44
45 import java.util.ArrayList;
46 import java.util.HashMap;
47 import java.util.List;
48 import java.util.Map;
49 import java.util.stream.Collectors;
50
51 import org.apache.commons.collections.CollectionUtils;
52
53
54
55
56
57
58 public class ResourceWorkflowDAO implements IResourceWorkflowDAO
59 {
60 private static final String SQL_SELECT_ALL = "SELECT id_resource,resource_type,id_state,id_workflow,id_external_parent,is_associated_workgroups ";
61 private static final String SQL_QUERY_FIND_BY_PRIMARY_KEY = SQL_SELECT_ALL
62 + " FROM workflow_resource_workflow WHERE id_resource=? AND resource_type=? AND id_workflow=?";
63 private static final String SQL_QUERY_SELECT_ID_STATE = "SELECT id_resource,id_state FROM workflow_resource_workflow "
64 + " WHERE id_workflow =? AND resource_type = ? AND id_external_parent = ? AND id_resource IN (?";
65 private static final String SQL_QUERY_SELECT_BY_LIST_ID_STATE = SQL_SELECT_ALL + "FROM workflow_resource_workflow WHERE id_state IN (?";
66 private static final String SQL_QUERY_SELECT_BY_WORKFLOW = SQL_SELECT_ALL + " FROM workflow_resource_workflow WHERE id_workflow=?";
67 private static final String SQL_QUERY_SELECT_ID_RESOURCE_BY_WORKFLOW = "SELECT id_resource " + "FROM workflow_resource_workflow WHERE id_workflow=?";
68 private static final String SQL_QUERY_SELECT_BY_STATE = SQL_SELECT_ALL + "FROM workflow_resource_workflow WHERE id_state=?";
69 private static final String SQL_QUERY_FILTER_BY_ID_PARENT = " AND id_external_parent = ? ";
70 private static final String SQL_QUERY_INSERT = "INSERT INTO workflow_resource_workflow "
71 + "(id_resource,resource_type,id_state,id_workflow,id_external_parent,is_associated_workgroups)VALUES(?,?,?,?,?,?)";
72 private static final String SQL_QUERY_UPDATE = "UPDATE workflow_resource_workflow SET id_resource=?,resource_type=?,id_state=?,id_workflow=?, "
73 + " id_external_parent= ?,is_associated_workgroups= ? WHERE id_resource=? AND resource_type=? AND id_workflow=?";
74 private static final String SQL_QUERY_DELETE = "DELETE FROM workflow_resource_workflow WHERE id_resource=? AND resource_type=? AND id_workflow=? ";
75 private static final String SQL_QUERY_DELETE_WORKGROUP = "DELETE FROM workflow_resource_workgroup WHERE id_resource=? AND resource_type=? AND id_workflow=?";
76 private static final String SQL_QUERY_DELETE_BY_LIST_ID_RESOURCE = "DELETE FROM workflow_resource_workflow WHERE id_workflow =? AND resource_type = ? AND id_resource IN (? ";
77 private static final String SQL_QUERY_DELETE_WORKGROUP_BY_LIST_ID_RESOURCE = "DELETE FROM workflow_resource_workgroup WHERE id_workflow =? AND resource_type = ? AND id_resource IN (? ";
78 private static final String SQL_QUERY_SELECT_WORKGROUPS = "SELECT workgroup_key FROM workflow_resource_workgroup WHERE id_resource=? AND resource_type=? AND id_workflow=?";
79 private static final String SQL_QUERY_INSERT_WORKGROUP = "INSERT INTO workflow_resource_workgroup (id_resource,resource_type,id_workflow, workgroup_key) VALUES(?,?,?,?) ";
80 private static final String SQL_QUERY_SELECT_STATE_BY_FILTER = "SELECT r.id_resource,r.resource_type,r.id_state,r.id_workflow "
81 + " FROM workflow_resource_workflow r ";
82 private static final String SQL_QUERY_SELECT_STATE_ID_BY_FILTER = "SELECT r.id_resource " + " FROM workflow_resource_workflow r ";
83 private static final String SQL_QUERY_WITH_WORKGROUP = ",workflow_resource_workgroup w ";
84
85 private static final String SQL_FILTER_EXTERNAL_PARENT_ID = " r.id_external_parent = ? ";
86 private static final String SQL_FILTER_ID_WORKFLOW = " r.id_workflow = ? ";
87 private static final String SQL_FILTER_ID_STATE = " r.id_state = ? ";
88 private static final String SQL_FILTER_ID_STATE_BY_ID_ACTION = " r.id_state IN ( ? ";
89 private static final String SQL_FILTER_RESOURCE_TYPE = " r.resource_type = ? ";
90 private static final String SQL_FILTER_WORKGROUP_KEY = " r.id_resource = w.id_resource AND r.resource_type = w.resource_type AND r.id_workflow = w.id_workflow AND (w.workgroup_key IN ( ";
91 private static final String SQL_FILTER_LIST_STATE = " r.id_state IN ( ";
92 private static final String SQL_ORDER_BY_ID_STATE = " ORDER BY r.id_state ";
93 private static final String SQL_CLOSE_PARENTHESIS = " ) ";
94 private static final String SQL_CLOSE_UNION = " UNION ";
95 private static final String SQL_ADITIONAL_PARAMETER = ",?";
96 private static final String SQL_FILTER_NOT_ASSOCIATE_WITH_WORKGROUP = " AND r.is_associated_workgroups=0 ";
97
98
99
100
101 @Override
102 public synchronized void insert( ResourceWorkflow resourceWorkflow )
103 {
104 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, WorkflowUtils.getPlugin( ) ) )
105 {
106 int nPos = 0;
107 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
108 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
109 daoUtil.setInt( ++nPos, resourceWorkflow.getState( ).getId( ) );
110 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
111
112 if ( resourceWorkflow.getExternalParentId( ) != null )
113 {
114 daoUtil.setInt( ++nPos, resourceWorkflow.getExternalParentId( ) );
115 }
116 else
117 {
118 daoUtil.setIntNull( ++nPos );
119 }
120
121 daoUtil.setBoolean( ++nPos, resourceWorkflow.isAssociatedWithWorkgroup( ) );
122 daoUtil.executeUpdate( );
123 }
124 }
125
126
127
128
129 @Override
130 public void store( ResourceWorkflow resourceWorkflow )
131 {
132 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE, WorkflowUtils.getPlugin( ) ) )
133 {
134 int nPos = 0;
135 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
136 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
137 daoUtil.setInt( ++nPos, resourceWorkflow.getState( ).getId( ) );
138 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
139
140 if ( resourceWorkflow.getExternalParentId( ) != null )
141 {
142 daoUtil.setInt( ++nPos, resourceWorkflow.getExternalParentId( ) );
143 }
144 else
145 {
146 daoUtil.setIntNull( ++nPos );
147 }
148
149 daoUtil.setBoolean( ++nPos, resourceWorkflow.isAssociatedWithWorkgroup( ) );
150 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
151 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
152 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
153
154 daoUtil.executeUpdate( );
155 }
156 }
157
158
159
160
161 @Override
162 public ResourceWorkflow load( int nIdResource, String strResourceType, int nIdWorkflow )
163 {
164 ResourceWorkflow documentWorkflow = null;
165 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_FIND_BY_PRIMARY_KEY, WorkflowUtils.getPlugin( ) ) )
166 {
167 int nPos = 0;
168
169 daoUtil.setInt( ++nPos, nIdResource );
170 daoUtil.setString( ++nPos, strResourceType );
171 daoUtil.setInt( ++nPos, nIdWorkflow );
172
173 daoUtil.executeQuery( );
174
175 if ( daoUtil.next( ) )
176 {
177 documentWorkflow = dataToObject( daoUtil );
178 }
179 }
180 return documentWorkflow;
181 }
182
183
184
185
186 @Override
187 public List<ResourceWorkflow> selectResourceWorkflowByWorkflow( int nIdWorkflow )
188 {
189 List<ResourceWorkflow> lisResourceWorkflow = new ArrayList<>( );
190 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_BY_WORKFLOW, WorkflowUtils.getPlugin( ) ) )
191 {
192 int nPos = 0;
193 daoUtil.setInt( ++nPos, nIdWorkflow );
194 daoUtil.executeQuery( );
195
196 while ( daoUtil.next( ) )
197 {
198 ResourceWorkflow resourceWorkflow = dataToObject( daoUtil );
199 lisResourceWorkflow.add( resourceWorkflow );
200 }
201 }
202 return lisResourceWorkflow;
203 }
204
205
206
207
208 @Override
209 public List<ResourceWorkflow> selectResourceWorkflowByState( int nIdState )
210 {
211 return selectResourceWorkflowByState( nIdState, -1 );
212 }
213
214
215
216
217 @Override
218 public List<ResourceWorkflow> selectResourceWorkflowByState( int nIdState, int nIdParent )
219 {
220 List<ResourceWorkflow> lisResourceWorkflow = new ArrayList<>( );
221 StringBuilder sql = new StringBuilder( SQL_QUERY_SELECT_BY_STATE ) ;
222
223 if ( nIdParent > -1 ) {
224 sql.append( SQL_QUERY_FILTER_BY_ID_PARENT );
225 }
226
227 try ( DAOUtil daoUtil = new DAOUtil( sql.toString( ), WorkflowUtils.getPlugin( ) ) )
228 {
229 int nPos = 0;
230 daoUtil.setInt( ++nPos, nIdState );
231 if ( nIdParent > -1 ) {
232 daoUtil.setInt( ++nPos, nIdParent );
233 }
234 daoUtil.executeQuery( );
235 while ( daoUtil.next( ) )
236 {
237 ResourceWorkflow resourceWorkflow = dataToObject( daoUtil );
238 lisResourceWorkflow.add( resourceWorkflow );
239 }
240 }
241 return lisResourceWorkflow;
242 }
243
244
245
246
247 @Override
248 public List<ResourceWorkflow> selectResourceWorkflowByListState( List<Integer> listIdStateBefore )
249 {
250 List<ResourceWorkflow> lisResourceWorkflow = new ArrayList<>( );
251 int nlistIdResourceSize = listIdStateBefore.size( );
252
253 if ( nlistIdResourceSize > 0 )
254 {
255 StringBuilder sbSQL = new StringBuilder( SQL_QUERY_SELECT_BY_LIST_ID_STATE );
256
257 for ( int i = 1; i < nlistIdResourceSize; i++ )
258 {
259 sbSQL.append( SQL_ADITIONAL_PARAMETER );
260 }
261
262 sbSQL.append( SQL_CLOSE_PARENTHESIS );
263
264 try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ), WorkflowUtils.getPlugin( ) ) )
265 {
266
267 for ( int i = 0; i < nlistIdResourceSize; i++ )
268 {
269 daoUtil.setInt( i + 1 , listIdStateBefore.get( i ) );
270 }
271
272 daoUtil.executeQuery( );
273
274 while ( daoUtil.next( ) )
275 {
276 ResourceWorkflow resourceWorkflow = dataToObject( daoUtil );
277 lisResourceWorkflow.add( resourceWorkflow );
278 }
279 }
280 }
281 return lisResourceWorkflow;
282 }
283
284
285
286
287 @Override
288 public void delete( ResourceWorkflow resourceWorkflow )
289 {
290 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, WorkflowUtils.getPlugin( ) ) )
291 {
292 int nPos = 0;
293 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
294 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
295 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
296 daoUtil.executeUpdate( );
297 }
298 }
299
300
301
302
303 @Override
304 public List<String> selectWorkgroups( ResourceWorkflow resourceWorkflow )
305 {
306 List<String> listWorkgroups = new ArrayList<>( );
307 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_WORKGROUPS, WorkflowUtils.getPlugin( ) ) )
308 {
309 int nPos = 0;
310 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
311 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
312 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
313
314 daoUtil.executeQuery( );
315
316 while ( daoUtil.next( ) )
317 {
318 nPos = 0;
319 listWorkgroups.add( daoUtil.getString( ++nPos ) );
320 }
321 }
322 return listWorkgroups;
323 }
324
325
326
327
328 @Override
329 public void deleteWorkgroups( ResourceWorkflow resourceWorkflow )
330 {
331 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_WORKGROUP, WorkflowUtils.getPlugin( ) ) )
332 {
333 int nPos = 0;
334
335 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
336 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
337 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
338
339 daoUtil.executeUpdate( );
340 }
341 }
342
343
344
345
346 @Override
347 public void removeWorkgroupsByListIdResource( List<Integer> listIdResource, String strResourceType, Integer nIdWorflow )
348 {
349 int nlistIdResourceSize = listIdResource.size( );
350
351 if ( nlistIdResourceSize > 0 )
352 {
353 StringBuilder sbSQL = new StringBuilder( SQL_QUERY_DELETE_BY_LIST_ID_RESOURCE );
354 for ( int i = 1; i < nlistIdResourceSize; i++ )
355 {
356 sbSQL.append( SQL_ADITIONAL_PARAMETER );
357 }
358
359 sbSQL.append( SQL_CLOSE_PARENTHESIS );
360
361 try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ), WorkflowUtils.getPlugin( ) ) )
362 {
363 daoUtil.setInt( 1, nIdWorflow );
364 daoUtil.setString( 2, strResourceType );
365
366 for ( int i = 0; i < nlistIdResourceSize; i++ )
367 {
368 daoUtil.setInt( i + 3, listIdResource.get( i ) );
369 }
370
371 daoUtil.executeUpdate( );
372 }
373 }
374 }
375
376
377
378
379 @Override
380 public void removeByListIdResource( List<Integer> listIdResource, String strResourceType, Integer nIdWorflow )
381 {
382 int nlistIdResourceSize = listIdResource.size( );
383
384 if ( nlistIdResourceSize > 0 )
385 {
386 StringBuilder sbSQL = new StringBuilder( SQL_QUERY_DELETE_WORKGROUP_BY_LIST_ID_RESOURCE );
387
388 for ( int i = 1; i < nlistIdResourceSize; i++ )
389 {
390 sbSQL.append( SQL_ADITIONAL_PARAMETER );
391 }
392
393 sbSQL.append( SQL_CLOSE_PARENTHESIS );
394
395 try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ), WorkflowUtils.getPlugin( ) ) )
396 {
397 daoUtil.setInt( 1, nIdWorflow );
398 daoUtil.setString( 2, strResourceType );
399
400 for ( int i = 0; i < nlistIdResourceSize; i++ )
401 {
402 daoUtil.setInt( i + 3, listIdResource.get( i ) );
403 }
404
405 daoUtil.executeUpdate( );
406 }
407 }
408 }
409
410
411
412
413 @Override
414 public void insertWorkgroup( ResourceWorkflow resourceWorkflow, String strWorkgroup )
415 {
416 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT_WORKGROUP, WorkflowUtils.getPlugin( ) ) )
417 {
418 int nPos = 0;
419
420 daoUtil.setInt( ++nPos, resourceWorkflow.getIdResource( ) );
421 daoUtil.setString( ++nPos, resourceWorkflow.getResourceType( ) );
422 daoUtil.setInt( ++nPos, resourceWorkflow.getWorkflow( ).getId( ) );
423 daoUtil.setString( ++nPos, strWorkgroup );
424
425 daoUtil.executeUpdate( );
426 }
427 }
428
429
430
431
432 @Override
433 public List<ResourceWorkflow> getListResourceWorkflowByFilter( ResourceWorkflowFilter filter )
434 {
435 List<ResourceWorkflow> listResourceWorkflow = new ArrayList<>( );
436 ResourceWorkflow resourceWorkflow = null;
437
438 String strSQL = buildFilterQuerydHeader( filter, null, SQL_QUERY_SELECT_STATE_BY_FILTER, null );
439
440 if ( filter.containsWorkgroupKeyList( ) )
441 {
442 Map<String, String> workgroupList = filter.getWorkgroupKeyList( );
443 filter.setWorkgroupKeyList( null );
444
445 StringBuilder bufSQL = new StringBuilder( );
446 bufSQL.append( strSQL ).append( SQL_CLOSE_UNION ).append( buildFilterQuerydHeader( filter, null, SQL_QUERY_SELECT_STATE_BY_FILTER, null ) )
447 .append( SQL_FILTER_NOT_ASSOCIATE_WITH_WORKGROUP );
448 filter.setWorkgroupKeyList( workgroupList );
449 strSQL = bufSQL.toString( );
450 }
451
452 try ( DAOUtil daoUtil = new DAOUtil( strSQL, WorkflowUtils.getPlugin( ) ) )
453 {
454 int nPos = buildFilterQuerydFooter( daoUtil, filter, null, 0 );
455
456 if ( filter.containsWorkgroupKeyList( ) )
457 {
458 filter.setWorkgroupKeyList( null );
459 buildFilterQuerydFooter( daoUtil, filter, null, nPos );
460 }
461
462 daoUtil.executeQuery( );
463
464 while ( daoUtil.next( ) )
465 {
466 nPos = 0;
467 resourceWorkflow = new ResourceWorkflow( );
468 resourceWorkflow.setIdResource( daoUtil.getInt( ++nPos ) );
469 resourceWorkflow.setResourceType( daoUtil.getString( ++nPos ) );
470
471 State state = new State( );
472 state.setId( daoUtil.getInt( ++nPos ) );
473 resourceWorkflow.setState( state );
474
475 Workflow workflow = new Workflow( );
476 workflow.setId( daoUtil.getInt( ++nPos ) );
477 resourceWorkflow.setWorkFlow( workflow );
478
479 if ( filter.containsExternalParentId( ) )
480 {
481 resourceWorkflow.setExternalParentId( daoUtil.getInt( ++nPos ) );
482 }
483
484 listResourceWorkflow.add( resourceWorkflow );
485 }
486
487 }
488
489 return listResourceWorkflow;
490 }
491
492
493
494
495 @Override
496 public List<Integer> selectResourceIdByWorkflow( int nIdWorkflow )
497 {
498 List<Integer> lisResourceWorkflow = new ArrayList<>( );
499 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ID_RESOURCE_BY_WORKFLOW, WorkflowUtils.getPlugin( ) ) )
500 {
501 int nPos = 0;
502 daoUtil.setInt( ++nPos, nIdWorkflow );
503 daoUtil.executeQuery( );
504 while ( daoUtil.next( ) )
505 {
506 nPos = 0;
507 lisResourceWorkflow.add( daoUtil.getInt( ++nPos ) );
508 }
509 }
510 return lisResourceWorkflow;
511 }
512
513
514
515
516 @Override
517 public List<Integer> getListResourceWorkflowIdByFilter( ResourceWorkflowFilter filter )
518 {
519 List<Integer> listResourceWorkflowId = new ArrayList<>( );
520
521 String strSQL = buildFilterQuerydHeader( filter, null, SQL_QUERY_SELECT_STATE_ID_BY_FILTER, null );
522
523 if ( filter.containsWorkgroupKeyList( ) )
524 {
525 Map<String, String> workgroupList = filter.getWorkgroupKeyList( );
526 filter.setWorkgroupKeyList( null );
527
528 StringBuilder bufSQL = new StringBuilder( );
529 bufSQL.append( strSQL ).append( SQL_CLOSE_UNION ).append( buildFilterQuerydHeader( filter, null, SQL_QUERY_SELECT_STATE_ID_BY_FILTER, null ) )
530 .append( SQL_FILTER_NOT_ASSOCIATE_WITH_WORKGROUP );
531 filter.setWorkgroupKeyList( workgroupList );
532 strSQL = bufSQL.toString( );
533 }
534
535 try ( DAOUtil daoUtil = new DAOUtil( strSQL, WorkflowUtils.getPlugin( ) ) )
536 {
537 int nPos = buildFilterQuerydFooter( daoUtil, filter, null, 0 );
538
539 if ( filter.containsWorkgroupKeyList( ) )
540 {
541 filter.setWorkgroupKeyList( null );
542 buildFilterQuerydFooter( daoUtil, filter, null, nPos );
543 }
544
545 daoUtil.executeQuery( );
546 while ( daoUtil.next( ) )
547 {
548 listResourceWorkflowId.add( daoUtil.getInt( 1 ) );
549 }
550 }
551 return listResourceWorkflowId;
552 }
553
554
555
556
557 @Override
558 public List<Integer> getListResourceWorkflowIdByFilter( ResourceWorkflowFilter filter, List<Integer> lListIdWorkflowState )
559 {
560 List<Integer> listResourceWorkflowId = new ArrayList<>( );
561
562 filter.setIdState( ResourceWorkflowFilter.ALL_INT );
563
564 String strSQL = buildFilterQuerydHeader( filter, lListIdWorkflowState, SQL_QUERY_SELECT_STATE_ID_BY_FILTER, SQL_ORDER_BY_ID_STATE );
565
566 if ( filter.containsWorkgroupKeyList( ) )
567 {
568 Map<String, String> workgroupList = filter.getWorkgroupKeyList( );
569 filter.setWorkgroupKeyList( null );
570
571 StringBuilder bufSQL = new StringBuilder( );
572 bufSQL.append( strSQL ).append( SQL_CLOSE_UNION )
573 .append( buildFilterQuerydHeader( filter, lListIdWorkflowState, SQL_QUERY_SELECT_STATE_ID_BY_FILTER, null ) )
574 .append( SQL_FILTER_NOT_ASSOCIATE_WITH_WORKGROUP );
575 filter.setWorkgroupKeyList( workgroupList );
576 strSQL = bufSQL.toString( );
577 }
578
579 try ( DAOUtil daoUtil = new DAOUtil( strSQL, WorkflowUtils.getPlugin( ) ) )
580 {
581 int nPos = buildFilterQuerydFooter( daoUtil, filter, lListIdWorkflowState, 0 );
582
583 if ( filter.containsWorkgroupKeyList( ) )
584 {
585 filter.setWorkgroupKeyList( null );
586 buildFilterQuerydFooter( daoUtil, filter, lListIdWorkflowState, nPos );
587 }
588
589 daoUtil.executeQuery( );
590
591 while ( daoUtil.next( ) )
592 {
593 listResourceWorkflowId.add( daoUtil.getInt( 1 ) );
594 }
595 }
596 return listResourceWorkflowId;
597 }
598
599
600
601
602 @Override
603 public Map<Integer, Integer> getListIdStateByListId( List<Integer> lListIdRessource, int nIdWorflow, String strResourceType, Integer nIdExternalParentId )
604 {
605 Map<Integer, Integer> result = new HashMap<>( );
606 int nlistIdResourceSize = lListIdRessource.size( );
607
608 if ( nlistIdResourceSize > 0 )
609 {
610 StringBuilder sbSQL = new StringBuilder( SQL_QUERY_SELECT_ID_STATE );
611
612 for ( int i = 1; i < nlistIdResourceSize; i++ )
613 {
614 sbSQL.append( SQL_ADITIONAL_PARAMETER );
615 }
616
617 sbSQL.append( SQL_CLOSE_PARENTHESIS );
618
619 try ( DAOUtil daoUtil = new DAOUtil( sbSQL.toString( ), WorkflowUtils.getPlugin( ) ) )
620 {
621 daoUtil.setInt( 1, nIdWorflow );
622 daoUtil.setString( 2, strResourceType );
623 daoUtil.setInt( 3, nIdExternalParentId );
624
625 for ( int i = 0; i < nlistIdResourceSize; i++ )
626 {
627 daoUtil.setInt( i + 4, lListIdRessource.get( i ) );
628 }
629
630 daoUtil.executeQuery( );
631
632 while ( daoUtil.next( ) )
633 {
634 result.put( daoUtil.getInt( 1 ), daoUtil.getInt( 2 ) );
635 }
636 }
637 }
638 return result;
639 }
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654 private Integer buildFilterQuerydFooter( DAOUtil daoUtil, ResourceWorkflowFilter filter, List<Integer> lListIdState, Integer nPos )
655 {
656 int nPosition = nPos;
657
658 if ( filter.containsIdWorkflow( ) )
659 {
660 daoUtil.setInt( ++nPosition, filter.getIdWorkflow( ) );
661 }
662
663 if ( ( lListIdState == null ) && filter.containsIdState( ) )
664 {
665 daoUtil.setInt( ++nPosition, filter.getIdState( ) );
666 }
667
668 if ( filter.containsListIdStateBefore( ) )
669 {
670 int nSize = filter.getListIdStateBefore( ).size( );
671
672 for ( int i = 0; i < nSize; i++ )
673 {
674 daoUtil.setInt( i + nPosition + 1, filter.getListIdStateBefore( ).get( i ) );
675 }
676
677 nPosition += nSize;
678 }
679
680 if ( filter.containsResourceType( ) )
681 {
682 daoUtil.setString( ++nPosition, filter.getResourceType( ) );
683 }
684
685 if ( filter.containsExternalParentId( ) )
686 {
687 daoUtil.setInt( ++nPosition, filter.getExternalParentId( ) );
688 }
689
690 if ( lListIdState != null )
691 {
692 int nSize = lListIdState.size( );
693
694 for ( int i = 0; i < nSize; i++ )
695 {
696 daoUtil.setInt( i + nPosition + 1, lListIdState.get( i ) );
697 }
698
699 nPosition += nSize;
700 }
701
702 if ( filter.containsWorkgroupKeyList( ) )
703 {
704 ReferenceList list = ReferenceList.convert( filter.getWorkgroupKeyList( ) );
705 int nSize = list.size( );
706
707 for ( int i = 0; i < nSize; i++ )
708 {
709 daoUtil.setString( i + nPosition + 1, list.get( i ).getCode( ) );
710 }
711
712 nPosition += nSize;
713 }
714
715 return nPosition;
716 }
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731 private String buildFilterQuerydHeader( ResourceWorkflowFilter filter, List<Integer> lListIdState, String strSelectSQL, String strOrderBy )
732 {
733 List<String> listStrFilter = new ArrayList<>( );
734
735 if ( filter.containsIdWorkflow( ) )
736 {
737 listStrFilter.add( SQL_FILTER_ID_WORKFLOW );
738 }
739
740 if ( ( lListIdState == null ) && filter.containsIdState( ) )
741 {
742 listStrFilter.add( SQL_FILTER_ID_STATE );
743 }
744
745 if ( filter.containsListIdStateBefore( ) )
746 {
747 StringBuilder sbSQL = new StringBuilder( SQL_FILTER_ID_STATE_BY_ID_ACTION );
748
749 for ( int i = 1; i < filter.getListIdStateBefore( ).size( ); i++ )
750 {
751 sbSQL.append( SQL_ADITIONAL_PARAMETER );
752 }
753
754 sbSQL.append( SQL_CLOSE_PARENTHESIS );
755 listStrFilter.add( sbSQL.toString( ) );
756 }
757
758 if ( filter.containsResourceType( ) )
759 {
760 listStrFilter.add( SQL_FILTER_RESOURCE_TYPE );
761 }
762
763 if ( filter.containsExternalParentId( ) )
764 {
765 listStrFilter.add( SQL_FILTER_EXTERNAL_PARENT_ID );
766 }
767
768 if ( CollectionUtils.isNotEmpty( lListIdState ) )
769 {
770 StringBuilder sb = new StringBuilder( );
771 sb.append( SQL_FILTER_LIST_STATE );
772 sb.append( lListIdState.stream( ).map( i -> "?" ).collect( Collectors.joining( "," ) ) );
773 sb.append( SQL_CLOSE_PARENTHESIS );
774 listStrFilter.add( sb.toString( ) );
775 }
776
777 String strSQL = null;
778
779 if ( filter.containsWorkgroupKeyList( ) )
780 {
781 ReferenceList list = ReferenceList.convert( filter.getWorkgroupKeyList( ) );
782 int nSize = list.size( );
783
784 if ( nSize > 0 )
785 {
786 StringBuilder sb = new StringBuilder( );
787 sb.append( SQL_FILTER_WORKGROUP_KEY );
788 sb.append( list.stream( ).map( i -> "?" ).collect( Collectors.joining( "," ) ) );
789 sb.append( SQL_CLOSE_PARENTHESIS + SQL_CLOSE_PARENTHESIS );
790 listStrFilter.add( sb.toString( ) );
791 }
792
793 strSQL = WorkflowUtils.buildRequestWithFilter( strSelectSQL + SQL_QUERY_WITH_WORKGROUP, listStrFilter, null );
794 }
795 else
796 {
797 strSQL = WorkflowUtils.buildRequestWithFilter( strSelectSQL, listStrFilter, strOrderBy );
798 }
799
800 return strSQL;
801 }
802
803 private ResourceWorkflow dataToObject( DAOUtil daoUtil )
804 {
805 int nPos = 0;
806 ResourceWorkflow documentWorkflow = new ResourceWorkflow( );
807 documentWorkflow.setIdResource( daoUtil.getInt( ++nPos ) );
808 documentWorkflow.setResourceType( daoUtil.getString( ++nPos ) );
809
810 State state = new State( );
811 state.setId( daoUtil.getInt( ++nPos ) );
812 documentWorkflow.setState( state );
813
814 Workflow workflow = new Workflow( );
815 workflow.setId( daoUtil.getInt( ++nPos ) );
816 documentWorkflow.setWorkFlow( workflow );
817
818 if ( daoUtil.getObject( ++nPos ) != null )
819 {
820 documentWorkflow.setExternalParentId( daoUtil.getInt( nPos ) );
821 }
822 else
823 {
824 documentWorkflow.setExternalParentId( null );
825 }
826 documentWorkflow.setAssociatedWithWorkgroup( daoUtil.getBoolean( ++nPos ) );
827 return documentWorkflow;
828 }
829 }