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.web.attribute;
35  
36  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeField;
37  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeFieldHome;
38  import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeHome;
39  import fr.paris.lutece.plugins.mylutece.business.attribute.IAttribute;
40  import fr.paris.lutece.plugins.mylutece.business.attribute.MyLuteceUserFieldHome;
41  import fr.paris.lutece.plugins.mylutece.service.MyLutecePlugin;
42  import fr.paris.lutece.portal.service.message.AdminMessage;
43  import fr.paris.lutece.portal.service.message.AdminMessageService;
44  import fr.paris.lutece.portal.service.plugin.Plugin;
45  import fr.paris.lutece.portal.service.plugin.PluginService;
46  import fr.paris.lutece.portal.service.template.AppTemplateService;
47  import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
48  import fr.paris.lutece.portal.web.constants.Messages;
49  import fr.paris.lutece.util.html.HtmlTemplate;
50  
51  import java.util.HashMap;
52  import java.util.Iterator;
53  import java.util.List;
54  import java.util.Map;
55  
56  import javax.servlet.http.HttpServletRequest;
57  
58  /**
59   *
60   * AttributeFieldJspBean
61   *
62   */
63  public class AttributeFieldJspBean extends AdminFeaturesPageJspBean
64  {
65      // CONSTANTS
66      private static final String EMPTY_STRING = "";
67  
68      // PROPERTIES
69      private static final String PROPERTY_CREATE_ATTRIBUTE_FIELDS_PAGETITLE = "mylutece.create_attribute_field.pageTitle";
70      private static final String PROPERTY_MODIFY_ATTRIBUTE_FIELDS_PAGETITLE = "mylutece.modify_attribute_field.pageTitle";
71      private static final String PROPERTY_MESSAGE_CONFIRM_REMOVE_ATTRIBUTE_FIELD = "mylutece.modify_attribute.message.removeAttributeField";
72  
73      // TEMPLATES
74      private static final String TEMPLATE_CREATE_ATTRIBUTE_FIELD = "admin/plugins/mylutece/attribute/create_attribute_field.html";
75      private static final String TEMPLATE_MODIFY_ATTRIBUTE_FIELD = "admin/plugins/mylutece/attribute/modify_attribute_field.html";
76  
77      // PARAMETERS
78      private static final String PARAMETER_CANCEL = "cancel";
79      private static final String PARAMETER_ID_ATTRIBUTE = "id_attribute";
80      private static final String PARAMETER_TITLE = "title";
81      private static final String PARAMETER_VALUE = "value";
82      private static final String PARAMETER_DEFAULT_VALUE = "default_value";
83      private static final String PARAMETER_ID_FIELD = "id_field";
84  
85      // MARKS
86      private static final String MARK_ATTRIBUTE_FIELD = "attribute_field";
87      private static final String MARK_ATTRIBUTE = "attribute";
88  
89      // JSP
90      private static final String JSP_MODIFY_ATTRIBUTE = "ModifyAttribute.jsp";
91      private static final String JSP_URL_REMOVE_ATTRIBUTE_FIELD = "jsp/admin/plugins/mylutece/attribute/DoRemoveAttributeField.jsp";
92  
93      /**
94       * Create attribute field
95       * 
96       * @param request
97       *            HttpServletRequest
98       * @return the html form
99       */
100     public String getCreateAttributeField( HttpServletRequest request )
101     {
102         setPageTitleProperty( PROPERTY_CREATE_ATTRIBUTE_FIELDS_PAGETITLE );
103 
104         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
105         int nIdAttribute = Integer.parseInt( strIdAttribute );
106         Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
107 
108         IAttribute attribute = AttributeHome.findByPrimaryKey( nIdAttribute, getLocale( ), plugin );
109 
110         HtmlTemplate template;
111         Map<String, Object> model = new HashMap<String, Object>( );
112         model.put( MARK_ATTRIBUTE, attribute );
113 
114         template = AppTemplateService.getTemplate( TEMPLATE_CREATE_ATTRIBUTE_FIELD, getLocale( ), model );
115 
116         return getAdminPage( template.getHtml( ) );
117     }
118 
119     /**
120      *
121      * @param request
122      *            The request
123      * @return the html form
124      */
125     public String doCreateAttributeField( HttpServletRequest request )
126     {
127         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
128         int nIdAttribute = Integer.parseInt( strIdAttribute );
129         String strTitle = request.getParameter( PARAMETER_TITLE );
130         String strValue = request.getParameter( PARAMETER_VALUE );
131         String strDefaultValue = request.getParameter( PARAMETER_DEFAULT_VALUE );
132         String strCancel = request.getParameter( PARAMETER_CANCEL );
133 
134         if ( strCancel == null )
135         {
136             if ( ( strTitle == null ) || strTitle.equals( EMPTY_STRING ) )
137             {
138                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
139             }
140 
141             if ( ( strValue == null ) || strValue.equals( EMPTY_STRING ) )
142             {
143                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
144             }
145 
146             Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
147             AttributeFieldsiness/attribute/AttributeField.html#AttributeField">AttributeField attributeField = new AttributeField( );
148             attributeField.setTitle( strTitle );
149             attributeField.setValue( strValue );
150             attributeField.setDefaultValue( strDefaultValue != null );
151 
152             IAttribute attribute = AttributeHome.findByPrimaryKey( nIdAttribute, getLocale( ), plugin );
153             attributeField.setAttribute( attribute );
154 
155             AttributeFieldHome.create( attributeField, plugin );
156         }
157 
158         String strUrl = JSP_MODIFY_ATTRIBUTE + "?" + PARAMETER_ID_ATTRIBUTE + "=" + nIdAttribute;
159 
160         return strUrl;
161     }
162 
163     /**
164      * Modify an attribute field
165      * 
166      * @param request
167      *            HttpServletRequest
168      * @return the html form
169      */
170     public String getModifyAttributeField( HttpServletRequest request )
171     {
172         setPageTitleProperty( PROPERTY_MODIFY_ATTRIBUTE_FIELDS_PAGETITLE );
173 
174         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
175         int nIdField = Integer.parseInt( strIdField );
176         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
177         int nIdAttribute = Integer.parseInt( strIdAttribute );
178         Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
179 
180         IAttribute attribute = AttributeHome.findByPrimaryKey( nIdAttribute, getLocale( ), plugin );
181 
182         AttributeField attributeField = AttributeFieldHome.findByPrimaryKey( nIdField, plugin );
183 
184         HtmlTemplate template;
185         Map<String, Object> model = new HashMap<String, Object>( );
186         model.put( MARK_ATTRIBUTE_FIELD, attributeField );
187         model.put( MARK_ATTRIBUTE, attribute );
188 
189         template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_ATTRIBUTE_FIELD, getLocale( ), model );
190 
191         return getAdminPage( template.getHtml( ) );
192     }
193 
194     /**
195      * Modify an attribute field
196      * 
197      * @param request
198      *            HttpServletRequest
199      * @return The Jsp URL of the process result
200      */
201     public String doModifyAttributeField( HttpServletRequest request )
202     {
203         String strTitle = request.getParameter( PARAMETER_TITLE );
204         String strValue = request.getParameter( PARAMETER_VALUE );
205         String strDefaultValue = request.getParameter( PARAMETER_DEFAULT_VALUE );
206         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
207         int nIdField = Integer.parseInt( strIdField );
208         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
209         String strCancel = request.getParameter( PARAMETER_CANCEL );
210 
211         if ( strCancel == null )
212         {
213             if ( ( strTitle == null ) || strTitle.equals( EMPTY_STRING ) )
214             {
215                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
216             }
217 
218             if ( ( strValue == null ) || strValue.equals( EMPTY_STRING ) )
219             {
220                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
221             }
222 
223             Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
224 
225             AttributeFieldsiness/attribute/AttributeField.html#AttributeField">AttributeField attributeField = new AttributeField( );
226             attributeField.setIdField( nIdField );
227             attributeField.setTitle( strTitle );
228             attributeField.setValue( strValue );
229             attributeField.setDefaultValue( strDefaultValue != null );
230 
231             AttributeFieldHome.update( attributeField, plugin );
232         }
233 
234         String strUrl = JSP_MODIFY_ATTRIBUTE + "?" + PARAMETER_ID_ATTRIBUTE + "=" + strIdAttribute;
235 
236         return strUrl;
237     }
238 
239     /**
240      * Confirm the removal of the attribute field
241      * 
242      * @param request
243      *            HttpServletRequest
244      * @return the html form
245      */
246     public String doConfirmRemoveAttributeField( HttpServletRequest request )
247     {
248         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
249         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
250         String strUrlRemove = JSP_URL_REMOVE_ATTRIBUTE_FIELD + "?" + PARAMETER_ID_ATTRIBUTE + "=" + strIdAttribute + "&" + PARAMETER_ID_FIELD + "="
251                 + strIdField;
252 
253         String strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_CONFIRM_REMOVE_ATTRIBUTE_FIELD, strUrlRemove,
254                 AdminMessage.TYPE_CONFIRMATION );
255 
256         return strUrl;
257     }
258 
259     /**
260      * Remove the attribute field
261      * 
262      * @param request
263      *            HttpServletRequest
264      * @return The Jsp URL of the process result
265      */
266     public String doRemoveAttributeField( HttpServletRequest request )
267     {
268         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
269         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
270         int nIdField = Integer.parseInt( strIdField );
271         Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
272 
273         AttributeFieldHome.remove( nIdField, plugin );
274         MyLuteceUserFieldHome.removeUserFieldsFromIdField( nIdField, plugin );
275 
276         String strUrl = JSP_MODIFY_ATTRIBUTE + "?" + PARAMETER_ID_ATTRIBUTE + "=" + strIdAttribute;
277 
278         return strUrl;
279     }
280 
281     /**
282      * Move up the position of the attribute field
283      * 
284      * @param request
285      *            HttpServletRequest
286      * @return The Jsp URL of the process result
287      */
288     public String doMoveUpAttributeField( HttpServletRequest request )
289     {
290         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
291         int nIdAttribute = Integer.parseInt( strIdAttribute );
292         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
293         int nIdField = Integer.parseInt( strIdField );
294         Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
295 
296         List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( nIdAttribute, plugin );
297         AttributeField previousField = null;
298         AttributeField currentField = null;
299 
300         Iterator<AttributeField> it = listAttributeFields.iterator( );
301         previousField = it.next( );
302         currentField = it.next( );
303 
304         while ( it.hasNext( ) && ( currentField.getIdField( ) != nIdField ) )
305         {
306             previousField = currentField;
307             currentField = it.next( );
308         }
309 
310         int previousFieldPosition = previousField.getPosition( );
311         int currentFieldPosition = currentField.getPosition( );
312         previousField.setPosition( currentFieldPosition );
313         currentField.setPosition( previousFieldPosition );
314 
315         AttributeFieldHome.update( previousField, plugin );
316         AttributeFieldHome.update( currentField, plugin );
317 
318         String strUrl = JSP_MODIFY_ATTRIBUTE + "?" + PARAMETER_ID_ATTRIBUTE + "=" + strIdAttribute;
319 
320         return strUrl;
321     }
322 
323     /**
324      * Move down the position of the attribute field
325      * 
326      * @param request
327      *            HttpServletRequest
328      * @return The Jsp URL of the process result
329      */
330     public String doMoveDownAttributeField( HttpServletRequest request )
331     {
332         String strIdAttribute = request.getParameter( PARAMETER_ID_ATTRIBUTE );
333         int nIdAttribute = Integer.parseInt( strIdAttribute );
334         String strIdField = request.getParameter( PARAMETER_ID_FIELD );
335         int nIdField = Integer.parseInt( strIdField );
336         Plugin plugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
337 
338         List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( nIdAttribute, plugin );
339         AttributeField currentField = null;
340         AttributeField nextField = null;
341 
342         Iterator<AttributeField> it = listAttributeFields.iterator( );
343         currentField = it.next( );
344         nextField = it.next( );
345 
346         while ( it.hasNext( ) && ( currentField.getIdField( ) != nIdField ) )
347         {
348             currentField = nextField;
349             nextField = it.next( );
350         }
351 
352         int nextFieldPosition = nextField.getPosition( );
353         int currentFieldPosition = currentField.getPosition( );
354         nextField.setPosition( currentFieldPosition );
355         currentField.setPosition( nextFieldPosition );
356 
357         AttributeFieldHome.update( nextField, plugin );
358         AttributeFieldHome.update( currentField, plugin );
359 
360         String strUrl = JSP_MODIFY_ATTRIBUTE + "?" + PARAMETER_ID_ATTRIBUTE + "=" + strIdAttribute;
361 
362         return strUrl;
363     }
364 }