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