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.forms.web.form.filter.display.impl;
35
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.LinkedHashMap;
39 import java.util.List;
40 import java.util.Locale;
41 import java.util.Map;
42 import java.util.stream.Collectors;
43
44 import javax.servlet.http.HttpServletRequest;
45
46 import org.apache.commons.collections.CollectionUtils;
47 import org.apache.commons.lang3.ArrayUtils;
48 import org.apache.commons.lang3.StringUtils;
49 import org.apache.commons.lang3.math.NumberUtils;
50
51 import fr.paris.lutece.plugins.forms.business.Form;
52 import fr.paris.lutece.plugins.forms.business.FormHome;
53 import fr.paris.lutece.plugins.forms.business.form.column.IFormColumn;
54 import fr.paris.lutece.plugins.forms.business.form.column.impl.FormColumnEntry;
55 import fr.paris.lutece.plugins.forms.business.form.filter.FormFilter;
56 import fr.paris.lutece.plugins.forms.business.form.filter.configuration.FormFilterEntryConfiguration;
57 import fr.paris.lutece.plugins.forms.business.form.filter.configuration.IFormFilterConfiguration;
58 import fr.paris.lutece.plugins.forms.util.ReferenceListFactory;
59 import fr.paris.lutece.plugins.genericattributes.business.Entry;
60 import fr.paris.lutece.plugins.genericattributes.business.EntryFilter;
61 import fr.paris.lutece.plugins.genericattributes.business.EntryHome;
62 import fr.paris.lutece.plugins.genericattributes.business.Field;
63 import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
64 import fr.paris.lutece.plugins.genericattributes.service.entrytype.IEntryTypeService;
65 import fr.paris.lutece.util.ReferenceList;
66
67
68
69
70 public class FormFilterDisplayEntry extends AbstractFormFilterDisplay
71 {
72
73 private static final String PARAMETER_ENTRY_VALUE_PATTERN = "multiview_entry_value_%s";
74 private static final String FORM_RESOURCE_TYPE = Form.RESOURCE_TYPE;
75
76
77
78
79 @Override
80 public String getParameterName( )
81 {
82 return buildElementName( PARAMETER_ENTRY_VALUE_PATTERN );
83 }
84
85
86
87
88 @Override
89 public Map<String, Object> getFilterDisplayMapValues( HttpServletRequest request )
90 {
91 Map<String, Object> mapFilterNameValues = new LinkedHashMap<>( );
92
93 String strParameterName = buildElementName( PARAMETER_ENTRY_VALUE_PATTERN );
94 String[] strEntryParameterArray = request.getParameterValues( strParameterName );
95
96
97 if ( ArrayUtils.isNotEmpty( strEntryParameterArray ) )
98 {
99 String value = Arrays.asList( strEntryParameterArray ).stream( ).collect( Collectors.joining( ";" ) );
100 setValue( value );
101
102 IFormColumn formColumn = retrieveFormColumn( );
103 String strEntryValueColumnName = StringUtils.EMPTY;
104 if ( formColumn != null )
105 {
106 FormColumnEntry../../../../fr/paris/lutece/plugins/forms/business/form/column/impl/FormColumnEntry.html#FormColumnEntry">FormColumnEntry formColumnEntry = (FormColumnEntry) formColumn;
107 List<String> listEntryCode = formColumnEntry.getListEntryCode( );
108 strEntryValueColumnName = listEntryCode.get( 0 );
109 }
110 mapFilterNameValues.put( strEntryValueColumnName, value );
111 }
112 else
113 {
114 setValue( StringUtils.EMPTY );
115 }
116 return mapFilterNameValues;
117 }
118
119
120
121
122 @Override
123 public void buildTemplate(HttpServletRequest request, Locale locale)
124 {
125 String strParameterName = buildElementName( PARAMETER_ENTRY_VALUE_PATTERN );
126 manageFilterTemplate( request, createReferenceList( locale ), strParameterName );
127 }
128
129
130
131
132
133
134 private ReferenceList createReferenceList( Locale locale )
135 {
136 List<Entry> listIEntryToRetrieveValueFrom = new ArrayList<>( );
137
138 IFormColumn formColumn = retrieveFormColumn( );
139 if ( formColumn instanceof FormColumnEntry )
140 {
141 FormColumnEntry../../../../fr/paris/lutece/plugins/forms/business/form/column/impl/FormColumnEntry.html#FormColumnEntry">FormColumnEntry formColumnEntry = (FormColumnEntry) formColumn;
142 List<String> listEntryCode = formColumnEntry.getListEntryCode( );
143 listIEntryToRetrieveValueFrom = getEntryListFromCode( listEntryCode );
144 }
145 ReferenceList referenceListResult = new ReferenceList( );
146
147 referenceListResult.addItem( ReferenceListFactory.DEFAULT_CODE, getFormFilterDisplayLabel( locale ) );
148
149 FieldHome.getFieldListByListIdEntry( listIEntryToRetrieveValueFrom.stream( ).map( Entry::getIdEntry ).distinct( ).collect( Collectors.toList( ) ) )
150 .stream( ).filter( field -> IEntryTypeService.FIELD_ANSWER_CHOICE.equals( field.getCode( ) ) )
151 .forEach( ( Field field ) -> referenceListResult.addItem( field.getValue( ), field.getTitle( ) ) );
152
153 return referenceListResult;
154
155 }
156
157
158
159
160
161
162
163
164 private static List<Entry> getEntryListFromCode( List<String> listEntryCode )
165 {
166 List<Entry> listEntry = new ArrayList<>( );
167
168 if ( !CollectionUtils.isEmpty( listEntryCode ) )
169 {
170
171 List<Form> listForms = FormHome.getFormList( );
172
173 if ( !CollectionUtils.isEmpty( listForms ) )
174 {
175 for ( Form form : listForms )
176 {
177 listEntry.addAll( fillEntryListFromCode( form.getId( ), listEntryCode ) );
178 }
179 }
180 }
181
182 return listEntry;
183 }
184
185
186
187
188
189
190
191
192
193
194 private static List<Entry> fillEntryListFromCode( int nIdForm, List<String> listEntryCode )
195 {
196 List<Entry> listEntry = new ArrayList<>( );
197
198 EntryFilter entryFilter = new EntryFilter( );
199 entryFilter.setIdResource( nIdForm );
200 entryFilter.setResourceType( FORM_RESOURCE_TYPE );
201 entryFilter.setIdIsGroup( EntryFilter.FILTER_FALSE );
202 entryFilter.setIdIsComment( EntryFilter.FILTER_FALSE );
203
204 List<Entry> entryList = EntryHome.getEntryList( entryFilter );
205
206 for ( String strEntryCodeToFind : listEntryCode )
207 {
208 for ( Entry entry : entryList )
209 {
210 if ( strEntryCodeToFind.equals( entry.getCode( ) ) )
211 {
212 listEntry.add( entry );
213 }
214 }
215 }
216
217 return listEntry;
218 }
219
220
221
222
223
224
225
226
227 private String buildElementName( String strPatternElementName )
228 {
229 int nPosition = NumberUtils.INTEGER_MINUS_ONE;
230
231 FormFilter formFilter = getFormFilter( );
232 if ( formFilter != null && formFilter.getFormFilterConfiguration( ) != null )
233 {
234 nPosition = formFilter.getFormFilterConfiguration( ).getPosition( );
235 }
236
237 return String.format( strPatternElementName, nPosition );
238 }
239
240
241
242
243
244
245 private IFormColumn retrieveFormColumn( )
246 {
247 IFormColumn formColumnResult = null;
248
249 FormFilter formFilter = getFormFilter( );
250 if ( formFilter != null )
251 {
252 IFormFilterConfiguration formFilterConfiguration = formFilter.getFormFilterConfiguration( );
253 if ( formFilterConfiguration instanceof FormFilterEntryConfiguration )
254 {
255 FormFilterEntryConfiguratione/plugins/forms/business/form/filter/configuration/FormFilterEntryConfiguration.html#FormFilterEntryConfiguration">FormFilterEntryConfiguration formFilterEntryConfiguration = (FormFilterEntryConfiguration) formFilterConfiguration;
256 formColumnResult = formFilterEntryConfiguration.getFormColumn( );
257 }
258 }
259
260 return formColumnResult;
261 }
262 }