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.plugins.genericattributes.service.entrytype;
35  
36  import java.util.List;
37  import java.util.Locale;
38  
39  import javax.servlet.http.HttpServletRequest;
40  
41  import org.apache.commons.lang3.StringUtils;
42  
43  import fr.paris.lutece.plugins.genericattributes.business.Entry;
44  import fr.paris.lutece.plugins.genericattributes.business.Field;
45  import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
46  import fr.paris.lutece.plugins.genericattributes.business.GenericAttributeError;
47  import fr.paris.lutece.plugins.genericattributes.business.MandatoryError;
48  import fr.paris.lutece.plugins.genericattributes.business.Response;
49  import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils;
50  import fr.paris.lutece.portal.service.i18n.I18nService;
51  import fr.paris.lutece.portal.service.message.AdminMessage;
52  import fr.paris.lutece.portal.service.message.AdminMessageService;
53  
54  /**
55   * Abstract entry type for text
56   */
57  public abstract class AbstractEntryTypeNumber extends EntryTypeService
58  {
59      // PARAMETERS
60      private static final String PARAMETER_SUFFIX = "suffix";
61  
62      /**
63       * {@inheritDoc}
64       */
65      @Override
66      public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
67      {
68          initCommonRequestData( entry, request );
69          String strCode = request.getParameter( PARAMETER_ENTRY_CODE );
70          String strTitle = request.getParameter( PARAMETER_TITLE );
71          String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
72          String strComment = request.getParameter( PARAMETER_COMMENT );
73          String strValue = request.getParameter( PARAMETER_VALUE );
74          String strMandatory = request.getParameter( PARAMETER_MANDATORY );
75          String strMin = request.getParameter( PARAMETER_MIN );
76          String strMax = request.getParameter( PARAMETER_MAX );
77          String strUnique = request.getParameter( PARAMETER_UNIQUE );
78          String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
79          String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK );
80          String strErrorMessage = request.getParameter( PARAMETER_ERROR_MESSAGE );
81          String strIndexed = request.getParameter( PARAMETER_INDEXED );
82          String strSuffix = request.getParameter( PARAMETER_SUFFIX );
83          String strPlaceholder = request.getParameter( PARAMETER_PLACEHOLDER );
84  
85          String strFieldError = StringUtils.EMPTY;
86  
87          if ( StringUtils.isBlank( strTitle ) )
88          {
89              strFieldError = ERROR_FIELD_TITLE;
90          }
91  
92          if ( StringUtils.isNotBlank( strFieldError ) )
93          {
94              Object [ ] tabRequiredFields = {
95                      I18nService.getLocalizedString( strFieldError, locale )
96              };
97  
98              return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
99          }
100 
101         Integer defaultValue = null;
102         if ( StringUtils.isNumeric( strValue ) )
103         {
104             defaultValue = Integer.parseInt( strValue );
105         }
106 
107         Integer maxValue = null;
108         if ( StringUtils.isNumeric( strMax ) )
109         {
110             maxValue = Integer.parseInt( strMax );
111         }
112 
113         Integer minValue = null;
114         if ( StringUtils.isNumeric( strMin ) )
115         {
116             minValue = Integer.parseInt( strMin );
117         }
118 
119         entry.setTitle( strTitle );
120         entry.setHelpMessage( strHelpMessage );
121         entry.setComment( strComment );
122         entry.setCSSClass( strCSSClass );
123         entry.setIndexed( strIndexed != null );
124         entry.setErrorMessage( strErrorMessage );
125         entry.setCode( strCode );
126         entry.setUnique( strUnique != null );
127 
128         GenericAttributesUtils.createOrUpdateField( entry, FIELD_TEXT_CONF, null, defaultValue == null ? null : String.valueOf( defaultValue ) );
129         GenericAttributesUtils.createOrUpdateField( entry, FIELD_MIN, null, minValue == null ? null : String.valueOf( minValue ) );
130         GenericAttributesUtils.createOrUpdateField( entry, FIELD_MAX, null, maxValue == null ? null : String.valueOf( maxValue ) );
131         GenericAttributesUtils.createOrUpdateField( entry, FIELD_SUFFIX, null, StringUtils.isNotEmpty( strSuffix ) ? strSuffix : StringUtils.EMPTY );
132         GenericAttributesUtils.createOrUpdateField( entry, FIELD_PLACEHOLDER, null, strPlaceholder != null ? strPlaceholder : StringUtils.EMPTY );
133 
134         entry.setMandatory( strMandatory != null );
135         entry.setOnlyDisplayInBack( strOnlyDisplayInBack != null );
136         return null;
137     }
138 
139     /**
140      * {@inheritDoc}
141      */
142     @Override
143     public GenericAttributeError getResponseData( Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale )
144     {
145         String strValueEntry = request.getParameter( PREFIX_ATTRIBUTE + entry.getIdEntry( ) ).trim( );
146 
147         Response/genericattributes/business/Response.html#Response">Response response = new Response( );
148         response.setEntry( entry );
149         response.setResponseValue( strValueEntry );
150         if ( strValueEntry == null )
151         {
152             return null;
153         }
154 
155         if ( StringUtils.isNotBlank( response.getResponseValue( ) ) )
156         {
157             response.setToStringValueResponse( getResponseValueForRecap( entry, request, response, locale ) );
158         }
159         else
160         {
161             response.setToStringValueResponse( StringUtils.EMPTY );
162         }
163 
164         response.setIterationNumber( getResponseIterationValue( request ) );
165 
166         listResponse.add( response );
167 
168         return checkErrors( entry, strValueEntry, locale );
169     }
170 
171     private GenericAttributeError checkErrors( Entry entry, String strValueEntry, Locale locale )
172     {
173         if ( entry.isMandatory( ) && StringUtils.isBlank( strValueEntry ) )
174         {
175             if ( StringUtils.isNotEmpty( entry.getErrorMessage( ) ) )
176             {
177                 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
178                 error.setMandatoryError( true );
179                 error.setErrorMessage( entry.getErrorMessage( ) );
180 
181                 return error;
182             }
183 
184             return new MandatoryError( entry, locale );
185         }
186 
187         if ( StringUtils.isNotBlank( strValueEntry ) && !StringUtils.isNumeric( strValueEntry ) )
188         {
189             GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
190             error.setMandatoryError( false );
191             error.setTitleQuestion( entry.getTitle( ) );
192             error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_NUMERIC_FIELD, locale ) );
193 
194             return error;
195         }
196 
197         return null;
198     }
199 
200     /**
201      * {@inheritDoc}
202      */
203     @Override
204     public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
205     {
206         return getResponseValue( entry, response );
207     }
208 
209     /**
210      * {@inheritDoc}
211      */
212     @Override
213     public String getResponseValueForRecap( Entry entry, HttpServletRequest request, Response response, Locale locale )
214     {
215         return getResponseValue( entry, response );
216     }
217 
218     /**
219      * Get the response value
220      * 
221      * @param entry
222      *            The entry
223      * @return the response value of the response for this entry
224      * @param response
225      *            The response
226      */
227     private String getResponseValue( Entry entry, Response response )
228     {
229         if ( entry.getFields( ) == null )
230         {
231             entry.setFields( FieldHome.getFieldListByIdEntry( entry.getIdEntry( ) ) );
232         }
233 
234         StringBuilder sb = new StringBuilder( );
235         sb.append( response.getResponseValue( ) );
236 
237         Field field = entry.getFieldByCode( FIELD_SUFFIX );
238         if ( field != null && StringUtils.isNotBlank( field.getValue( ) ) )
239         {
240             if ( !field.getValue( ).startsWith( StringUtils.SPACE ) )
241             {
242                 sb.append( StringUtils.SPACE );
243             }
244             sb.append( field.getValue( ) );
245         }
246         return sb.toString( );
247     }
248 }