View Javadoc
1   /*
2    * Copyright (c) 2002-2020, City of Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.mylutece.modules.users.web;
35  
36  import java.util.ArrayList;
37  import java.util.Enumeration;
38  import java.util.List;
39  import java.util.Locale;
40  import java.util.Map;
41  
42  import javax.servlet.http.HttpServletRequest;
43  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeField;
44  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeFieldHome;
45  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeHome;
46  import fr.paris.lutece.plugins.mylutece.business.attribute.IAttribute;
47  import fr.paris.lutece.plugins.mylutece.business.attribute.MyLuteceUserField;
48  import fr.paris.lutece.plugins.mylutece.business.attribute.MyLuteceUserFieldHome;
49  import fr.paris.lutece.plugins.mylutece.modules.users.business.AttributeMapping;
50  import fr.paris.lutece.plugins.mylutece.modules.users.business.AttributeMappingHome;
51  import fr.paris.lutece.plugins.mylutece.modules.users.business.LocalUser;
52  import fr.paris.lutece.plugins.mylutece.modules.users.business.LocalUserHome;
53  import fr.paris.lutece.plugins.mylutece.modules.users.service.LocalUserInfoService;
54  import fr.paris.lutece.plugins.mylutece.service.MyLutecePlugin;
55  import fr.paris.lutece.plugins.mylutece.service.attribute.MyLuteceUserFieldService;
56  import fr.paris.lutece.portal.service.admin.AdminUserService;
57  import fr.paris.lutece.portal.service.i18n.I18nService;
58  import fr.paris.lutece.portal.service.message.AdminMessage;
59  import fr.paris.lutece.portal.service.message.AdminMessageService;
60  import fr.paris.lutece.portal.service.plugin.Plugin;
61  import fr.paris.lutece.portal.service.plugin.PluginService;
62  import fr.paris.lutece.portal.service.template.AppTemplateService;
63  import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
64  import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
65  import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
66  import fr.paris.lutece.portal.util.mvc.utils.MVCMessage;
67  import fr.paris.lutece.util.ErrorMessage;
68  import fr.paris.lutece.util.ReferenceItem;
69  import fr.paris.lutece.util.ReferenceList;
70  import fr.paris.lutece.util.html.HtmlTemplate;
71  import fr.paris.lutece.util.url.UrlItem;
72  
73  /**
74   * This class provides the user interface to manage LocalUser features ( manage, create, modify, remove )
75   */
76  @Controller( controllerJsp = "ManageLocalUsers.jsp", controllerPath = "jsp/admin/plugins/mylutece/modules/users/", right = "MYLUTECE_USERS_MANAGEMENT" )
77  public class LocalUserJspBean extends AbstractmyLuteceUsersManagementJspBean
78  {
79      /**
80       *
81       */
82      private static final long serialVersionUID = 2163559576736974617L;
83      // Templates
84      private static final String TEMPLATE_MANAGE_LOCALUSERS = "/admin/plugins/mylutece/modules/users/manage_localusers.html";
85      private static final String TEMPLATE_CREATE_LOCALUSER = "/admin/plugins/mylutece/modules/users/create_localuser.html";
86      private static final String TEMPLATE_MODIFY_LOCALUSER = "/admin/plugins/mylutece/modules/users/modify_localuser.html";
87      private static final String TEMPLATE_IMPORT_USERS_FROM_PROVIDER = "/admin/plugins/mylutece/modules/users/import_users_from_provider.html";
88      private static final String TEMPLATE_MANAGE_ATTRIBUTE_MAPPING = "/admin/plugins/mylutece/modules/users/manage_attribute_mapping.html";
89      // Parameters
90      private static final String PARAMETER_ID_LOCALUSER = "id";
91      private static final String PARAMETER_MYLUTECE_ATTRIBUTE_NAME = "attribute";
92      private static final String PARAMETER_SEARCH_BY_LAST_NAME = "search_lastName";
93      private static final String PARAMETER_SEARCH_BY_GIVEN_NAME = "search_givenName";
94      private static final String PARAMETER_SEARCH_BY_EMAIL = "search_email";
95      private static final String PARAMETER_FROM_PROVIDER = "import_from_provider";
96      // Properties for page titles
97      private static final String PROPERTY_PAGE_TITLE_MANAGE_LOCALUSERS = "module.mylutece.users.manage_localusers.pageTitle";
98      private static final String PROPERTY_PAGE_TITLE_MODIFY_LOCALUSER = "module.mylutece.users.modify_localuser.pageTitle";
99      private static final String PROPERTY_PAGE_TITLE_CREATE_LOCALUSER = "module.mylutece.users.create_localuser.pageTitle";
100     private static final String PROPERTY_PAGE_TITLE_MANAGE_ATTRIBUTE_MAPPING = "module.mylutece.users.manage_attribute_mapping.pageTitle";
101     private static final String PROPERTY_IMPORT_USERS_PAGETITLE = "module.mylutece.users.import.pageTitle";
102     // Markers
103     private static final String MARK_LOCALUSER_LIST = "localuser_list";
104     private static final String MARK_LOCALUSER = "localuser";
105     private static final String MARK_MYLUTECE_ATTRIBUTES_LIST = "attribute_list";
106     private static final String MARK_PROVIDER_ATTRIBUTES_LIST = "provider_attribute_list";
107     private static final String MARK_ATTRIBUTE_MAPPING_LIST = "attribute_mapping_list";
108     // Jsp
109     private static final String JSP_MANAGE_LOCALUSERS = "jsp/admin/plugins/mylutece/modules/users/ManageLocalUsers.jsp";
110     // Properties
111     private static final String MESSAGE_CONFIRM_REMOVE_LOCALUSER = "module.mylutece.users.message.confirmRemoveLocalUser";
112     private static final String MESSAGE_FIELD_ERROR_MANDATORY = "module.mylutece.users.message.field.error.mandatory";
113     // Validations
114     private static final String VALIDATION_ATTRIBUTES_PREFIX = "module.mylutece.users.model.entity.localuser.attribute.";
115     // Views
116     private static final String VIEW_MANAGE_LOCALUSERS = "manageLocalUsers";
117     private static final String VIEW_CREATE_LOCALUSER = "createLocalUser";
118     private static final String VIEW_MODIFY_LOCALUSER = "modifyLocalUser";
119     private static final String VIEW_IMPORT_LOCALUSER = "importLocalUser";
120     private static final String VIEW_MANAGE_ATTRIBUTE_MAPPING = "manageAttributeMapping";
121     // Actions
122     private static final String ACTION_CREATE_LOCALUSER = "createLocalUser";
123     private static final String ACTION_MODIFY_LOCALUSER = "modifyLocalUser";
124     private static final String ACTION_REMOVE_LOCALUSER = "removeLocalUser";
125     private static final String ACTION_CONFIRM_REMOVE_LOCALUSER = "confirmRemoveLocalUser";
126     private static final String ACTION_SEARCH_LOCALUSER = "searchUsersFromProvider";
127     private static final String ACTION_UPDATE_ATTRIBUTE_MAPPING = "updateAttributeMapping";
128     // Infos
129     private static final String INFO_LOCALUSER_CREATED = "module.mylutece.users.info.localuser.created";
130     private static final String INFO_LOCALUSER_UPDATED = "module.mylutece.users.info.localuser.updated";
131     private static final String INFO_LOCALUSER_REMOVED = "module.mylutece.users.info.localuser.removed";
132     private static final String ERROR_LOCALUSER_PROVIDER_USER_ID_EXIST = "module.mylutece.users.error.localuser.providerUserIdExist";
133     private static final String INFO_ATTRIBUTE_MAPPING_DONE = "module.mylutece.users.info.attribute_mapping.done";
134     // Prefixes
135     private static final String PREFIX_ATTRIBUTE_MAPPING = "attribute_mapping_";
136     private static final String PREFIX_PROVIDER_ATTRIBUTE = "provider_attribute_";
137     // Session variables
138     private LocalUser _localuser;
139     private Locale _locale;
140     private transient Plugin _myLutecePlugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
141     private transient List<IAttribute> _listMyLuteceAttribute;
142     private transient List<String> _listProviderAttribute;
143     private transient List<AttributeMapping> _listAttributeMapping;
144 
145     /**
146      * Build the Manage View
147      * 
148      * @param request
149      *            The HTTP request
150      * @return The page
151      */
152     @View( value = VIEW_MANAGE_LOCALUSERS, defaultView = true )
153     public String getManageLocalUsers( HttpServletRequest request )
154     {
155         _localuser = null;
156         _listMyLuteceAttribute = null;
157         List<LocalUser> listLocalUsers = LocalUserHome.getLocalUsersListWithoutAttribute( );
158         Map<String, Object> model = getPaginatedListModel( request, MARK_LOCALUSER_LIST, listLocalUsers, JSP_MANAGE_LOCALUSERS );
159         return getPage( PROPERTY_PAGE_TITLE_MANAGE_LOCALUSERS, TEMPLATE_MANAGE_LOCALUSERS, model );
160     }
161 
162     /**
163      * Returns the form to create a localuser
164      *
165      * @param request
166      *            The Http request
167      * @return the html code of the localuser form
168      */
169     @View( VIEW_MANAGE_ATTRIBUTE_MAPPING )
170     public String getManageAttributeMapping( HttpServletRequest request )
171     {
172         _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
173         _listProviderAttribute = LocalUserInfoService.getInstance( ).getAllAttributes( );
174         _listAttributeMapping = AttributeMappingHome.getAttributeMappingsList( );
175         Map<String, Object> model = getModel( );
176         model.put( MARK_LOCALUSER, _localuser );
177         model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
178         model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
179         model.put( MARK_PROVIDER_ATTRIBUTES_LIST, _listProviderAttribute );
180         return getPage( PROPERTY_PAGE_TITLE_MANAGE_ATTRIBUTE_MAPPING, TEMPLATE_MANAGE_ATTRIBUTE_MAPPING, model );
181     }
182 
183     /**
184      * Process the data capture form of a new localuser
185      *
186      * @param request
187      *            The Http Request
188      * @return The Jsp URL of the process result
189      */
190     @Action( ACTION_UPDATE_ATTRIBUTE_MAPPING )
191     public String doUpdateAttributeMapping( HttpServletRequest request )
192     {
193         List<Integer> listMyLuteceAttributeId = new ArrayList<>( );
194         Enumeration<String> requestAttributes = request.getParameterNames( );
195         while ( requestAttributes.hasMoreElements( ) )
196         {
197             String parameterName = requestAttributes.nextElement( );
198             if ( parameterName.startsWith( PREFIX_ATTRIBUTE_MAPPING ) && !request.getParameter( parameterName ).isEmpty( ) )
199             {
200                 String strMyLuteceAttributeId = parameterName.substring( parameterName.lastIndexOf( "_" ) + 1 );
201                 AttributeMappingules/users/business/AttributeMapping.html#AttributeMapping">AttributeMapping attributeMapping = new AttributeMapping( );
202                 attributeMapping.setId( Integer.valueOf( strMyLuteceAttributeId ) );
203                 attributeMapping.setIdProviderAttribute( request.getParameter( parameterName ) );
204                 listMyLuteceAttributeId.add( attributeMapping.getId( ) );
205                 if ( AttributeMappingHome.findByPrimaryKey( attributeMapping.getId( ) ) != null )
206                 {
207                     AttributeMappingHome.update( attributeMapping );
208                 }
209                 else
210                 {
211                     AttributeMappingHome.create( attributeMapping );
212                 }
213             }
214         }
215         ;
216         for ( IAttribute myLuteceAttribute : _listMyLuteceAttribute )
217         {
218             int nIdMyLuteceAttribute = myLuteceAttribute.getIdAttribute( );
219             if ( !listMyLuteceAttributeId.contains( nIdMyLuteceAttribute ) )
220             {
221                 AttributeMappingHome.remove( nIdMyLuteceAttribute );
222             }
223         }
224         addInfo( INFO_ATTRIBUTE_MAPPING_DONE, getLocale( ) );
225         return redirectView( request, VIEW_MANAGE_ATTRIBUTE_MAPPING );
226     }
227 
228     /**
229      * Returns the form to create a localuser
230      *
231      * @param request
232      *            The Http request
233      * @return the html code of the localuser form
234      */
235     @View( VIEW_CREATE_LOCALUSER )
236     public String getCreateLocalUser( HttpServletRequest request )
237     {
238         _localuser = ( _localuser != null ) ? _localuser : new LocalUser( );
239         Map<String, Object> model = getModel( );
240         model.put( MARK_LOCALUSER, _localuser );
241         if ( _listMyLuteceAttribute == null )
242         {
243             _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
244         }
245         model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
246         return getPage( PROPERTY_PAGE_TITLE_CREATE_LOCALUSER, TEMPLATE_CREATE_LOCALUSER, model );
247     }
248 
249     /**
250      * Process the data capture form of a new localuser
251      *
252      * @param request
253      *            The Http Request
254      * @return The Jsp URL of the process result
255      */
256     @Action( ACTION_CREATE_LOCALUSER )
257     public String doCreateLocalUser( HttpServletRequest request )
258     {
259         _localuser = ( _localuser == null ) ? new LocalUser( ) : _localuser;
260         if ( _listMyLuteceAttribute == null )
261         {
262             _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
263         }
264         populate( _localuser, request, request.getLocale( ) );
265         setMyLuteceAttributeValue( request, _localuser );
266         // Check constraints
267         if ( !validateBean( _localuser, VALIDATION_ATTRIBUTES_PREFIX ) || !validateMyLuteceAttribute( request ) )
268         {
269             return redirectView( request, VIEW_CREATE_LOCALUSER );
270         }
271         if ( LocalUserHome.findByConnectId( _localuser.getProviderUserId( ) ) == null )
272         {
273             LocalUserHome.create( _localuser );
274         }
275         else
276         {
277             addError( ERROR_LOCALUSER_PROVIDER_USER_ID_EXIST, getLocale( ) );
278             return redirectView( request, request.getParameter( PARAMETER_FROM_PROVIDER ) == null ? VIEW_CREATE_LOCALUSER : VIEW_IMPORT_LOCALUSER );
279         }
280         MyLuteceUserFieldService.doCreateUserFields( _localuser.getId( ), request, request.getLocale( ) );
281         addInfo( INFO_LOCALUSER_CREATED, getLocale( ) );
282         return redirectView( request, VIEW_MANAGE_LOCALUSERS );
283     }
284 
285     /**
286      * Manages the removal form of a localuser whose identifier is in the http request
287      *
288      * @param request
289      *            The Http request
290      * @return the html code to confirm
291      */
292     @Action( ACTION_CONFIRM_REMOVE_LOCALUSER )
293     public String getConfirmRemoveLocalUser( HttpServletRequest request )
294     {
295         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
296         UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_LOCALUSER ) );
297         url.addParameter( PARAMETER_ID_LOCALUSER, nId );
298         String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_LOCALUSER, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
299         return redirect( request, strMessageUrl );
300     }
301 
302     /**
303      * Handles the removal form of a localuser
304      *
305      * @param request
306      *            The Http request
307      * @return the jsp URL to display the form to manage localusers
308      */
309     @Action( ACTION_REMOVE_LOCALUSER )
310     public String doRemoveLocalUser( HttpServletRequest request )
311     {
312         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
313         LocalUserHome.remove( nId );
314         addInfo( INFO_LOCALUSER_REMOVED, getLocale( ) );
315         return redirectView( request, VIEW_MANAGE_LOCALUSERS );
316     }
317 
318     /**
319      * Returns the form to update info about a localuser
320      *
321      * @param request
322      *            The Http request
323      * @return The HTML form to update info
324      */
325     @View( VIEW_MODIFY_LOCALUSER )
326     public String getModifyLocalUser( HttpServletRequest request )
327     {
328         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
329         if ( _localuser == null || ( _localuser.getId( ) != nId ) )
330         {
331             _localuser = LocalUserHome.findByPrimaryKey( nId );
332         }
333         if ( _listMyLuteceAttribute == null )
334         {
335             _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
336         }
337         for ( IAttribute attribute : _listMyLuteceAttribute )
338         {
339             List<MyLuteceUserField> listUserFields = MyLuteceUserFieldHome.selectUserFieldsByIdUserIdAttribute( _localuser.getId( ),
340                     attribute.getIdAttribute( ), _myLutecePlugin );
341             for ( AttributeField attributeField : attribute.getListAttributeFields( ) )
342             {
343                 MyLuteceUserField myLuteceUserField = listUserFields.stream( ).limit( 1 )
344                         .filter( userField -> userField.getAttribute( ).getIdAttribute( ) == attributeField.getAttribute( ).getIdAttribute( ) ).findAny( )
345                         .orElse( null );
346                 if ( myLuteceUserField != null )
347                 {
348                     attribute.getListAttributeFields( ).get( 0 ).setValue( myLuteceUserField.getValue( ) );
349                 }
350             }
351         }
352         Map<String, Object> model = getModel( );
353         model.put( MARK_LOCALUSER, _localuser );
354         model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
355         return getPage( PROPERTY_PAGE_TITLE_MODIFY_LOCALUSER, TEMPLATE_MODIFY_LOCALUSER, model );
356     }
357 
358     /**
359      * Process the change form of a localuser
360      *
361      * @param request
362      *            The Http request
363      * @return The Jsp URL of the process result
364      */
365     @Action( ACTION_MODIFY_LOCALUSER )
366     public String doModifyLocalUser( HttpServletRequest request )
367     {
368         populate( _localuser, request, request.getLocale( ) );
369         setMyLuteceAttributeValue( request, _localuser );
370         if ( !validateBean( _localuser, VALIDATION_ATTRIBUTES_PREFIX ) || !validateMyLuteceAttribute( request ) )
371         {
372             return redirect( request, VIEW_MODIFY_LOCALUSER, PARAMETER_ID_LOCALUSER, _localuser.getId( ) );
373         }
374         LocalUserHome.update( _localuser );
375         MyLuteceUserFieldService.doModifyUserFields( _localuser.getId( ), request, request.getLocale( ), AdminUserService.getAdminUser( request ) );
376         addInfo( INFO_LOCALUSER_UPDATED, getLocale( ) );
377         return redirectView( request, VIEW_MANAGE_LOCALUSERS );
378     }
379 
380     /**
381      * Get a page to import users from Provider.
382      * 
383      * @param request
384      *            The request
385      * @return The HTML content
386      */
387     @View( VIEW_IMPORT_LOCALUSER )
388     public String getImportLocalUser( HttpServletRequest request )
389     {
390         _listAttributeMapping = ( _listAttributeMapping != null ) ? _listAttributeMapping : AttributeMappingHome.getAttributeMappingsList( );
391         _listMyLuteceAttribute = ( _listMyLuteceAttribute != null ) ? _listMyLuteceAttribute
392                 : gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
393         Map<String, Object> model = getModel( );
394         setPageTitleProperty( PROPERTY_IMPORT_USERS_PAGETITLE );
395         model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
396         model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
397         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_IMPORT_USERS_FROM_PROVIDER, AdminUserService.getLocale( request ), model );
398         return getAdminPage( template.getHtml( ) );
399     }
400 
401     /**
402      * Get a page to import users from Provider.
403      * 
404      * @param request
405      *            The request
406      * @return The HTML content
407      */
408     @Action( ACTION_SEARCH_LOCALUSER )
409     public String doSearchUsersFromProvider( HttpServletRequest request )
410     {
411         String strParameterLastName = request.getParameter( PARAMETER_SEARCH_BY_LAST_NAME );
412         String strParameterGivenName = request.getParameter( PARAMETER_SEARCH_BY_GIVEN_NAME );
413         String strParameterEmail = request.getParameter( PARAMETER_SEARCH_BY_EMAIL );
414         ReferenceList listProviderAttribute = new ReferenceList( );
415         List<IAttribute> listAttributes = AttributeHome.findAll( getLocale( ), _myLutecePlugin );
416         Enumeration<String> requestAttributes = request.getParameterNames( );
417         while ( requestAttributes.hasMoreElements( ) )
418         {
419             String parameterName = requestAttributes.nextElement( );
420             if ( parameterName.startsWith( PREFIX_PROVIDER_ATTRIBUTE ) )
421             {
422                 String strProviderAttributeId = parameterName.substring( parameterName.lastIndexOf( "_" ) + 1 );
423                 ReferenceItem providerAttribute = new ReferenceItem( );
424                 providerAttribute.setName( strProviderAttributeId );
425                 providerAttribute.setCode( request.getParameter( parameterName ) );
426                 listProviderAttribute.add( providerAttribute );
427             }
428         }
429         ;
430         for ( IAttribute attribute : listAttributes )
431         {
432             List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( attribute.getIdAttribute( ), _myLutecePlugin );
433             attribute.setListAttributeFields( listAttributeFields );
434         }
435         List<LocalUser> users = LocalUserInfoService.getInstance( ).findUsers( strParameterLastName, strParameterGivenName, strParameterEmail,
436                 listProviderAttribute );
437         Map<String, Object> model = getModel( );
438         model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
439         model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
440         model.put( MARK_LOCALUSER_LIST, users );
441         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_IMPORT_USERS_FROM_PROVIDER, AdminUserService.getLocale( request ), model );
442         return getAdminPage( template.getHtml( ) );
443     }
444 
445     /**
446      * Validate Attribute from Mylutece
447      *
448      * @param request
449      *            The Http request
450      * @return returns false if one is not checked
451      * 
452      */
453     private boolean validateMyLuteceAttribute( HttpServletRequest request )
454     {
455         List<ErrorMessage> listErrors = new ArrayList<>( );
456         for ( IAttribute attribute : _listMyLuteceAttribute )
457         {
458             if ( attribute.isMandatory( ) && attribute.getListAttributeFields( ).get( 0 ).getValue( ).isEmpty( ) )
459             {
460                 MVCMessage error = new MVCMessage( );
461                 error.setMessage( attribute.getTitle( ) + " " + I18nService.getLocalizedString( MESSAGE_FIELD_ERROR_MANDATORY, request.getLocale( ) ) );
462                 listErrors.add( error );
463             }
464         }
465         if ( !listErrors.isEmpty( ) )
466         {
467             for ( ErrorMessage errorMessage : listErrors )
468             {
469                 String strMessageErr = errorMessage.getMessage( );
470                 addError( strMessageErr );
471             }
472             return false;
473         }
474         return true;
475     }
476 
477     /**
478      * Get a list of MyLutece attribute
479      *
480      * @return returns a list of mylutece attribute
481      * 
482      */
483     private List<IAttribute> gettMyLuteceAttributeWithFields( List<IAttribute> listMyLuteceAttribute )
484     {
485         for ( IAttribute attribute : listMyLuteceAttribute )
486         {
487             List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( attribute.getIdAttribute( ), _myLutecePlugin );
488             attribute.setListAttributeFields( listAttributeFields );
489         }
490         return listMyLuteceAttribute;
491     }
492 
493     /**
494      * Fill mylutece attribute in request & localUser
495      *
496      * @param request
497      *            The Http request
498      * @param localUser
499      *            The Http request
500      * @return returns a list of mylutece attribute
501      * 
502      */
503     private void setMyLuteceAttributeValue( HttpServletRequest request, LocalUser localUser )
504     {
505         ReferenceList userAttributes = new ReferenceList( );
506         for ( IAttribute attribute : _listMyLuteceAttribute )
507         {
508             String strAttributeName = PARAMETER_MYLUTECE_ATTRIBUTE_NAME + "_" + attribute.getIdAttribute( );
509             String strAttributeValue = request.getParameter( strAttributeName );
510             if ( strAttributeValue != null )
511             {
512                 ReferenceItem userAttribute = new ReferenceItem( );
513                 userAttribute.setCode( strAttributeValue );
514                 userAttribute.setName( String.valueOf( attribute.getIdAttribute( ) ) );
515                 attribute.getListAttributeFields( ).get( 0 ).setValue( strAttributeValue );
516             }
517         }
518         localUser.setAttributes( userAttributes );
519     }
520 
521 }