Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
*/
package fr.paris.lutece.plugins.forms.business.form.list;

import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig;
import java.util.Comparator;
import java.util.List;
Expand Down Expand Up @@ -88,4 +89,30 @@ public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listForm

_formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig );
}

/**
* Populate the given FormPanel with the information of the given FormColumns and FormFilters
*
* @param formPanel
* The FormPanel to populate
* @param listFormColumn
* The list of all FormColumn to use to be populated
* @param listFormFilter
* The list of FormFilter to use for retrieving the data of the columns to populate
* @param nStartIndex
* The start index of doc
* @param nPageSize
* The number of docs to load for pagination purpose
* @param sortConfig
* The comparator config
* @param user
* The current user
*/
public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
FormItemSortConfig sortConfig, User user )
{
listFormColumn.sort( Comparator.comparing( IFormColumn::getFormColumnPosition ) );

_formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, user );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@

import fr.paris.lutece.plugins.forms.business.form.FormParameters;
import fr.paris.lutece.plugins.forms.business.form.FormResponseItem;
import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig;
import fr.paris.lutece.plugins.forms.business.form.column.FormColumnCell;
import fr.paris.lutece.plugins.forms.business.form.column.IFormColumn;
Expand Down Expand Up @@ -80,7 +81,23 @@ public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listForm
return;
}

List<FormResponseItem> listFormResponseItem = searchFormResponseItem( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig );
List<FormResponseItem> listFormResponseItem = searchFormResponseItem( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, null );

formPanel.setFormResponseItemList( listFormResponseItem );
}

