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.appointment.service;
35  
36  import java.util.Collection;
37  import java.util.Locale;
38  
39  import org.apache.commons.lang3.StringUtils;
40  
41  import fr.paris.lutece.plugins.appointment.business.form.Form;
42  import fr.paris.lutece.plugins.appointment.web.dto.AppointmentFormDTO;
43  import fr.paris.lutece.portal.service.rbac.Permission;
44  import fr.paris.lutece.portal.service.rbac.ResourceIdService;
45  import fr.paris.lutece.portal.service.rbac.ResourceType;
46  import fr.paris.lutece.portal.service.rbac.ResourceTypeManager;
47  import fr.paris.lutece.portal.service.util.AppLogService;
48  import fr.paris.lutece.util.ReferenceList;
49  
50  /**
51   *
52   * class FormResourceIdService
53   * 
54   * @author Laurent Payen
55   *
56   */
57  public final class AppointmentResourceIdService extends ResourceIdService
58  {
59      /** Permission to create appointments */
60      public static final String PERMISSION_CREATE_FORM = "CREATE_FORM";
61  
62      /** Permission to create appointments of the form */
63      public static final String PERMISSION_CREATE_APPOINTMENT = "CREATE_APPOINTMENT";
64  
65      /** Permission for deleting a form */
66      public static final String PERMISSION_DELETE_FORM = "DELETE_FORM";
67  
68      /** Permission for deleting appointments of the form */
69      public static final String PERMISSION_DELETE_APPOINTMENT = "DELETE_APPOINTMENT";
70  
71      /** Permission for modifying a form */
72      public static final String PERMISSION_MODIFY_FORM = "MODIFY_FORM";
73      /** Permission for modifying an advanced setting form */
74      public static final String PERMISSION_MODIFY_ADVANCED_SETTING_FORM = "MODIFY_ADVANCED_SETTING_FORM";
75      /** Permission for viewing appointment forms */
76      public static final String PERMISSION_VIEW_FORM = "VIEW_FORM";
77  
78      /** Permission for viewing appointments */
79      public static final String PERMISSION_VIEW_APPOINTMENT = "VIEW_APPOINTMENT";
80  
81      /** Permission for changing the state of a form */
82      public static final String PERMISSION_CHANGE_STATE = "CHANGE_STATE";
83  
84      /** Permission for changing appointment status */
85      public static final String PERMISSION_CHANGE_APPOINTMENT_STATUS = "CHANGE_APPOINTMENT_STATUS";
86  
87      /** Permission for taking appointment */
88      public static final String PERMISSION_OVERBOOKING_FORM = "OVERBOOKING_FORM";
89      /** Permission for moderate comment */
90      public static final String PERMISSION_MODERATE_COMMENT_FORM = "MODERATE_COMMENT_FORM";
91      /** Permission for adding comment */
92      public static final String PERMISSION_ADD_COMMENT_FORM = "ADD_COMMENT_FORM";
93  
94      // Permission labels
95      private static final String PROPERTY_LABEL_RESOURCE_TYPE = "appointment.appointment.name";
96      private static final String PROPERTY_LABEL_RESOURCE_TYPE_CREATE = "appointment.appointment.name.create";
97      private static final String PROPERTY_LABEL_CREATE_FORM = "appointment.permission.label.createForm";
98      private static final String PROPERTY_LABEL_CREATE_APPOINTMENT = "appointment.permission.label.createAppointment";
99      private static final String PROPERTY_LABEL_DELETE_FORM = "appointment.permission.label.deleteForm";
100     private static final String PROPERTY_LABEL_DELETE_APPOINTMENT = "appointment.permission.label.deleteAppointment";
101     private static final String PROPERTY_LABEL_MODIFY_FORM = "appointment.permission.label.modifyForm";
102     private static final String PROPERTY_LABEL_MODIFY_ADVANCED_SETTINGS_FORM = "appointment.permission.label.modifyAdvancedSettingForm";
103     private static final String PROPERTY_LABEL_VIEW_FORM = "appointment.permission.label.viewForm";
104     private static final String PROPERTY_LABEL_VIEW_APPOINTMENT = "appointment.permission.label.viewAppointment";
105     private static final String PROPERTY_LABEL_CHANGE_STATE = "appointment.permission.label.changeState";
106     private static final String PROPERTY_LABEL_CHANGE_APPOINTMENT_STATUS = "appointment.permission.label.changeAppointmentStatus";
107     public static final String PROPERTY_LABEL_OVERBOOKING_FORM = "appointment.permission.label.overbooking";
108     public static final String PROPERTY_LABEL_MODERATE_COMMENT_FORM = "appointment.permission.label.moderateComment";
109     public static final String PROPERTY_LABEL_ADD_COMMENT_FORM = "appointment.permission.label.addComment";
110 
111     /** Creates a new instance of DocumentTypeResourceIdService */
112     public AppointmentResourceIdService( )
113     {
114         setPluginName( AppointmentPlugin.PLUGIN_NAME );
115     }
116 
117     /**
118      * {@inheritDoc}
119      */
120     @Override
121     public void register( )
122     {
123         ResourceType resourceType = new ResourceType( );
124         resourceType.setResourceIdServiceClass( AppointmentResourceIdService.class.getName( ) );
125         resourceType.setPluginName( AppointmentPlugin.PLUGIN_NAME );
126         resourceType.setResourceTypeKey( AppointmentFormDTO.RESOURCE_TYPE );
127         resourceType.setResourceTypeLabelKey( PROPERTY_LABEL_RESOURCE_TYPE );
128 
129         Permission permission = new Permission( );
130         permission.setPermissionKey( PERMISSION_VIEW_FORM );
131         permission.setPermissionTitleKey( PROPERTY_LABEL_VIEW_FORM );
132         resourceType.registerPermission( permission );
133 
134         permission = new Permission( );
135         permission.setPermissionKey( PERMISSION_MODIFY_FORM );
136         permission.setPermissionTitleKey( PROPERTY_LABEL_MODIFY_FORM );
137         resourceType.registerPermission( permission );
138 
139         permission = new Permission( );
140         permission.setPermissionKey( PERMISSION_MODIFY_ADVANCED_SETTING_FORM );
141         permission.setPermissionTitleKey( PROPERTY_LABEL_MODIFY_ADVANCED_SETTINGS_FORM );
142         resourceType.registerPermission( permission );
143 
144         permission = new Permission( );
145         permission.setPermissionKey( PERMISSION_DELETE_FORM );
146         permission.setPermissionTitleKey( PROPERTY_LABEL_DELETE_FORM );
147         resourceType.registerPermission( permission );
148 
149         permission = new Permission( );
150         permission.setPermissionKey( PERMISSION_CHANGE_STATE );
151         permission.setPermissionTitleKey( PROPERTY_LABEL_CHANGE_STATE );
152         resourceType.registerPermission( permission );
153 
154         permission = new Permission( );
155         permission.setPermissionKey( PERMISSION_VIEW_APPOINTMENT );
156         permission.setPermissionTitleKey( PROPERTY_LABEL_VIEW_APPOINTMENT );
157         resourceType.registerPermission( permission );
158 
159         permission = new Permission( );
160         permission.setPermissionKey( PERMISSION_CREATE_APPOINTMENT );
161         permission.setPermissionTitleKey( PROPERTY_LABEL_CREATE_APPOINTMENT );
162         resourceType.registerPermission( permission );
163 
164         permission = new Permission( );
165         permission.setPermissionKey( PERMISSION_DELETE_APPOINTMENT );
166         permission.setPermissionTitleKey( PROPERTY_LABEL_DELETE_APPOINTMENT );
167         resourceType.registerPermission( permission );
168 
169         permission = new Permission( );
170         permission.setPermissionKey( PERMISSION_CHANGE_APPOINTMENT_STATUS );
171         permission.setPermissionTitleKey( PROPERTY_LABEL_CHANGE_APPOINTMENT_STATUS );
172         resourceType.registerPermission( permission );
173 
174         permission = new Permission( );
175         permission.setPermissionKey( PERMISSION_OVERBOOKING_FORM );
176         permission.setPermissionTitleKey( PROPERTY_LABEL_OVERBOOKING_FORM );
177         resourceType.registerPermission( permission );
178 
179         permission = new Permission( );
180         permission.setPermissionKey( PERMISSION_MODERATE_COMMENT_FORM );
181         permission.setPermissionTitleKey( PROPERTY_LABEL_MODERATE_COMMENT_FORM );
182         resourceType.registerPermission( permission );
183         permission = new Permission( );
184         permission.setPermissionKey( PERMISSION_ADD_COMMENT_FORM );
185         permission.setPermissionTitleKey( PROPERTY_LABEL_ADD_COMMENT_FORM );
186         resourceType.registerPermission( permission );
187 
188         ResourceTypeManager.registerResourceType( resourceType );
189 
190         ResourceType resourceTypeCreate = new ResourceType( );
191         resourceTypeCreate.setResourceIdServiceClass( AppointmentResourceIdService.class.getName( ) );
192         resourceTypeCreate.setPluginName( AppointmentPlugin.PLUGIN_NAME );
193         resourceTypeCreate.setResourceTypeKey( AppointmentFormDTO.RESOURCE_TYPE_CREATE );
194         resourceTypeCreate.setResourceTypeLabelKey( PROPERTY_LABEL_RESOURCE_TYPE_CREATE );
195 
196         permission = new Permission( );
197         permission.setPermissionKey( PERMISSION_CREATE_FORM );
198         permission.setPermissionTitleKey( PROPERTY_LABEL_CREATE_FORM );
199         resourceTypeCreate.registerPermission( permission );
200 
201         ResourceTypeManager.registerResourceType( resourceTypeCreate );
202     }
203 
204     /**
205      * {@inheritDoc}
206      */
207     @Override
208     public ReferenceList getResourceIdList( Locale locale )
209     {
210         Collection<Form> listForms = FormService.findAllForms( );
211         ReferenceList refListForms = new ReferenceList( );
212         for ( Form form : listForms )
213         {
214             refListForms.addItem( form.getIdForm( ), form.getTitle( ) );
215         }
216         return refListForms;
217     }
218 
219     /**
220      * {@inheritDoc}
221      */
222     @Override
223     public String getTitle( String strId, Locale locale )
224     {
225         int nIdForm = -1;
226         try
227         {
228             nIdForm = Integer.parseInt( strId );
229         }
230         catch( NumberFormatException ne )
231         {
232             AppLogService.error( ne );
233         }
234         Form form = FormService.findFormLightByPrimaryKey( nIdForm );
235         return ( form == null ) ? StringUtils.EMPTY : form.getTitle( );
236     }
237 }