AttributeComboBox.java

  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. import fr.paris.lutece.portal.business.user.AdminUser;
  36. import fr.paris.lutece.portal.service.message.AdminMessage;
  37. import fr.paris.lutece.portal.service.message.AdminMessageService;
  38. import fr.paris.lutece.portal.service.user.attribute.AttributeFieldService;
  39. import fr.paris.lutece.portal.web.constants.Messages;

  40. import org.apache.commons.lang3.StringUtils;

  41. import java.util.ArrayList;
  42. import java.util.List;
  43. import java.util.Locale;

  44. import javax.servlet.http.HttpServletRequest;

  45. /**
  46.  *
  47.  * AttributeComboBox
  48.  *
  49.  */
  50. public class AttributeComboBox extends AbstractAttribute implements ISimpleValuesAttributes
  51. {
  52.     // Constants
  53.     private static final String CONSTANT_UNDERSCORE = "_";

  54.     // Parameters
  55.     private static final String PARAMETER_TITLE = "title";
  56.     private static final String PARAMETER_HELP_MESSAGE = "help_message";
  57.     private static final String PARAMETER_MANDATORY = "mandatory";
  58.     private static final String PARAMETER_MULTIPLE = "multiple";
  59.     private static final String PARAMETER_IS_SHOWN_IN_SEARCH = "is_shown_in_search";
  60.     private static final String PARAMETER_IS_SHOWN_IN_RESULT_LIST = "is_shown_in_result_list";
  61.     private static final String PARAMETER_ATTRIBUTE = "attribute";

  62.     // Properties
  63.     private static final String PROPERTY_TYPE_COMBOBOX = "portal.users.attribute.type.comboBox";
  64.     private static final String PROPERTY_CREATE_COMBOBOX_PAGETITLE = "portal.users.create_attribute.pageTitleAttributeComboBox";
  65.     private static final String PROPERTY_MODIFY_COMBOBOX_PAGETITLE = "portal.users.modify_attribute.pageTitleAttributeComboBox";

  66.     // Templates
  67.     private static final String TEMPLATE_CREATE_ATTRIBUTE = "admin/user/attribute/combobox/create_attribute_combobox.html";
  68.     private static final String TEMPLATE_MODIFY_ATTRIBUTE = "admin/user/attribute/combobox/modify_attribute_combobox.html";
  69.     private static final String TEMPLATE_HTML_FORM_ATTRIBUTE = "admin/user/attribute/combobox/html_code_form_attribute_combobox.html";
  70.     private static final String TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE = "admin/user/attribute/combobox/html_code_form_search_attribute_combobox.html";
  71.     private static final String TEMPLATE_HTML_VALUE = "admin/user/attribute/combobox/html_code_value_attribute_combobox.html";

  72.     /**
  73.      * Constructor
  74.      */
  75.     public AttributeComboBox( )
  76.     {
  77.         // Ctor
  78.     }

  79.     /**
  80.      * Get the template create an attribute
  81.      *
  82.      * @return The URL of the template
  83.      */
  84.     @Override
  85.     public String getTemplateCreateAttribute( )
  86.     {
  87.         return TEMPLATE_CREATE_ATTRIBUTE;
  88.     }

  89.     /**
  90.      * Get the template modify an attribute
  91.      *
  92.      * @return The URL of the template
  93.      */
  94.     @Override
  95.     public String getTemplateModifyAttribute( )
  96.     {
  97.         return TEMPLATE_MODIFY_ATTRIBUTE;
  98.     }

  99.     /**
  100.      * Get the template html form attribute
  101.      *
  102.      * @return the template
  103.      */
  104.     @Override
  105.     public String getTemplateHtmlFormAttribute( )
  106.     {
  107.         return TEMPLATE_HTML_FORM_ATTRIBUTE;
  108.     }

  109.     /**
  110.      * Get the template html form search attribute
  111.      *
  112.      * @return the template
  113.      */
  114.     @Override
  115.     public String getTemplateHtmlFormSearchAttribute( )
  116.     {
  117.         return TEMPLATE_HTML_FORM_SEARCH_ATTRIBUTE;
  118.     }

  119.     /**
  120.      * Get the template html for the value of the attribute
  121.      *
  122.      * @return the template
  123.      */
  124.     @Override
  125.     public String getTemplateHtmlValue( )
  126.     {
  127.         return TEMPLATE_HTML_VALUE;
  128.     }

  129.     /**
  130.      * Get page title for create page
  131.      *
  132.      * @return page title
  133.      */
  134.     @Override
  135.     public String getPropertyCreatePageTitle( )
  136.     {
  137.         return PROPERTY_CREATE_COMBOBOX_PAGETITLE;
  138.     }

  139.     /**
  140.      * Get page title for modify page
  141.      *
  142.      * @return page title
  143.      */
  144.     @Override
  145.     public String getPropertyModifyPageTitle( )
  146.     {
  147.         return PROPERTY_MODIFY_COMBOBOX_PAGETITLE;
  148.     }

  149.     /**
  150.      * Set the data of the attribute
  151.      *
  152.      * @param request
  153.      *            HttpServletRequest
  154.      * @return null if there are no errors
  155.      */
  156.     @Override
  157.     public String setAttributeData( HttpServletRequest request )
  158.     {
  159.         String strTitle = request.getParameter( PARAMETER_TITLE );
  160.         String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
  161.         String strIsShownInSearch = request.getParameter( PARAMETER_IS_SHOWN_IN_SEARCH );
  162.         String strIsShownInResultList = request.getParameter( PARAMETER_IS_SHOWN_IN_RESULT_LIST );
  163.         String strMandatory = request.getParameter( PARAMETER_MANDATORY );
  164.         String strMultiple = request.getParameter( PARAMETER_MULTIPLE );

  165.         if ( StringUtils.isNotBlank( strTitle ) )
  166.         {
  167.             setTitle( strTitle );
  168.             setHelpMessage( strHelpMessage );
  169.             setMandatory( strMandatory != null );
  170.             setShownInSearch( strIsShownInSearch != null );
  171.             setShownInResultList( strIsShownInResultList != null );

  172.             if ( getListAttributeFields( ) == null )
  173.             {
  174.                 List<AttributeField> listAttributeFields = new ArrayList<>( );
  175.                 AttributeField attributeField = new AttributeField( );
  176.                 listAttributeFields.add( attributeField );
  177.                 setListAttributeFields( listAttributeFields );
  178.             }

  179.             getListAttributeFields( ).get( 0 ).setMultiple( strMultiple != null );

  180.             return null;
  181.         }

  182.         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
  183.     }

  184.     /**
  185.      * Set attribute type
  186.      *
  187.      * @param locale
  188.      *            locale
  189.      */
  190.     @Override
  191.     public void setAttributeType( Locale locale )
  192.     {
  193.         AttributeType attributeType = new AttributeType( );
  194.         attributeType.setLocale( locale );
  195.         attributeType.setClassName( this.getClass( ).getName( ) );
  196.         attributeType.setLabelType( PROPERTY_TYPE_COMBOBOX );
  197.         setAttributeType( attributeType );
  198.     }

  199.     /**
  200.      * Get the data of the user fields
  201.      *
  202.      * @param request
  203.      *            HttpServletRequest
  204.      * @param user
  205.      *            user
  206.      * @return user field data
  207.      */
  208.     @Override
  209.     public List<AdminUserField> getUserFieldsData( HttpServletRequest request, AdminUser user )
  210.     {
  211.         String [ ] strValues = request.getParameterValues( PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE + getIdAttribute( ) );

  212.         return getUserFieldsData( strValues, user );
  213.     }

  214.     /**
  215.      * Get the data of the user fields
  216.      *
  217.      * @param strValues
  218.      *            Values
  219.      * @param user
  220.      *            user
  221.      * @return user field data
  222.      */
  223.     @Override
  224.     public List<AdminUserField> getUserFieldsData( String [ ] strValues, AdminUser user )
  225.     {
  226.         List<AdminUserField> listUserFields = new ArrayList<>( );

  227.         if ( strValues != null )
  228.         {
  229.             for ( String strValue : strValues )
  230.             {
  231.                 AdminUserField userField = new AdminUserField( );
  232.                 AttributeField attributeField;

  233.                 if ( StringUtils.isNotBlank( strValue ) && StringUtils.isNumeric( strValue ) )
  234.                 {
  235.                     int nIdField = Integer.parseInt( strValue );
  236.                     attributeField = AttributeFieldService.getInstance( ).getAttributeField( nIdField );
  237.                 }
  238.                 else
  239.                 {
  240.                     attributeField = new AttributeField( );
  241.                     attributeField.setAttribute( this );
  242.                     attributeField.setTitle( strValue );
  243.                     attributeField.setValue( strValue );
  244.                 }

  245.                 userField.setUser( user );
  246.                 userField.setAttribute( this );
  247.                 userField.setAttributeField( attributeField );
  248.                 userField.setValue( attributeField.getTitle( ) );

  249.                 listUserFields.add( userField );
  250.             }
  251.         }
  252.         // If the combobox is multiple and nothing is selected, the request will have no paramater at all
  253.         else
  254.         {
  255.             AdminUserField userField = new AdminUserField( );
  256.             AttributeField attributeField;
  257.             attributeField = new AttributeField( );
  258.             attributeField.setAttribute( this );
  259.             attributeField.setTitle( "" );
  260.             attributeField.setValue( "" );
  261.             userField.setUser( user );
  262.             userField.setAttribute( this );
  263.             userField.setAttributeField( attributeField );
  264.             userField.setValue( attributeField.getTitle( ) );

  265.             listUserFields.add( userField );
  266.         }

  267.         return listUserFields;
  268.     }

  269.     /**
  270.      * Get whether the attribute is anonymizable.
  271.      *
  272.      * @return True if the attribute can be anonymized, false otherwise.
  273.      */
  274.     @Override
  275.     public boolean isAnonymizable( )
  276.     {
  277.         return false;
  278.     }
  279. }