@Override
public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
FormItemSortConfig sortConfig, User user )
{
// To retrieve the values to display on the table we must have a FormPanel and a list of FormColumn
if ( formPanel == null || CollectionUtils.isEmpty( listFormColumn ) )
{
return;
}

List<FormResponseItem> listFormResponseItem = searchFormResponseItem( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig,
user );

formPanel.setFormResponseItemList( listFormResponseItem );
}
Expand All @@ -89,17 +106,18 @@ public void populateFormColumns( FormPanel formPanel, List<IFormColumn> listForm
public List<FormResponseItem> searchAllFormResponseItem( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter,
FormItemSortConfig sortConfig )
{
return searchFormResponseItem( formPanel, listFormColumn, listFormFilter, 0, 0, sortConfig );
return searchFormResponseItem( formPanel, listFormColumn, listFormFilter, 0, 0, sortConfig, null );
}

private List<FormResponseItem> searchFormResponseItem( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter,
int nStartIndex, int nPageSize, FormItemSortConfig sortConfig )
int nStartIndex, int nPageSize, FormItemSortConfig sortConfig, User user )
{
// Create the list of all values of the parameter to used
List<String> listQueryParametersValues = new ArrayList<>( );

// Build the list of query part from the formPanel, the list of columns and the list of filters
List<IFormPanelInitializerQueryPart> listFormPanelInitializerQueryPart = buildFormPanelInitializerQueryPartList( formPanel, listQueryParametersValues );
List<IFormPanelInitializerQueryPart> listFormPanelInitializerQueryPart = buildFormPanelInitializerQueryPartList( formPanel, listQueryParametersValues,
user );
List<IFormColumnQueryPart> listFormColumnQueryPart = buildformColumnQueryPartList( listFormColumn );
List<IFormFilterQueryPart> listFormFilterQueryPart = buildFormFilterQueryPartList( listFormFilter, listQueryParametersValues );

Expand All @@ -108,7 +126,7 @@ private List<FormResponseItem> searchFormResponseItem( FormPanel formPanel, List
for ( FormResponseSearchItem formResponseSearchItem : _formSearchEngine.getSearchResults( listFormPanelInitializerQueryPart, listFormColumnQueryPart,
listFormFilterQueryPart, sortConfig, nStartIndex, nPageSize, formPanel ) )
{
// Create a FormResponseItem sppfor the current result line
// Create a FormResponseItem for the current result line
FormResponseItem formResponseItem = createFormResponseItem( formResponseSearchItem );
listFormResponseItem.add( formResponseItem );

Expand All @@ -122,31 +140,19 @@ private List<FormResponseItem> searchFormResponseItem( FormPanel formPanel, List
return listFormResponseItem;
}

/**
* Create a FormResponseItem from a DAOUtil
*
* @param daoUtil
* The daoUtil to retrieve the values of the request from
* @return the created FormResponseItem
*/
private FormResponseItem createFormResponseItem( FormResponseSearchItem formResponseSearchItem )
{
FormResponseItem formResponseItem = new FormResponseItem( );
formResponseItem.setIdFormResponse( formResponseSearchItem.getIdFormResponse( ) );

return formResponseItem;
}

/**
* Build the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel
*
*
* @param formPanel
* The FormPanel used to retrieve the list of all FormPanelInitializer to retrieve the list of FormPanelInitializerQueryPart
* @param listQueryParametersValue
* The list of all parameter values to used to fill the DAOUtil statement
* @param user
* The current user
* @return the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel
*/
private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQueryPartList( FormPanel formPanel, List<String> listQueryParametersValue )
private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQueryPartList( FormPanel formPanel, List<String> listQueryParametersValue,
User user )
{
List<IFormPanelInitializerQueryPart> listFormPanelInitializerQueryPart = new ArrayList<>( );

Expand All @@ -159,7 +165,7 @@ private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQue
for ( IFormPanelInitializer formPanelInitializer : listFormPanelInitializer )
{
IFormPanelInitializerQueryPart formPanelInitializerQueryPart = retrieveFormPanelInitializerQueryPart( formPanelInitializer,
listQueryParametersValue );
listQueryParametersValue, user );
if ( formPanelInitializerQueryPart != null )
{
listFormPanelInitializerQueryPart.add( formPanelInitializerQueryPart );
Expand All @@ -172,21 +178,30 @@ private static List<IFormPanelInitializerQueryPart> buildFormPanelInitializerQue

/**
* Retrieve the IformPanelInitializerQueryPart associate to the givenFormPanelInitializer
*
*
* @param formPanelInitializer
* The formPanelInitializer used to retrieve the associated IFormPanelInitializerQueryPart
* @param listQueryParametersPositionValue
* The list of all parameter values to used to fill the DAOUtil statement
* @param user
* The current user
* @return the IFormPanelInitializerQueryPart associate to the given FormPanelInitializer or null if not found
*/
private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryPart( IFormPanelInitializer formPanelInitializer,
List<String> listQueryParametersPositionValue )
List<String> listQueryParametersPositionValue, User user )
{
IFormPanelInitializerQueryPart formPanelInitializerQueryPartResult = null;

if ( formPanelInitializer != null )
{
formPanelInitializerQueryPartResult = formPanelInitializer.getIFormPanelInitializerQueryPart( );
if ( user != null )
{
formPanelInitializerQueryPartResult = formPanelInitializer.getIFormPanelInitializerQueryPart(user);
}
else
{
formPanelInitializerQueryPartResult = formPanelInitializer.getIFormPanelInitializerQueryPart();
}

if ( formPanelInitializerQueryPartResult != null )
{
Expand All @@ -201,6 +216,21 @@ private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryP
return formPanelInitializerQueryPartResult;
}

/**
* Create a FormResponseItem from a DAOUtil
*
* @param daoUtil
* The daoUtil to retrieve the values of the request from
* @return the created FormResponseItem
*/
private FormResponseItem createFormResponseItem( FormResponseSearchItem formResponseSearchItem )
{
FormResponseItem formResponseItem = new FormResponseItem( );
formResponseItem.setIdFormResponse( formResponseSearchItem.getIdFormResponse( ) );

return formResponseItem;
}

/**
* Build the list of IFormColumnQueryPart to use for build the global query from the given list of IFormColumn
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
package fr.paris.lutece.plugins.forms.business.form.list;

import fr.paris.lutece.plugins.forms.business.form.FormResponseItem;
import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig;
import java.util.List;

Expand Down Expand Up @@ -65,6 +66,27 @@ public interface IFormListDAO
void populateFormColumns( FormPanel formPanel, List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
FormItemSortConfig sortConfig );

/**
* Populate the FormPanel with the values returned by the SQL query results
*
* @param formPanel
* The FormPanel used to retrieve the values of the FormColumn
* @param listFormColumn
* The list of FormColumn to populate
* @param listFormFilter
* The list of FormFilter used for filtering the data to retrieve
* @param nStartIndex
* The start index of doc that all will become FormResponseItem
* @param nPageSize
* The number of doc to load for pagination purpose
* @param sortConfig
* The comparator config
* @param user
* The current user
*/
void populateFormColumns( FormPanel formPanel, java.util.List<IFormColumn> listFormColumn, List<FormFilter> listFormFilter, int nStartIndex, int nPageSize,
FormItemSortConfig sortConfig, User user );

/**
* Search the Lucene Index.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
*/
package fr.paris.lutece.plugins.forms.business.form.panel.initializer;

import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart;
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer;
Expand Down Expand Up @@ -64,6 +65,15 @@ public interface IFormPanelInitializer
*/
IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( );

/**
* Get an {@link IFormPanelInitializerQueryPart} associated with this IFormPanelInitializer.
*
* @param user
* The current user
* @return the IFormPanelInitializerQueryPart Object
*/
IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( User user );

/**
* Get an {@link IFormPanelDisplayInitializer} associated with this IFormPanelInitializer.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@
*/
package fr.paris.lutece.plugins.forms.business.form.panel.initializer.impl;

import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.IFormPanelInitializer;
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart;

/**
* Abstract class for implementation of the IFormPanelInitializer interface
Expand All @@ -61,4 +63,10 @@ public void setFormParameters( FormParameters formParameters )
{
_formParameters = formParameters;
}

@Override
public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(User user )
{
return getIFormPanelInitializerQueryPart();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
*/
package fr.paris.lutece.plugins.forms.business.form.panel.initializer.impl;

import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart;
import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl.FormPanelFormsInitializerQueryPart;
import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer;
Expand All @@ -49,6 +50,12 @@ public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( )
return new FormPanelFormsInitializerQueryPart( );
}

@Override
public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( User user )
{
return new FormPanelFormsInitializerQueryPart( user );
}

@Override
public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@
*/
public class FormPanelFormResponseInitializerQueryPart extends AbstractFormPanelInitializerQueryPart
{

public FormPanelFormResponseInitializerQueryPart( )
{
super( );
}

/**
* {@inheritDoc}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,22 @@
*/
package fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl;

import fr.paris.lutece.api.user.User;
import fr.paris.lutece.plugins.forms.business.Form;
import fr.paris.lutece.plugins.forms.business.FormHome;
import fr.paris.lutece.plugins.forms.business.form.FormParameters;
import fr.paris.lutece.plugins.forms.util.FormsConstants;
import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;

import java.util.List;
import java.util.stream.Collectors;

import org.apache.lucene.document.IntPoint;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanQuery.Builder;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query;

/**
* Implementation of the FormPanelInitializerQueryPart associate to the FormPanelFormsInitializer
Expand All @@ -50,6 +64,36 @@ public FormPanelFormsInitializerQueryPart( )
setFormPanelInitializerSelectQuery( new MatchAllDocsQuery( ) );
}

/**
* Constructor used to build a query that selects the Forms that the user can access
*
* @param user
* The HTTP user
*/
public FormPanelFormsInitializerQueryPart( User user )
{
super( );

// Get the List of all available Forms
List<Form> listForms = FormHome.getFormList( );
// Only keep the Forms that can be accessed by the current user
listForms = (List<Form>) AdminWorkgroupService.getAuthorizedCollection( listForms, user );

// Create Lucene queries to retrieve the Forms that match the specified IDs
List<Query> queries = listForms.stream( ).map( form -> IntPoint.newExactQuery( FormsConstants.PARAMETER_ID_FORM, form.getId( ) ) )
.collect( Collectors.toList( ) );

// Create a Lucene Builder for Boolean Queries
Builder builder = new BooleanQuery.Builder( );
// Add all the created queries that will be applied
queries.forEach( query -> builder.add( query, BooleanClause.Occur.SHOULD ) );

// Initialize the Query used to retrieve specific Forms
Query queryForms = builder.build( );

setFormPanelInitializerSelectQuery( queryForms );
}

/**
* {@inheritDoc}
*/
Expand Down
Loading