View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de 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.AttributeService;
40  import fr.paris.lutece.portal.web.constants.Messages;
41  
42  import org.apache.commons.lang.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   *
53   * AttributeText
54   *
55   */
56  public class AttributeText extends AbstractAttribute implements ISimpleValuesAttributes
57  {
58      // CONSTANTS
59      private static final String EMPTY_STRING = "";
60      private static final String CONSTANT_UNDERSCORE = "_";
61  
62      // PARAMETERS 
63      private static final String PARAMETER_TITLE = "title";
64      private static final String PARAMETER_HELP_MESSAGE = "help_message";
65      private static final String PARAMETER_MANDATORY = "mandatory";
66      private static final String PARAMETER_WIDTH = "width";
67      private static final String PARAMETER_MAX_SIZE_ENTER = "max_size_enter";
68      private static final String PARAMETER_VALUE = "value";
69      private static final String PARAMETER_IS_SHOWN_IN_SEARCH = "is_shown_in_search";
70      private static final String PARAMETER_IS_SHOWN_IN_RESULT_LIST = "is_shown_in_result_list";
71      private static final String PARAMETER_ATTRIBUTE = "attribute";
72  
73      // PROPERTY
74      private static final String PROPERTY_TYPE_TEXT = "portal.users.attribute.type.text";
75      private static final String PROPERTY_CREATE_TEXT_PAGETITLE = "portal.users.create_attribute.pageTitleAttributeText";
76      private static final String PROPERTY_MODIFY_TEXT_PAGETITLE = "portal.users.modify_attribute.pageTitleAttributeText";
77      private static final String PROPERTY_MESSAGE_NO_ARITHMETICAL_CHARACTERS = "portal.users.message.noArithmeticalCharacters";
78  
79      // TEMPLATES
80      private static final String TEMPLATE_CREATE_ATTRIBUTE = "admin/user/attribute/text/create_attribute_text.html";
81      private static final String TEMPLATE_MODIFY_ATTRIBUTE = "admin/user/attribute/text/modify_attribute_text.html";
82      private static final String TEMPLATE_HTML_FORM_ATTRIBUTE = "admin/user/attribute/text/html_code_form_attribute_text.html";
83      private static final String TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE = "admin/user/attribute/text/html_code_form_search_attribute_text.html";
84      private static final String TEMPLATE_HTML_VALUE = "admin/user/attribute/text/html_code_value_attribute_text.html";
85      private static final String REGEX_ID = "-?[0-9]+";
86  
87      /**
88       * Constructor
89       */
90      public AttributeText(  )
91      {
92      }
93  
94      /**
95       * Get the template create an attribute
96       * @return The URL of the template
97       */
98      @Override
99      public String getTemplateCreateAttribute(  )
100     {
101         return TEMPLATE_CREATE_ATTRIBUTE;
102     }
103 
104     /**
105      * Get the template modify an attribute
106      * @return The URL of the template
107      */
108     @Override
109     public String getTemplateModifyAttribute(  )
110     {
111         return TEMPLATE_MODIFY_ATTRIBUTE;
112     }
113 
114     /**
115      * Get the template html form attribute
116      * @return the template
117      */
118     @Override
119     public String getTemplateHtmlFormAttribute(  )
120     {
121         return TEMPLATE_HTML_FORM_ATTRIBUTE;
122     }
123 
124     /**
125      * Get the template html form search attribute
126      * @return the template
127      */
128     @Override
129     public String getTemplateHtmlFormSearchAttribute(  )
130     {
131         return TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE;
132     }
133 
134     /**
135      * Get the template html for the value of the attribute
136      * @return the template
137      */
138     @Override
139     public String getTemplateHtmlValue(  )
140     {
141         return TEMPLATE_HTML_VALUE;
142     }
143 
144     /**
145      * Get the page title for create page
146      * @return page title
147      */
148     @Override
149     public String getPropertyCreatePageTitle(  )
150     {
151         return PROPERTY_CREATE_TEXT_PAGETITLE;
152     }
153 
154     /**
155      * Get the page title for modify page
156      * @return page title
157      */
158     @Override
159     public String getPropertyModifyPageTitle(  )
160     {
161         return PROPERTY_MODIFY_TEXT_PAGETITLE;
162     }
163 
164     /**
165      * Set the data of the attribute
166      * @param request HttpServletRequest
167      * @return null if there are no errors
168      */
169     @Override
170     public String setAttributeData( HttpServletRequest request )
171     {
172         String strTitle = request.getParameter( PARAMETER_TITLE );
173         String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null )
174             ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim(  ) : null;
175         String strIsShownInSearch = request.getParameter( PARAMETER_IS_SHOWN_IN_SEARCH );
176         String strIsShownInResultList = request.getParameter( PARAMETER_IS_SHOWN_IN_RESULT_LIST );
177         String strMandatory = request.getParameter( PARAMETER_MANDATORY );
178         String strWidth = request.getParameter( PARAMETER_WIDTH );
179         String strMaxSizeEnter = request.getParameter( PARAMETER_MAX_SIZE_ENTER );
180         String strValue = request.getParameter( PARAMETER_VALUE );
181 
182         String strError;
183 
184         if ( StringUtils.isNotBlank( strTitle ) && StringUtils.isNotBlank( strWidth ) )
185         {
186             if ( strWidth.matches( REGEX_ID ) )
187             {
188                 int nWidth = Integer.parseInt( strWidth );
189 
190                 int nMaxSizeEnter;
191 
192                 if ( StringUtils.isNotBlank( strMaxSizeEnter ) && !strMaxSizeEnter.matches( REGEX_ID ) )
193                 {
194                     return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_ARITHMETICAL_CHARACTERS,
195                         AdminMessage.TYPE_STOP );
196                 }
197                 else if ( ( strMaxSizeEnter == null ) || strMaxSizeEnter.equals( EMPTY_STRING ) )
198                 {
199                     nMaxSizeEnter = -1;
200                 }
201                 else
202                 {
203                     nMaxSizeEnter = Integer.parseInt( strMaxSizeEnter );
204                 }
205 
206                 setTitle( strTitle );
207                 setHelpMessage( strHelpMessage );
208                 setMandatory( strMandatory != null );
209                 setShownInSearch( strIsShownInSearch != null );
210                 setShownInResultList( strIsShownInResultList != null );
211 
212                 if ( getListAttributeFields(  ) == null )
213                 {
214                     List<AttributeField> listAttributeFields = new ArrayList<AttributeField>(  );
215                     AttributeField attributeField = new AttributeField(  );
216                     listAttributeFields.add( attributeField );
217                     setListAttributeFields( listAttributeFields );
218                 }
219 
220                 getListAttributeFields(  ).get( 0 ).setValue( strValue );
221                 getListAttributeFields(  ).get( 0 ).setWidth( nWidth );
222                 getListAttributeFields(  ).get( 0 ).setMaxSizeEnter( nMaxSizeEnter );
223 
224                 return null;
225             }
226             else
227             {
228                 strError = PROPERTY_MESSAGE_NO_ARITHMETICAL_CHARACTERS;
229             }
230         }
231         else
232         {
233             strError = Messages.MANDATORY_FIELDS;
234         }
235 
236         return AdminMessageService.getMessageUrl( request, strError, AdminMessage.TYPE_STOP );
237     }
238 
239     /**
240      * Set attribute type
241      * @param locale locale
242      */
243     @Override
244     public void setAttributeType( Locale locale )
245     {
246         AttributeType attributeType = new AttributeType(  );
247         attributeType.setLocale( locale );
248         attributeType.setClassName( this.getClass(  ).getName(  ) );
249         attributeType.setLabelType( PROPERTY_TYPE_TEXT );
250         setAttributeType( attributeType );
251     }
252 
253     /**
254      * Get the data of the user fields
255      * @param request HttpServletRequest
256      * @param user user
257      * @return user field data
258      */
259     @Override
260     public List<AdminUserField> getUserFieldsData( HttpServletRequest request, AdminUser user )
261     {
262         String[] strValues = request.getParameterValues( PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE +
263                 getIdAttribute(  ) );
264 
265         return getUserFieldsData( strValues, user );
266     }
267 
268     /**
269      * Get the data of the user fields
270      * @param strValues Values
271      * @param user user
272      * @return user field data
273      */
274     @Override
275     public List<AdminUserField> getUserFieldsData( String[] strValues, AdminUser user )
276     {
277         List<AdminUserField> listUserFields = new ArrayList<AdminUserField>(  );
278         AdminUserField userField = new AdminUserField(  );
279         AttributeService.getInstance(  ).setAttributeField( this );
280 
281         if ( strValues != null )
282         {
283             for ( String strValue : strValues )
284             {
285                 if ( strValue == null )
286                 {
287                     strValue = EMPTY_STRING;
288                 }
289 
290                 userField.setUser( user );
291                 userField.setAttribute( this );
292 
293                 if ( ( getListAttributeFields(  ) != null ) && ( getListAttributeFields(  ).size(  ) > 0 ) )
294                 {
295                     userField.setAttributeField( getListAttributeFields(  ).get( 0 ) );
296                 }
297 
298                 userField.setValue( strValue );
299 
300                 listUserFields.add( userField );
301             }
302         }
303 
304         return listUserFields;
305     }
306 
307     /**
308      * Get whether the attribute is anonymizable.
309      * @return True if the attribute can be anonymized, false otherwise.
310      */
311     @Override
312     public boolean isAnonymizable(  )
313     {
314         return true;
315     }
316 }