Skip to content

Commit f729c91

Browse files
committed
LUT-27605 : control display of form title according to workgroup
1 parent 1d17ef3 commit f729c91

14 files changed

+276
-2
lines changed

src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListFacade.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig;
3737
import java.util.Comparator;
3838
import java.util.List;
39+
import javax.servlet.http.HttpServletRequest;
3940

4041
import javax.inject.Inject;
4142

@@ -88,4 +89,26 @@ public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listForm
8889

8990
_formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig );
9091
}
92+
/**
93+
* Populate the given FormPanel with the information of the given FormColumns and FormFilters
94+
*
95+
* @param formPanel
96+
* The FormPanel to populate
97+
* @param listFormColumn
98+
* The list of all FormColumn to use to be populated
99+
* @param listFormFilter
100+
* The list of FormFilter to use for retrieving the data of the columns to populate
101+
* @param nStartIndex
102+
* The start index of doc
103+
* @param nPageSize
104+
* The number of docs to load for pagination purpose
105+
* @param sortConfig
106+
*/
107+
public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
108+
FormItemSortConfig sortConfig, HttpServletRequest request )
109+
{
110+
listFormColumn.sort( Comparator.comparing( IFormColumn::getFormColumnPosition ) );
111+
112+
_formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, request );
113+
}
91114
}

src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListLuceneDAO.java

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.ArrayList;
3737
import java.util.List;
3838
import java.util.Optional;
39+
import javax.servlet.http.HttpServletRequest;
3940

4041
import org.apache.commons.collections.CollectionUtils;
4142

@@ -84,6 +85,20 @@ public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listForm
8485

8586
formPanel.setFormResponseItemList( listFormResponseItem );
8687
}
88+
@Override
89+
public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
90+
FormItemSortConfig sortConfig, HttpServletRequest request )
91+
{
92+
// To retrieve the values to display on the table we must have a FormPanel and a list of FormColumn
93+
if ( formPanel == null || CollectionUtils.isEmpty( listFormColumn ) )
94+
{
95+
return;
96+
}
97+
98+
List<FormResponseItem> listFormResponseItem = searchFormResponseItem( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, request );
99+
100+
formPanel.setFormResponseItemList( listFormResponseItem );
101+
}
87102

