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.panel.display.factory;
35
36 import java.util.ArrayList;
37 import java.util.Collections;
38 import java.util.List;
39
40 import javax.servlet.http.HttpServletRequest;
41
42 import org.apache.commons.collections.CollectionUtils;
43 import org.apache.commons.lang3.StringUtils;
44 import org.apache.commons.lang3.math.NumberUtils;
45
46 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.IRecordPanel;
47 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.configuration.RecordPanelConfiguration;
48 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.panel.initializer.IRecordPanelInitializer;
49 import fr.paris.lutece.plugins.directory.modules.multiview.util.DirectoryMultiviewConstants;
50 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.panel.display.IRecordPanelDisplay;
51 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.panel.display.initializer.IRecordPanelDisplayInitializer;
52 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.panel.display.initializer.factory.IRecordPanelDisplayInitializerFactory;
53 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.panel.display.initializer.factory.RecordDisplayInitializerFactoryFacade;
54 import fr.paris.lutece.plugins.directory.modules.multiview.web.record.util.RecordListPositionComparator;
55
56
57
58
59 public class RecordPanelDisplayFactory
60 {
61
62 private static final int INDEX_LIST_PANEL_FIRST_POSITION = NumberUtils.INTEGER_ZERO;
63 private static final boolean ACTIVE_LIST_PANEL = Boolean.TRUE;
64
65
66
67
68
69
70
71
72
73
74 public List<IRecordPanelDisplay> createRecordPanelDisplayList( HttpServletRequest request, List<IRecordPanel> listRecordPanel )
75 {
76 List<IRecordPanelDisplay> listRecordPanelDisplay = new ArrayList<>( );
77 List<IRecordPanelDisplayFactory> listRecordPanelDisplayFactory = new RecordPanelDisplayFactoryFacade( ).buildRecordPanelDisplayFactoryList( );
78
79 if ( !CollectionUtils.isEmpty( listRecordPanelDisplayFactory ) )
80 {
81 IRecordPanelDisplay recordPanelDisplay = null;
82 for ( IRecordPanel recordPanel : listRecordPanel )
83 {
84 for ( IRecordPanelDisplayFactory recordPanelDisplayFactory : listRecordPanelDisplayFactory )
85 {
86 recordPanelDisplay = recordPanelDisplayFactory.buildRecordPanelDisplay( recordPanel );
87 if ( recordPanelDisplay != null )
88 {
89 configureRecordPanelDisplay( request, recordPanelDisplay );
90
91 listRecordPanelDisplay.add( recordPanelDisplay );
92 break;
93 }
94 }
95 }
96
97
98 Collections.sort( listRecordPanelDisplay, new RecordListPositionComparator( ) );
99
100
101 manageActiveRecordPanelDisplay( listRecordPanelDisplay );
102 }
103
104 return listRecordPanelDisplay;
105 }
106
107
108
109
110
111
112
113
114
115
116 private void configureRecordPanelDisplay( HttpServletRequest request, IRecordPanelDisplay recordPanelDisplay )
117 {
118 boolean bIsSelectedPanel = isSelectedPanel( request, recordPanelDisplay.getTechnicalCode( ) );
119 recordPanelDisplay.setActive( bIsSelectedPanel );
120
121 buildRecordPanelDisplayInitializer( request, recordPanelDisplay.getRecordPanel( ) );
122 }
123
124
125
126
127
128
129
130
131
132
133 private boolean isSelectedPanel( HttpServletRequest request, String strPanelTechnicalCode )
134 {
135 boolean bIsSelectedPanel = Boolean.FALSE;
136
137
138 String strRecordPanelSelected = request.getParameter( DirectoryMultiviewConstants.PARAMETER_SELECTED_PANEL );
139 if ( StringUtils.isNotBlank( strRecordPanelSelected ) )
140 {
141 bIsSelectedPanel = strPanelTechnicalCode.equals( strRecordPanelSelected );
142 }
143 else
144 {
145
146 String strPreviousRecordPanelSelected = request.getParameter( DirectoryMultiviewConstants.PARAMETER_CURRENT_SELECTED_PANEL );
147 if ( StringUtils.isNotBlank( strPreviousRecordPanelSelected ) )
148 {
149 bIsSelectedPanel = strPanelTechnicalCode.equals( strPreviousRecordPanelSelected );
150 }
151 }
152
153 return bIsSelectedPanel;
154 }
155
156
157
158
159
160
161
162
163
164 public void buildRecordPanelDisplayInitializer( HttpServletRequest request, IRecordPanel recordPanel )
165 {
166 List<IRecordPanelDisplayInitializerFactory> listRecordPanelDisplayInitializerFactory = new RecordDisplayInitializerFactoryFacade( )
167 .buildRecordPanelDisplayInitializerList( );
168
169 if ( !CollectionUtils.isEmpty( listRecordPanelDisplayInitializerFactory ) && recordPanel != null )
170 {
171 RecordPanelConfiguration recordPanelConfiguration = recordPanel.getRecordPanelConfiguration( );
172
173 if ( recordPanelConfiguration != null )
174 {
175 for ( IRecordPanelDisplayInitializerFactory recordPanelDisplayInitializerFactory : listRecordPanelDisplayInitializerFactory )
176 {
177 List<IRecordPanelInitializer> listRecordPanelInitializer = recordPanelConfiguration.getListRecordPanelInitializer( );
178
179 buildPanelDisplayInitializerRecordParameters( request, recordPanelDisplayInitializerFactory, listRecordPanelInitializer );
180 }
181 }
182 }
183 }
184
185
186
187
188
189
190
191
192
193
194
195
196 private void buildPanelDisplayInitializerRecordParameters( HttpServletRequest request,
197 IRecordPanelDisplayInitializerFactory recordPanelDisplayInitializerFactory, List<IRecordPanelInitializer> listRecordPanelInitializer )
198 {
199 if ( recordPanelDisplayInitializerFactory != null && !CollectionUtils.isEmpty( listRecordPanelInitializer ) )
200 {
201 for ( IRecordPanelInitializer recordPanelInitializer : listRecordPanelInitializer )
202 {
203 IRecordPanelDisplayInitializer recordPanelDisplayInitializer = recordPanelDisplayInitializerFactory
204 .buildRecordPanelDisplay( recordPanelInitializer );
205 if ( recordPanelDisplayInitializer != null )
206 {
207 recordPanelDisplayInitializer.setRecordPanelInitializer( recordPanelInitializer );
208 recordPanelDisplayInitializer.buildRecordParameters( request );
209 }
210 }
211 }
212 }
213
214
215
216
217
218
219
220
221 private void manageActiveRecordPanelDisplay( List<IRecordPanelDisplay> listRecordPanelDisplay )
222 {
223 boolean bActivePanelPresent = Boolean.FALSE;
224
225 for ( IRecordPanelDisplay recordPanelDisplaySorted : listRecordPanelDisplay )
226 {
227 if ( recordPanelDisplaySorted.isActive( ) )
228 {
229 bActivePanelPresent = Boolean.TRUE;
230 break;
231 }
232 }
233
234 if ( !bActivePanelPresent )
235 {
236 listRecordPanelDisplay.get( INDEX_LIST_PANEL_FIRST_POSITION ).setActive( ACTIVE_LIST_PANEL );
237 }
238 }
239 }