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.GenericAttributeError;
46  import fr.paris.lutece.plugins.genericattributes.business.MandatoryError;
47  import fr.paris.lutece.plugins.genericattributes.business.Response;
48  import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils;
49  import fr.paris.lutece.portal.service.editor.EditorBbcodeService;
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  import fr.paris.lutece.util.string.StringUtil;
54  
55  /**
56   * Abstract entry type for text areas
57   */
58  public abstract class AbstractEntryTypeTextArea extends EntryTypeService
59  {
60      private static final String PARAMETER_USE_RICH_TEXT = "useRichText";
61  
62      /**
63       * {@inheritDoc}
64       */
65      @Override
66      public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
67      {
68          initCommonRequestData( entry, request );
69          String strTitle = request.getParameter( PARAMETER_TITLE );
70          String strCode = request.getParameter( PARAMETER_ENTRY_CODE );
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 strWidth = request.getParameter( PARAMETER_WIDTH );
76          String strHeight = request.getParameter( PARAMETER_HEIGHT );
77          String strMaxSizeEnter = request.getParameter( PARAMETER_MAX_SIZE_ENTER );
78          String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
79          String strUseRichText = request.getParameter( PARAMETER_USE_RICH_TEXT );
80          String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK );
81          String strIndexed = request.getParameter( PARAMETER_INDEXED );
82          String strPlaceholder = request.getParameter( PARAMETER_PLACEHOLDER );
83  
84          int nWidth = -1;
85          int nHeight = -1;
86          int nMaxSizeEnter = -1;
87  
88          String strFieldError = StringUtils.EMPTY;
89  
90          if ( StringUtils.isBlank( strTitle ) )
91          {
92              strFieldError = ERROR_FIELD_TITLE;
93          }
94  
95          else
96              if ( StringUtils.isBlank( strWidth ) )
97              {
98                  strFieldError = ERROR_FIELD_WIDTH;
99              }
100             else
101                 if ( StringUtils.isBlank( strHeight ) )
102                 {
103                     strFieldError = ERROR_FIELD_HEIGHT;
104                 }
105 
106         if ( StringUtils.isNotBlank( strFieldError ) )
107         {
108             Object [ ] tabRequiredFields = {
109                     I18nService.getLocalizedString( strFieldError, locale )
110             };
111 
112             return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
113         }
114 
115         try
116         {
117             nHeight = Integer.parseInt( strHeight );
118         }
119         catch( NumberFormatException ne )
120         {
121             strFieldError = ERROR_FIELD_HEIGHT;
122         }
123 
124         try
125         {
126             nWidth = Integer.parseInt( strWidth );
127         }
128         catch( NumberFormatException ne )
129         {
130             strFieldError = ERROR_FIELD_WIDTH;
131         }
132 
133         try
134         {
135             if ( StringUtils.isNotBlank( strMaxSizeEnter ) )
136             {
137                 nMaxSizeEnter = Integer.parseInt( strMaxSizeEnter );
138             }else {
139                  //set maximum size to 2000 characters if value is empty
140                 nMaxSizeEnter = 2000;
141             }
142         }
143         catch( NumberFormatException ne )
144         {
145             strFieldError = FIELD_MAX_SIZE_ENTER;
146         }
147 
148         if ( StringUtils.isNotBlank( strFieldError ) )
149         {
150             Object [ ] tabRequiredFields = {
151                     I18nService.getLocalizedString( strFieldError, locale )
152             };
153 
154             return AdminMessageService.getMessageUrl( request, MESSAGE_NUMERIC_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
155         }
156 
157         entry.setTitle( strTitle );
158         entry.setCode( strCode );
159         entry.setHelpMessage( strHelpMessage );
160         entry.setComment( strComment );
161         entry.setCSSClass( strCSSClass );
162 
163         GenericAttributesUtils.createOrUpdateField( entry, FIELD_TEXT_CONF, null, strValue );
164         GenericAttributesUtils.createOrUpdateField( entry, FIELD_MAX_SIZE, null, String.valueOf( nMaxSizeEnter ) );
165         GenericAttributesUtils.createOrUpdateField( entry, FIELD_WIDTH, null, String.valueOf( nWidth ) );
166         GenericAttributesUtils.createOrUpdateField( entry, FIELD_HEIGHT, null, String.valueOf( nHeight ) );
167         GenericAttributesUtils.createOrUpdateField( entry, FIELD_RICHTEXT, null, String.valueOf( strUseRichText != null ) );
168         GenericAttributesUtils.createOrUpdateField( entry, FIELD_PLACEHOLDER, null, strPlaceholder != null ? strPlaceholder : StringUtils.EMPTY );
169 
170         entry.setMandatory( strMandatory != null );
171         entry.setOnlyDisplayInBack( strOnlyDisplayInBack != null );
172         entry.setIndexed( strIndexed != null );
173         return null;
174     }
175 
176     /**
177      * {@inheritDoc}
178      */
179     @Override
180     public GenericAttributeError getResponseData( Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale )
181     {
182         String strValueEntry = request.getParameter( PREFIX_ATTRIBUTE + entry.getIdEntry( ) );
183         Response/genericattributes/business/Response.html#Response">Response response = new Response( );
184         response.setEntry( entry );
185 
186         if ( strValueEntry == null )
187         {
188             return null;
189         }
190 
191         int nMaxSize = Integer.parseInt( entry.getFieldByCode( FIELD_MAX_SIZE ).getValue( ) );
192 
193         Field fieldRichText = entry.getFieldByCode( IEntryTypeService.FIELD_RICHTEXT );
194         boolean useRichtext = fieldRichText != null && Boolean.valueOf( fieldRichText.getValue( ) );
195 
196         if ( useRichtext )
197         {
198             response.setResponseValue( EditorBbcodeService.getInstance( ).parse( strValueEntry ) );
199         }
200         else
201         {
202             response.setResponseValue( strValueEntry );
203         }
204 
205         if ( StringUtils.isNotBlank( response.getResponseValue( ) ) )
206         {
207             // if we use a rich text, we set the toStringValueResponse to the BBCode string
208             if ( useRichtext )
209             {
210                 response.setToStringValueResponse( strValueEntry );
211             }
212             else
213             {
214                 response.setToStringValueResponse( getResponseValueForRecap( entry, request, response, locale ) );
215             }
216         }
217         else
218         {
219             response.setToStringValueResponse( StringUtils.EMPTY );
220         }
221 
222         response.setIterationNumber( getResponseIterationValue( request ) );
223 
224         listResponse.add( response );
225 
226         // check max size for the field. 0 means no limit
227         if ( ( nMaxSize != -1 ) && ( strValueEntry.length( ) > nMaxSize ) )
228         {
229             GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
230             error.setMandatoryError( false );
231             error.setTitleQuestion( entry.getTitle( ) );
232 
233             Object [ ] messageArgs = new Object [ ] {
234                     nMaxSize,
235             };
236             error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_MAXLENGTH, messageArgs, request.getLocale( ) ) );
237 
238             return error;
239         }
240 
241         if ( entry.isMandatory( ) && StringUtils.isBlank( strValueEntry ) )
242         {
243             return new MandatoryError( entry, locale );
244         }
245 
246         return null;
247     }
248 
249     /**
250      * {@inheritDoc}
251      */
252     @Override
253     public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
254     {
255         return response.getResponseValue( );
256     }
257 
258     /**
259      * {@inheritDoc}
260      */
261     @Override
262     public String getResponseValueForRecap( Entry entry, HttpServletRequest request, Response response, Locale locale )
263     {
264         return response.getResponseValue( );
265     }
266 }