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   * class EntryTypeRadioButton
53   *
54   */
55  public class AttributeRadioButton 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_RADIO_BUTTON = "portal.users.attribute.type.radioButton";
71      private static final String PROPERTY_CREATE_RADIO_BUTTON_PAGETITLE = "portal.users.create_attribute.pageTitleAttributeRadioButton";
72      private static final String PROPERTY_MODIFY_RADIO_BUTTON_PAGETITLE = "portal.users.modify_attribute.pageTitleAttributeRadioButton";
73  
74      // Templates
75      private static final String TEMPLATE_CREATE_ATTRIBUTE = "admin/user/attribute/radiobutton/create_attribute_radio_button.html";
76      private static final String TEMPLATE_MODIFY_ATTRIBUTE = "admin/user/attribute/radiobutton/modify_attribute_radio_button.html";
77      private static final String TEMPLATE_HTML_FORM_ATTRIBUTE = "admin/user/attribute/radiobutton/html_code_form_attribute_radio_button.html";
78      private static final String TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE = "admin/user/attribute/radiobutton/html_code_form_search_attribute_radio_button.html";
79      private static final String TEMPLATE_HTML_VALUE = "admin/user/attribute/radiobutton/html_code_value_attribute_radio_button.html";
80  
81      /**
82       * Constructor
83       */
84      public AttributeRadioButton( )
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_RADIO_BUTTON_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_RADIO_BUTTON_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_RADIO_BUTTON );
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      * {@inheritDoc}
233      */
234     @Override
235     public List<AdminUserField> getUserFieldsData( String [ ] strValues, AdminUser user )
236     {
237         List<AdminUserField> listUserFields = new ArrayList<>( );
238 
239         if ( strValues != null )
240         {
241             for ( String strValue : strValues )
242             {
243                 AdminUserFields/user/attribute/AdminUserField.html#AdminUserField">AdminUserField userField = new AdminUserField( );
244                 AttributeField attributeField;
245 
246                 if ( StringUtils.isNotBlank( strValue ) && StringUtils.isNumeric( strValue ) )
247                 {
248                     int nIdField = Integer.parseInt( strValue );
249                     attributeField = AttributeFieldService.getInstance( ).getAttributeField( nIdField );
250                 }
251                 else
252                 {
253                     attributeField = new AttributeField( );
254                     attributeField.setAttribute( this );
255                     attributeField.setTitle( strValue );
256                     attributeField.setValue( strValue );
257                 }
258 
259                 if ( attributeField != null )
260                 {
261                     userField.setUser( user );
262                     userField.setAttribute( this );
263                     userField.setAttributeField( attributeField );
264                     userField.setValue( attributeField.getTitle( ) );
265                     listUserFields.add( userField );
266                 }
267             }
268         }
269 
270         return listUserFields;
271     }
272 
273     /**
274      * Get whether the attribute is anonymizable.
275      * 
276      * @return True if the attribute can be anonymized, false otherwise.
277      */
278     @Override
279     public boolean isAnonymizable( )
280     {
281         return false;
282     }
283 }