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.web.record.util;
35
36 import java.util.ArrayList;
37 import java.util.LinkedHashMap;
38 import java.util.List;
39 import java.util.Locale;
40 import java.util.Map;
41
42 import org.apache.commons.collections.CollectionUtils;
43 import org.apache.commons.lang3.StringUtils;
44
45 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.DirectoryRecordItem;
46 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.RecordColumnCell;
47 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.column.display.IRecordColumnDisplay;
48 import fr.paris.lutece.portal.service.template.AppTemplateService;
49
50
51
52
53 public final class RecordListTemplateBuilder
54 {
55
56 private static final String TEMPLATE_MULTI_DIRECTORY_TABLE = "admin/plugins/directory/modules/multiview/includes/include_manage_multi_record_directory_table.html";
57
58
59 private static final String MARK_DIRECTORY_RECORD_ITEM_LIST = "directory_record_item_list";
60 private static final String MARK_RECORD_COLUMN_HEADER_TEMPLATE_LIST = "record_column_header_template_list";
61 private static final String MARK_RECORD_LINE_TEMPLATE_LIST = "record_line_template_list";
62 private static final String MARK_RECORD_DETAILS_REDIRECT_BASE_URL = "redirect_details_base_url";
63
64
65
66
67 private RecordListTemplateBuilder( )
68 {
69
70 }
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 public static String buildTableTemplate( List<IRecordColumnDisplay> listRecordColumnDisplay, List<DirectoryRecordItem> listDirectoryRecordItem,
88 Locale locale, String strRedirectionDetailsBaseUrl, String strSortUrl )
89 {
90 String strTableTemplate = StringUtils.EMPTY;
91
92 if ( !CollectionUtils.isEmpty( listRecordColumnDisplay ) && !CollectionUtils.isEmpty( listDirectoryRecordItem ) )
93 {
94
95 List<String> listRecordColumnHeaderTemplate = buildRecordColumnHeaderTemplateList( listRecordColumnDisplay, locale, strSortUrl );
96
97
98 List<RecordColumnLineTemplate> listRecordColumnLineTemplate = buildRecordColumnLineTemplateList( listRecordColumnDisplay, listDirectoryRecordItem,
99 locale );
100
101
102 Map<String, Object> model = new LinkedHashMap<>( );
103 model.put( MARK_RECORD_COLUMN_HEADER_TEMPLATE_LIST, listRecordColumnHeaderTemplate );
104 model.put( MARK_DIRECTORY_RECORD_ITEM_LIST, listDirectoryRecordItem );
105 model.put( MARK_RECORD_LINE_TEMPLATE_LIST, listRecordColumnLineTemplate );
106 model.put( MARK_RECORD_DETAILS_REDIRECT_BASE_URL, strRedirectionDetailsBaseUrl );
107
108 strTableTemplate = AppTemplateService.getTemplate( TEMPLATE_MULTI_DIRECTORY_TABLE, locale, model ).getHtml( );
109 }
110
111 return strTableTemplate;
112 }
113
114
115
116
117
118
119
120
121
122
123
124
125 private static List<String> buildRecordColumnHeaderTemplateList( List<IRecordColumnDisplay> listRecordColumnDisplay, Locale locale, String strSortUrl )
126 {
127 List<String> listRecordColumnHeaderTemplate = new ArrayList<>( );
128
129 if ( listRecordColumnDisplay != null && !listRecordColumnDisplay.isEmpty( ) )
130 {
131 for ( IRecordColumnDisplay recordColumnDisplay : listRecordColumnDisplay )
132 {
133 String strRecordColumnDisplayHeaderTemplate = recordColumnDisplay.buildRecordColumnHeaderTemplate( strSortUrl, locale );
134 listRecordColumnHeaderTemplate.add( strRecordColumnDisplayHeaderTemplate );
135 }
136 }
137
138 return listRecordColumnHeaderTemplate;
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152 private static List<RecordColumnLineTemplate> buildRecordColumnLineTemplateList( List<IRecordColumnDisplay> listRecordColumnDisplay,
153 List<DirectoryRecordItem> listDirectoryRecordItem, Locale locale )
154 {
155 List<RecordColumnLineTemplate> listRecordColumnLineTemplate = new ArrayList<>( );
156
157 if ( listRecordColumnDisplay != null && !listRecordColumnDisplay.isEmpty( ) && listDirectoryRecordItem != null && !listDirectoryRecordItem.isEmpty( ) )
158 {
159 for ( DirectoryRecordItem directoryRecordItem : listDirectoryRecordItem )
160 {
161 int nIdRecord = directoryRecordItem.getIdRecord( );
162 RecordColumnLineTemplate recordColumnLineTemplate = new RecordColumnLineTemplate( nIdRecord );
163
164 List<RecordColumnCell> listRecordColumnCell = directoryRecordItem.getDirectoryRecordCellValues( );
165 populateLineTemplateFromCellValues( recordColumnLineTemplate, listRecordColumnCell, listRecordColumnDisplay, locale );
166
167 listRecordColumnLineTemplate.add( recordColumnLineTemplate );
168 }
169 }
170
171 return listRecordColumnLineTemplate;
172 }
173
174
175
176
177
178
179
180
181
182
183
184
185
186 private static void populateLineTemplateFromCellValues( RecordColumnLineTemplate recordColumnLineTemplate, List<RecordColumnCell> listRecordColumnCell,
187 List<IRecordColumnDisplay> listRecordColumnDisplay, Locale locale )
188 {
189 if ( listRecordColumnCell != null && !listRecordColumnCell.isEmpty( ) )
190 {
191 for ( int index = 0; index < listRecordColumnCell.size( ); index++ )
192 {
193
194 int nColumnDisplayPosition = index + 1;
195 IRecordColumnDisplay recordColumnDisplay = findRecordColumnDisplayByPosition( nColumnDisplayPosition, listRecordColumnDisplay );
196 if ( recordColumnDisplay != null )
197 {
198 RecordColumnCell recordColumnCell = listRecordColumnCell.get( index );
199 String strRecordColunmCellTemplate = recordColumnDisplay.buildRecordColumnCellTemplate( recordColumnCell, locale );
200 recordColumnLineTemplate.addRecordColumnCellTemplate( strRecordColunmCellTemplate );
201 }
202 }
203 }
204 }
205
206
207
208
209
210
211
212
213
214
215 private static IRecordColumnDisplay findRecordColumnDisplayByPosition( int nRecordColumnPosition, List<IRecordColumnDisplay> listRecordColumnDisplay )
216 {
217 IRecordColumnDisplay recordColumnDisplayResult = null;
218
219 if ( listRecordColumnDisplay != null && !listRecordColumnDisplay.isEmpty( ) )
220 {
221 for ( IRecordColumnDisplay recordColumnDisplay : listRecordColumnDisplay )
222 {
223 if ( recordColumnDisplay.getPosition( ) == nRecordColumnPosition )
224 {
225 recordColumnDisplayResult = recordColumnDisplay;
226 break;
227 }
228 }
229 }
230
231 return recordColumnDisplayResult;
232 }
233 }