88103
@Override
89104
public List<FormResponseItem> searchAllFormResponseItem( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter,
@@ -121,6 +136,35 @@ private List<FormResponseItem> searchFormResponseItem( FormPanel formPanel, List
121136

122137
return listFormResponseItem;
123138
}
139+
private List<FormResponseItem> searchFormResponseItem( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter,
140+
int nStartIndex, int nPageSize, FormItemSortConfig sortConfig, HttpServletRequest request )
141+
{
142+
// Create the list of all values of the parameter to used
143+
List<String> listQueryParametersValues = new ArrayList<>( );
144+
145+
// Build the list of query part from the formPanel, the list of columns and the list of filters
146+
List<IFormPanelInitializerQueryPart> listFormPanelInitializerQueryPart = buildFormPanelInitializerQueryPartList( formPanel, listQueryParametersValues, request );
147+
List<IFormColumnQueryPart> listFormColumnQueryPart = buildformColumnQueryPartList( listFormColumn );
148+
List<IFormFilterQueryPart> listFormFilterQueryPart = buildFormFilterQueryPartList( listFormFilter, listQueryParametersValues );
149+
150+
List<FormResponseItem> listFormResponseItem = new ArrayList<>( );
151+
152+
for ( FormResponseSearchItem formResponseSearchItem : _formSearchEngine.getSearchResults( listFormPanelInitializerQueryPart, listFormColumnQueryPart,
153+
listFormFilterQueryPart, sortConfig, nStartIndex, nPageSize, formPanel ) )
154+
{
155+
// Create a FormResponseItem sppfor the current result line
156+
FormResponseItem formResponseItem = createFormResponseItem( formResponseSearchItem );
157+
listFormResponseItem.add( formResponseItem );
158+
159+
for ( IFormColumnQueryPart formColumnQueryPart : listFormColumnQueryPart )
160+
{
161+
FormColumnCell formColumnCell = formColumnQueryPart.getFormColumnCell( formResponseSearchItem );
162+
formResponseItem.addFormColumnCell( formColumnCell );
163+
}
164+
}
165+
166+
return listFormResponseItem;
167+
}
124168

125169
/**
126170
* Create a FormResponseItem from a DAOUtil
@@ -169,6 +213,38 @@ private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQue
169213

170214
return listFormPanelInitializerQueryPart;
171215
}
216+
/**
217+
* Build the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel
218+
*
219+
* @param formPanel
220+
* The FormPanel used to retrieve the list of all FormPanelInitializer to retrieve the list of FormPanelInitializerQueryPart
221+
* @param listQueryParametersValue
222+
* The list of all parameter values to used to fill the DAOUtil statement
223+
* @return the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel
224+
*/
225+
private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQueryPartList( FormPanel formPanel, List<String> listQueryParametersValue, HttpServletRequest request )
226+
{
227+
List<IFormPanelInitializerQueryPart> listFormPanelInitializerQueryPart = new ArrayList<>( );
228+
229+
IFormPanelConfiguration formPanelConfiguration = formPanel.getFormPanelConfiguration( );
230+
231+
if ( formPanelConfiguration != null && !CollectionUtils.isEmpty( formPanel.getListFormPanelInitializer( ) ) )
232+
{
233+
List<IFormPanelInitializer> listFormPanelInitializer = formPanel.getListFormPanelInitializer( );
234+
235+
for ( IFormPanelInitializer formPanelInitializer : listFormPanelInitializer )
236+
{
237+
IFormPanelInitializerQueryPart formPanelInitializerQueryPart = retrieveFormPanelInitializerQueryPart( formPanelInitializer,
238+
listQueryParametersValue, request );
239+
if ( formPanelInitializerQueryPart != null )
240+
{
241+
listFormPanelInitializerQueryPart.add( formPanelInitializerQueryPart );
242+
}
243+
}
244+
}
245+
246+
return listFormPanelInitializerQueryPart;
247+
}
172248

173249
/**
174250
* Retrieve the IformPanelInitializerQueryPart associate to the givenFormPanelInitializer
@@ -200,6 +276,36 @@ private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryP
200276

201277
return formPanelInitializerQueryPartResult;
202278
}
279+
/**
280+
* Retrieve the IformPanelInitializerQueryPart associate to the givenFormPanelInitializer
281+
*
282+
* @param formPanelInitializer
283+
* The formPanelInitializer used to retrieve the associated IFormPanelInitializerQueryPart
284+
* @param listQueryParametersPositionValue
285+
* The list of all parameter values to used to fill the DAOUtil statement
286+
* @return the IFormPanelInitializerQueryPart associate to the given FormPanelInitializer or null if not found
287+
*/
288+
private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryPart( IFormPanelInitializer formPanelInitializer, List<String> listQueryParametersPositionValue , HttpServletRequest request)
289+
{
290+
IFormPanelInitializerQueryPart formPanelInitializerQueryPartResult = null;
291+
292+
if ( formPanelInitializer != null )
293+
{
294+
formPanelInitializerQueryPartResult = formPanelInitializer.getIFormPanelInitializerQueryPart( request );
295+
296+
if ( formPanelInitializerQueryPartResult != null )
297+
{
298+
FormParameters formParameters = formPanelInitializer.getFormParameters( );
299+
formPanelInitializerQueryPartResult.buildFormPanelInitializerQuery( formParameters );
300+
301+
List<String> listUsedParametersValues = formParameters.getListUsedParametersValue( );
302+
listQueryParametersPositionValue.addAll( listUsedParametersValues );
303+
}
304+
}
305+
306+
return formPanelInitializerQueryPartResult;
307+
}
308+
203309

204310
/**
205311
* Build the list of IFormColumnQueryPart to use for build the global query from the given list of IFormColumn

src/java/fr/paris/lutece/plugins/forms/business/form/list/IFormListDAO.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public interface IFormListDAO
4848
{
4949
/**
5050
* Populate the FormPanel with the values returned by the SQL query results
51-
*
51+
*
5252
* @param formPanel
5353
* The FormPanel used to retrieve the values of the FormColumn
5454
* @param listFormColumn
@@ -65,6 +65,9 @@ public interface IFormListDAO
6565
void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
6666
FormItemSortConfig sortConfig );
6767

68+
void populateFormColumns(fr.paris.lutece.plugins.forms.business.form.panel.FormPanel formPanel, java.util.List<fr.paris.lutece.plugins.forms.business.form.column.IFormColumn> listFormColumn, java.util.List<fr.paris.lutece.plugins.forms.business.form.filter.FormFilter> listFormFilter, int nStartIndex, int nPageSize,
69+
fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig sortConfig, javax.servlet.http.HttpServletRequest request);
70+
6871
/**
6972
* Search the Lucene Index.
7073
*

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/IFormPanelInitializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
*/
3434
package fr.paris.lutece.plugins.forms.business.form.panel.initializer;
3535

36+
import javax.servlet.http.HttpServletRequest;
3637
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
3738
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart;
3839
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer;
@@ -63,6 +64,8 @@ public interface IFormPanelInitializer
6364
* @return
6465
*/
6566
IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( );
67+
IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( HttpServletRequest request );
68+
6669

6770
/**
6871
* Get an {@link IFormPanelDisplayInitializer} associated with this IFormPanelInitializer.

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/AbstractFormPanelInitializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
3737
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.IFormPanelInitializer;
3838

39+
import javax.servlet.http.HttpServletRequest;
3940
/**
4041
* Abstract class for implementation of the IFormPanelInitializer interface
4142
*/
@@ -61,4 +62,6 @@ public void setFormParameters( FormParameters formParameters )
6162
{
6263
_formParameters = formParameters;
6364
}
65+
public abstract fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(HttpServletRequest request);
66+
6467
}

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,14 @@
3838
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer;
3939
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.impl.FormPanelFormResponseDisplayInitializer;
4040

