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.directory.modules.multiview.business.record.list;
35
36 import java.util.ArrayList;
37 import java.util.List;
38
39 import org.apache.commons.collections.CollectionUtils;
40 import org.apache.commons.lang3.StringUtils;
41
42 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.DirectoryRecordItem;
43 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.QueryBuilder;
44 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.RecordParameters;
45 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.IRecordColumn;
46 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.RecordColumnCell;
47 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.querypart.IRecordColumnQueryPart;
48 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.querypart.RecordColumnQueryPartFacade;
49 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.filter.IRecordFilter;
50 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.filter.querypart.IRecordFilterQueryPart;
51 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.filter.querypart.RecordFilterQueryPartFacade;
52 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.IRecordPanel;
53 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.configuration.RecordPanelConfiguration;
54 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.initializer.IRecordPanelInitializer;
55 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.initializer.querypart.IRecordPanelInitializerQueryPart;
56 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.initializer.querypart.RecordPanelInitializerQueryPartFacade;
57 import fr.paris.lutece.util.sql.DAOUtil;
58
59
60
61
62 public class RecordListDAO implements IRecordListDAO
63 {
64
65 private static final String ID_RECORD_COLUMN_NAME = "id_record";
66 private static final String ID_DIRECTORY_COLUMN_NAME = "id_directory";
67
68
69
70
71 @Override
72 public void populateRecordColumns( IRecordPanel recordPanel, List<IRecordColumn> listRecordColumn, List<IRecordFilter> listRecordFilter )
73 {
74
75 if ( recordPanel == null || CollectionUtils.isEmpty( listRecordColumn ) )
76 {
77 return;
78 }
79
80
81 List<String> listQueryParametersPositionValue = new ArrayList<>( );
82
83
84 List<IRecordPanelInitializerQueryPart> listRecordPanelInitializerQueryPart = buildRecordPanelInitializerQueryPartList( recordPanel,
85 listQueryParametersPositionValue );
86 List<IRecordColumnQueryPart> listRecordColumnQueryPart = buildRecordColumnQueryPartList( listRecordColumn );
87 List<IRecordFilterQueryPart> listRecordFilterQueryPart = buildRecordFilterQueryPartList( listRecordFilter, listQueryParametersPositionValue );
88
89
90 String strQuery = QueryBuilder.buildQuery( listRecordPanelInitializerQueryPart, listRecordColumnQueryPart, listRecordFilterQueryPart );
91
92 List<DirectoryRecordItem> listDirectoryRecordItem = new ArrayList<>( );
93
94 if ( StringUtils.isNotBlank( strQuery ) )
95 {
96 DAOUtil daoUtil = new DAOUtil( strQuery );
97 fillDAOUtilParameterValues( daoUtil, listQueryParametersPositionValue );
98 daoUtil.executeQuery( );
99
100 while ( daoUtil.next( ) )
101 {
102
103 DirectoryRecordItem directoryRecordItem = createDirectoryItem( daoUtil );
104 listDirectoryRecordItem.add( directoryRecordItem );
105
106 for ( IRecordColumnQueryPart recordColumnQueryPart : listRecordColumnQueryPart )
107 {
108 RecordColumnCell recordColumnCell = recordColumnQueryPart.getRecordColumnCell( daoUtil );
109 directoryRecordItem.addRecordColumnCell( recordColumnCell );
110 }
111 }
112
113 daoUtil.close( );
114 }
115
116 recordPanel.setDirectoryRecordItemList( listDirectoryRecordItem );
117 }
118
119
120
121
122
123
124
125
126
127 private void fillDAOUtilParameterValues( DAOUtil daoUtil, List<String> listQueryParametersPositionValue )
128 {
129 if ( !CollectionUtils.isEmpty( listQueryParametersPositionValue ) )
130 {
131 int nIndex = 1;
132 for ( String strParameterValue : listQueryParametersPositionValue )
133 {
134 try
135 {
136 int nParameterValue = Integer.parseInt( strParameterValue );
137 daoUtil.setInt( nIndex++, nParameterValue );
138 }
139 catch( NumberFormatException exception )
140 {
141 daoUtil.setString( nIndex++, strParameterValue );
142 }
143 }
144 }
145 }
146
147
148
149
150
151
152
153
154 private DirectoryRecordItem createDirectoryItem( DAOUtil daoUtil )
155 {
156 DirectoryRecordItem directoryRecordItem = new DirectoryRecordItem( );
157 directoryRecordItem.setIdRecord( daoUtil.getInt( ID_RECORD_COLUMN_NAME ) );
158 directoryRecordItem.setIdDirectory( daoUtil.getInt( ID_DIRECTORY_COLUMN_NAME ) );
159
160 return directoryRecordItem;
161 }
162
163
164
165
166
167
168
169
170
171
172 private static List<IRecordPanelInitializerQueryPart> buildRecordPanelInitializerQueryPartList( IRecordPanel recordPanel,
173 List<String> listQueryParametersPositionValue )
174 {
175 List<IRecordPanelInitializerQueryPart> listRecordPanelInitializerQueryPart = new ArrayList<>( );
176
177 RecordPanelConfiguration recordPanelConfiguration = recordPanel.getRecordPanelConfiguration( );
178
179 if ( recordPanelConfiguration != null && !CollectionUtils.isEmpty( recordPanelConfiguration.getListRecordPanelInitializer( ) ) )
180 {
181 List<IRecordPanelInitializer> listRecordPanelInitializer = recordPanelConfiguration.getListRecordPanelInitializer( );
182
183 for ( IRecordPanelInitializer recordPanelInitializer : listRecordPanelInitializer )
184 {
185 IRecordPanelInitializerQueryPart recordPanelInitializerQueryPart = retrieveRecordPanelInitializerQueryPart( recordPanelInitializer,
186 listQueryParametersPositionValue );
187 if ( recordPanelInitializerQueryPart != null )
188 {
189 listRecordPanelInitializerQueryPart.add( recordPanelInitializerQueryPart );
190 }
191 }
192 }
193
194 return listRecordPanelInitializerQueryPart;
195 }
196
197
198
199
200
201
202
203
204
205
206 private static IRecordPanelInitializerQueryPart retrieveRecordPanelInitializerQueryPart( IRecordPanelInitializer recordPanelInitializer,
207 List<String> listQueryParametersPositionValue )
208 {
209 IRecordPanelInitializerQueryPart recordPanelInitializerQueryPartResult = null;
210
211 if ( recordPanelInitializer != null )
212 {
213 recordPanelInitializerQueryPartResult = new RecordPanelInitializerQueryPartFacade( ).getRecordPanelInitializerQueryPart( recordPanelInitializer );
214
215 if ( recordPanelInitializerQueryPartResult != null )
216 {
217 RecordParameters recordParameters = recordPanelInitializer.getRecordParameters( );
218 recordPanelInitializerQueryPartResult.buildRecordPanelInitializerQuery( recordParameters );
219
220 List<String> listUsedParametersValues = recordParameters.getListUsedParametersValue( );
221 listQueryParametersPositionValue.addAll( listUsedParametersValues );
222 }
223 }
224
225 return recordPanelInitializerQueryPartResult;
226 }
227
228
229
230
231
232
233
234
235 private static List<IRecordColumnQueryPart> buildRecordColumnQueryPartList( List<IRecordColumn> listRecordColumn )
236 {
237 List<IRecordColumnQueryPart> listRecordColumnQueryPart = new ArrayList<>( );
238
239 if ( listRecordColumn != null && !listRecordColumn.isEmpty( ) )
240 {
241 for ( IRecordColumn recordColumn : listRecordColumn )
242 {
243 IRecordColumnQueryPart recordColumnQueryPart = retrieveRecordColumnQueryPart( recordColumn );
244 if ( recordColumnQueryPart != null )
245 {
246 recordColumnQueryPart.setRecordColumn( recordColumn );
247 listRecordColumnQueryPart.add( recordColumnQueryPart );
248 }
249 }
250 }
251
252 return listRecordColumnQueryPart;
253 }
254
255
256
257
258
259
260
261
262 private static IRecordColumnQueryPart retrieveRecordColumnQueryPart( IRecordColumn recordColumn )
263 {
264 IRecordColumnQueryPart recordColumnQueryPartResult = null;
265
266 if ( recordColumn != null )
267 {
268 recordColumnQueryPartResult = new RecordColumnQueryPartFacade( ).getRecordFilterQueryPart( recordColumn );
269 }
270
271 return recordColumnQueryPartResult;
272 }
273
274
275
276
277
278
279
280
281
282
283 private static List<IRecordFilterQueryPart> buildRecordFilterQueryPartList( List<IRecordFilter> listRecordFilter,
284 List<String> listQueryParametersPositionValue )
285 {
286 List<IRecordFilterQueryPart> listRecordFilterQueryPart = new ArrayList<>( );
287
288 if ( listRecordFilter != null && !listRecordFilter.isEmpty( ) )
289 {
290 for ( IRecordFilter recordFilter : listRecordFilter )
291 {
292 IRecordFilterQueryPart recordFilterQueryPart = retrieveRecordFilterQueryPart( recordFilter, listQueryParametersPositionValue );
293 if ( recordFilterQueryPart != null )
294 {
295 listRecordFilterQueryPart.add( recordFilterQueryPart );
296 }
297 }
298 }
299
300 return listRecordFilterQueryPart;
301 }
302
303
304
305
306
307
308
309
310
311
312 private static IRecordFilterQueryPart retrieveRecordFilterQueryPart( IRecordFilter recordFilter, List<String> listQueryParametersPositionValue )
313 {
314 IRecordFilterQueryPart recordFilterQueryPartResult = null;
315
316 if ( recordFilter != null )
317 {
318 IRecordFilterQueryPart recordFilterQueryPart = new RecordFilterQueryPartFacade( ).getRecordFilterQueryPart( recordFilter );
319 if ( recordFilterQueryPart != null )
320 {
321 RecordParameters recordParameters = recordFilter.getRecordParameters( );
322 recordFilterQueryPart.buildRecordFilterQuery( recordParameters );
323 recordFilterQueryPartResult = recordFilterQueryPart;
324
325 List<String> listUsedParametersValue = recordParameters.getListUsedParametersValue( );
326 listQueryParametersPositionValue.addAll( listUsedParametersValue );
327 }
328 }
329
330 return recordFilterQueryPartResult;
331 }
332 }