View Javadoc
1   /*
2    * Copyright (c) 2002-2021, 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.plugins.mylutece.business.attribute;
35  
36  import fr.paris.lutece.plugins.mylutece.service.MyLutecePlugin;
37  import fr.paris.lutece.portal.service.plugin.Plugin;
38  import fr.paris.lutece.portal.service.plugin.PluginService;
39  import fr.paris.lutece.portal.service.util.AppPropertiesService;
40  import fr.paris.lutece.util.url.UrlItem;
41  
42  import java.io.UnsupportedEncodingException;
43  
44  import java.net.URLEncoder;
45  
46  import java.util.ArrayList;
47  import java.util.List;
48  import java.util.Locale;
49  
50  import javax.servlet.http.HttpServletRequest;
51  
52  /**
53   *
54   * MyLuteceUserFieldFilter
55   *
56   */
57  public class MyLuteceUserFieldFilter
58  {
59      // CONSTANTS
60      private static final String EMPTY_STRING = "";
61      private static final String CONSTANT_ESPERLUETTE = "&";
62      private static final String CONSTANT_EQUAL = "=";
63      private static final String CONSTANT_UNDERSCORE = "_";
64  
65      // PARAMETERS
66      private static final String PARAMETER_SEARCH_IS_SEARCH = "search_is_search";
67      private static final String PARAMETER_ATTRIBUTE = "attribute";
68  
69      // PROPERTIES
70      private static final String PROPERTY_ENCODING_URL = "lutece.encoding.url";
71      private List<MyLuteceUserField> _listUserFields;
72  
73      /**
74       * Get list user fields
75       * 
76       * @return list user fields
77       */
78      public List<MyLuteceUserField> getListUserFields( )
79      {
80          return _listUserFields;
81      }
82  
83      /**
84       * Set list user fields
85       * 
86       * @param listUserFields
87       *            list user fields
88       */
89      public void setListUserFields( List<MyLuteceUserField> listUserFields )
90      {
91          _listUserFields = listUserFields;
92      }
93  
94      /**
95       * Set admin user field filter
96       * 
97       * @param request
98       *            HttpServletRequest
99       * @param locale
100      *            locale
101      */
102     public void setMyLuteceUserFieldFilter( HttpServletRequest request, Locale locale )
103     {
104         _listUserFields = new ArrayList<MyLuteceUserField>( );
105 
106         String strIsSearch = request.getParameter( PARAMETER_SEARCH_IS_SEARCH );
107 
108         if ( strIsSearch != null )
109         {
110             Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
111             List<IAttribute> listAttributes = AttributeHome.findAll( locale, plugin );
112 
113             for ( IAttribute attribute : listAttributes )
114             {
115                 for ( MyLuteceUserField userField : attribute.getUserFieldsData( request, 0 ) )
116                 {
117                     if ( ( userField != null ) && !userField.getValue( ).equals( EMPTY_STRING ) )
118                     {
119                         _listUserFields.add( userField );
120                     }
121                 }
122             }
123         }
124     }
125 
126     /**
127      * Build url attributes
128      * 
129      * @param url
130      *            the url
131      */
132     public void setUrlAttributes( UrlItem url )
133     {
134         for ( MyLuteceUserField userField : _listUserFields )
135         {
136             try
137             {
138                 url.addParameter( PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE + userField.getAttribute( ).getIdAttribute( ),
139                         URLEncoder.encode( userField.getValue( ), AppPropertiesService.getProperty( PROPERTY_ENCODING_URL ) ) );
140             }
141             catch( UnsupportedEncodingException e )
142             {
143                 e.printStackTrace( );
144             }
145         }
146     }
147 
148     /**
149      * Build url attributes
150      * 
151      * @return the url attributes
152      */
153     public String getUrlAttributes( )
154     {
155         StringBuilder sbUrlAttributes = new StringBuilder( );
156 
157         for ( MyLuteceUserField userField : _listUserFields )
158         {
159             if ( userField.getAttribute( ).getAttributeType( ).getClassName( ).equals( AttributeComboBox.class.getName( ) ) )
160             {
161                 sbUrlAttributes.append( CONSTANT_ESPERLUETTE + PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE + userField.getAttribute( ).getIdAttribute( )
162                         + CONSTANT_EQUAL + userField.getAttributeField( ).getIdField( ) );
163             }
164             else
165             {
166                 try
167                 {
168                     sbUrlAttributes.append( CONSTANT_ESPERLUETTE + PARAMETER_ATTRIBUTE + CONSTANT_UNDERSCORE + userField.getAttribute( ).getIdAttribute( )
169                             + CONSTANT_EQUAL + URLEncoder.encode( userField.getValue( ), AppPropertiesService.getProperty( PROPERTY_ENCODING_URL ) ) );
170                 }
171                 catch( UnsupportedEncodingException e )
172                 {
173                     e.printStackTrace( );
174                 }
175             }
176         }
177 
178         return sbUrlAttributes.toString( );
179     }
180 }