41+
import javax.servlet.http.HttpServletRequest;
4142
/**
4243
* Implementation of the IFormPanelInitializer associated to the panel Form Response
4344
*/
4445
public class FormPanelFormResponseInitializer extends AbstractFormPanelInitializer
4546
{
47+
public javax.servlet.http.HttpServletRequest _request;
48+
4649
@Override
4750
public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( )
4851
{
@@ -54,4 +57,9 @@ public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( )
5457
{
5558
return new FormPanelFormResponseDisplayInitializer( );
5659
}
60+
61+
@Override
62+
public fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(HttpServletRequest request) {
63+
return new FormPanelFormResponseInitializerQueryPart(_request);
64+
}
5765
}

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer;
3939
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.impl.FormPanelFormsDisplayInitializer;
4040

41+
import javax.servlet.http.HttpServletRequest;
4142
/**
4243
* Implementation of the IFormPanelInitializer to allow the use of the FormResponse and Form for a Panel
4344
*/
@@ -48,6 +49,11 @@ public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( )
4849
{
4950
return new FormPanelFormsInitializerQueryPart( );
5051
}
52+
@Override
53+
public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( HttpServletRequest request )
54+
{
55+
return new FormPanelFormsInitializerQueryPart(request);
56+
}
5157

5258
@Override
5359
public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( )

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormResponseInitializerQueryPart.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,20 @@
3333
*/
3434
package fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl;
3535

36+
import javax.servlet.http.HttpServletRequest;
3637
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
3738

3839
/**
3940
* Implementation of the IFormFilterQueryPart for a FormFilterPanelFormResponse filter
4041
*/
4142
public class FormPanelFormResponseInitializerQueryPart extends AbstractFormPanelInitializerQueryPart
4243
{
44+
public FormPanelFormResponseInitializerQueryPart(HttpServletRequest request) {
45+
super();
46+
}
47+
public FormPanelFormResponseInitializerQueryPart() {
48+
super();
49+
}
4350
/**
4451
* {@inheritDoc}
4552
*/

src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormsInitializerQueryPart.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,22 @@
3333
*/
3434
package fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl;
3535

36+
import fr.paris.lutece.api.user.User;
37+
import fr.paris.lutece.plugins.forms.business.Form;
38+
import fr.paris.lutece.plugins.forms.business.FormHome;
3639
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
40+
import fr.paris.lutece.portal.service.admin.AdminUserService;
41+
import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
42+
43+
import java.util.List;
44+
import java.util.ArrayList;
45+
import java.util.Collections;
46+
import javax.servlet.http.HttpServletRequest;
47+
import org.apache.lucene.search.BooleanClause;
48+
import org.apache.lucene.search.BooleanQuery;
49+
import org.apache.lucene.search.BooleanQuery.Builder;
3750
import org.apache.lucene.search.MatchAllDocsQuery;
51+
import org.apache.lucene.search.Query;
3852

3953
/**
4054
* Implementation of the FormPanelInitializerQueryPart associate to the FormPanelFormsInitializer
@@ -49,6 +63,55 @@ public FormPanelFormsInitializerQueryPart( )
4963
super( );
5064
setFormPanelInitializerSelectQuery( new MatchAllDocsQuery( ) );
5165
}
66+
/**
67+
* Constructor
68+
* Select the forms that the user can access and build the query
69+
* @param request The HTTP request
70+
*/
71+
public FormPanelFormsInitializerQueryPart( HttpServletRequest request )
72+
{
73+
super( );
74+
User user = AdminUserService.getAdminUser( request );
75+
java.util.List<fr.paris.lutece.plugins.forms.business.Form> listForms = FormHome.getFormList();
76+
listForms = (List<Form>) AdminWorkgroupService.getAuthorizedCollection( listForms, user );
77+
List<Integer> listIds = new ArrayList<Integer>();
78+
for ( Form form : listForms )
79+
{
80+
listIds.add( form.getId() );
81+
}
82+
// sort the list
83+
Collections.sort( listIds );
84+
List<List<Integer>> listIdsList = new ArrayList<java.util.List<Integer>>();
85+
for (int i = 0; i < listIds.size(); i++)
86+
{
87+
// if there is a gap between the current id and the previous we create a new list
88+
if (i == 0 || listIds.get(i) != listIds.get(i - 1) + 1)
89+
{
90+
listIdsList.add(new java.util.ArrayList<Integer>());
91+
}
92+
listIdsList.get(listIdsList.size() - 1).add(listIds.get(i));
93+
}
94+
java.util.List< org.apache.lucene.search.Query > queries = new java.util.ArrayList<org.apache.lucene.search.Query>();
95+
for (int i = 0; i < listIdsList.size(); i++)
96+
{
97+
if (listIdsList.get(i).size() == 1)
98+
{
99+
queries.add(org.apache.lucene.document.IntPoint.newExactQuery("id_form", listIdsList.get(i).get(0)));
100+
}
101+
else
102+
{
103+
queries.add(org.apache.lucene.document.IntPoint.newRangeQuery("id_form", listIdsList.get(i).get(0), listIdsList.get(i).get(listIdsList.get(i).size() - 1)));
104+
}
105+
}
106+
Builder builder = new BooleanQuery.Builder();
107+
for (Query query : queries)
108+
{
109+
builder.add(query, BooleanClause.Occur.SHOULD);
110+
}
111+
Query queryForms = builder.build();
112+
113+
setFormPanelInitializerSelectQuery( queryForms );
114+
}
52115

53116
/**
54117
* {@inheritDoc}

0 commit comments

Comments
 (0)