View Javadoc
1   /*
2    * Copyright (c) 2002-2022, 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.portal.business.user.attribute;
35  
36  import fr.paris.lutece.portal.business.user.AdminUser;
37  import fr.paris.lutece.portal.service.message.AdminMessage;
38  import fr.paris.lutece.portal.service.message.AdminMessageService;
39  import fr.paris.lutece.portal.service.user.attribute.AttributeFieldService;
40  import fr.paris.lutece.portal.web.constants.Messages;
41  
42  import org.apache.commons.lang3.StringUtils;
43  
44  import java.util.ArrayList;
45  import java.util.List;
46  import java.util.Locale;
47  
48  import javax.servlet.http.HttpServletRequest;
49  
50  /**
51   *
52   * AttributeComboBox
53   *
54   */
55  public class AttributeCheckBox extends AbstractAttribute implements ISimpleValuesAttributes
56  {
57      // Constants
58      private static final String CONSTANT_UNDERSCORE = "_";
59  
60      // Parameters
61      private static final String PARAMETER_TITLE = "title";
62      private static final String PARAMETER_HELP_MESSAGE = "help_message";
63      private static final String PARAMETER_MANDATORY = "mandatory";
64      private static final String PARAMETER_IS_SHOWN_IN_SEARCH = "is_shown_in_search";
65      private static final String PARAMETER_IS_SHOWN_IN_RESULT_LIST = "is_shown_in_result_list";
66      private static final String PARAMETER_ATTRIBUTE = "attribute";
67      private static final String PARAMETER_IS_FIELD_IN_LINE = "is_field_in_line";
68  
69      // Properties
70      private static final String PROPERTY_TYPE_CHECKBOX = "portal.users.attribute.type.checkBox";
71      private static final String PROPERTY_CREATE_CHECKBOX_PAGETITLE = "portal.users.create_attribute.pageTitleAttributeCheckBox";
72      private static final String PROPERTY_MODIFY_CHECKBOX_PAGETITLE = "portal.users.modify_attribute.pageTitleAttributeCheckBox";
73  
74      // Templates
75      private static final String TEMPLATE_CREATE_ATTRIBUTE = "admin/user/attribute/checkbox/create_attribute_checkbox.html";
76      private static final String TEMPLATE_MODIFY_ATTRIBUTE = "admin/user/attribute/checkbox/modify_attribute_checkbox.html";
77      private static final String TEMPLATE_HTML_FORM_ATTRIBUTE = "admin/user/attribute/checkbox/html_code_form_attribute_checkbox.html";
78      private static final String TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE = "admin/user/attribute/checkbox/html_code_form_search_attribute_checkbox.html";
79      private static final String TEMPLATE_HTML_VALUE = "admin/user/attribute/checkbox/html_code_value_attribute_checkbox.html";
80  
81      /**
82       * Constructor
83       */
84      public AttributeCheckBox( )
85      {
86          // Ctor
87      }
88  
89      /**
90       * Get the template create an attribute
91       * 
92       * @return The URL of the template
93       */
94      @Override
95      public String getTemplateCreateAttribute( )
96      {
97          return TEMPLATE_CREATE_ATTRIBUTE;
98      }
99  
100     /**
101      * Get the template modify an attribute
102      * 
103      * @return The URL of the template
104      */
105     @Override
106     public String getTemplateModifyAttribute( )
107     {
108         return TEMPLATE_MODIFY_ATTRIBUTE;
109     }
110 
111     /**
112      * Get the template html form attribute
113      * 
114      * @return the template
115      */
116     @Override
117     public String getTemplateHtmlFormAttribute( )
118     {
119         return TEMPLATE_HTML_FORM_ATTRIBUTE;
120     }
121 
122     /**
123      * Get the template html form search attribute
124      * 
125      * @return the template
126      */
127     @Override
128     public String getTemplateHtmlFormSearchAttribute( )
129     {
130         return TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE;
131     }
132 
133     /**
134      * Get the template html for the value of the attribute
135      * 
136      * @return the template
137      */
138     @Override
139     public String getTemplateHtmlValue( )
140     {
141         return TEMPLATE_HTML_VALUE;
142     }
143 
144     /**
145      * Get page title for create page
146      * 
147      * @return page title
148      */
149     @Override
150     public String getPropertyCreatePageTitle( )
151     {
152         return PROPERTY_CREATE_CHECKBOX_PAGETITLE;
153     }
154 
155     /**
156      * Get page title for modify page
157      * 
158      * @return page title
159      */
160     @Override
161     public String getPropertyModifyPageTitle( )
162     {
163         return PROPERTY_MODIFY_CHECKBOX_PAGETITLE;
164     }
165 
166     /**
167      * Set the data of the attribute
168      * 
169      * @param request
170      *            HttpServletRequest
171      * @return null if there are no errors
172      */
173     @Override
174     public String setAttributeData( HttpServletRequest request )
175     {
176         String strTitle = request.getParameter( PARAMETER_TITLE );
177         String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
178         String strIsShownInSearch = request.getParameter( PARAMETER_IS_SHOWN_IN_SEARCH );
179         String strIsShownInResultList = request.getParameter( PARAMETER_IS_SHOWN_IN_RESULT_LIST );
180         String strMandatory = request.getParameter( PARAMETER_MANDATORY );
181         String strFieldInLine = request.getParameter( PARAMETER_IS_FIELD_IN_LINE );
182 
183         if ( StringUtils.isNotBlank( strTitle ) )
184         {
185             setTitle( strTitle );
186             setHelpMessage( strHelpMessage );
187             setMandatory( strMandatory != null );
188             setShownInSearch( strIsShownInSearch != null );
189             setShownInResultList( strIsShownInResultList != null );
190             setFieldInLine( strFieldInLine != null );
191 
192             return null;
193         }
194 
195         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
196     }
197 
198     /**
199      * Set attribute type
200      * 
201      * @param locale
202      *            locale
203      */
204     @Override
205     public void setAttributeType( Locale locale )
206     {
207         AttributeTypeser/attribute/AttributeType.html#AttributeType">AttributeType attributeType = new AttributeType( );
208         attributeType.setLocale( locale );
209         attributeType.setClassName( this.getClass( ).getName( ) );
210         attributeType.setLabelType( PROPERTY_TYPE_CHECKBOX );
211         setAttributeType( attributeType );
212     }
213 
214     /**
215      * Get the data of the user fields
216      * 
217      * @param request
218      *            HttpServletRequest
219      * @param user
220      *            user
221      * @return user field data
222      */
223     @Override
224     public List<AdminUserField> getUserFieldsData( HttpServletRequest request, AdminUser user )
225     {
226         String [ ] strValues = request.getParameterValues( PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE + getIdAttribute( ) );
227 
228         return getUserFieldsData( strValues, user );
229     }
230 
231     /**
232      * Get the data of the user fields
233      * 
234      * @param strValues
235      *            Values
236      * @param user
237      *            user
238      * @return user field data
239      */
240     @Override
241     public List<AdminUserField> getUserFieldsData( String [ ] strValues, AdminUser user )
242     {
243         List<AdminUserField> listUserFields = new ArrayList<>( );
244 
245         if ( strValues != null )
246         {
247             for ( String strValue : strValues )
248             {
249                 AdminUserFields/user/attribute/AdminUserField.html#AdminUserField">AdminUserField userField = new AdminUserField( );
250                 AttributeField attributeField;
251 
252                 if ( StringUtils.isNotBlank( strValue ) && StringUtils.isNumeric( strValue ) )
253                 {
254                     int nIdField = Integer.parseInt( strValue );
255                     attributeField = AttributeFieldService.getInstance( ).getAttributeField( nIdField );
256                 }
257                 else
258                 {
259                     attributeField = new AttributeField( );
260                     attributeField.setAttribute( this );
261                     attributeField.setTitle( strValue );
262                     attributeField.setValue( strValue );
263                 }
264 
265                 userField.setUser( user );
266                 userField.setAttribute( this );
267                 userField.setAttributeField( attributeField );
268                 userField.setValue( attributeField.getTitle( ) );
269 
270                 listUserFields.add( userField );
271             }
272         }
273         // If no checkbox is selected, the request will have no parameter at all
274         else
275         {
276             AdminUserFields/user/attribute/AdminUserField.html#AdminUserField">AdminUserField userField = new AdminUserField( );
277             AttributeField attributeField;
278             attributeField = new AttributeField( );
279             attributeField.setAttribute( this );
280             attributeField.setTitle( "" );
281             attributeField.setValue( "" );
282             userField.setUser( user );
283             userField.setAttribute( this );
284             userField.setAttributeField( attributeField );
285             userField.setValue( attributeField.getTitle( ) );
286 
287             listUserFields.add( userField );
288         }
289 
290         return listUserFields;
291     }
292 
293     /**
294      * Get whether the attribute is anonymizable.
295      * 
296      * @return True if the attribute can be anonymized, false otherwise.
297      */
298     @Override
299     public boolean isAnonymizable( )
300     {
301         return false;
302     }
303 }