1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.appointment.modules.rest.rs.filter;
35
36 import fr.paris.lutece.plugins.appointment.modules.rest.util.contsants.AppointmentRestConstants;
37 import fr.paris.lutece.portal.service.util.AppPropertiesService;
38
39 import javax.ws.rs.container.ContainerRequestContext;
40 import javax.ws.rs.core.MultivaluedMap;
41 import java.time.LocalDate;
42 import java.time.format.DateTimeParseException;
43
44 public class QueryParamValidator
45 {
46
47 public static final String MEETING_IDS_REQUIRED = "appointment-rest.validation.required.meetingsids";
48 public static final String START_DATE_REQUIRED = "appointment-rest.validation.required.startdate";
49 public static final String START_DATE_INVALID = "appointment-rest.validation.invalid.startdate";
50 public static final String END_DATE_REQUIRED = "appointment-rest.validation.required.enddate";
51 public static final String END_DATE_INVALID = "appointment-rest.validation.invalid.enddate";
52 public static final String REQUIRED = "Required";
53
54 private QueryParamValidator()
55 {
56 }
57
58 public static ValidationErrorResponse validate( ContainerRequestContext requestContext )
59 {
60
61 MultivaluedMap<String, String> queryParameters = requestContext.getUriInfo( ).getQueryParameters( );
62
63 ValidationErrorResponsetment/modules/rest/rs/filter/ValidationErrorResponse.html#ValidationErrorResponse">ValidationErrorResponse errors = new ValidationErrorResponse( );
64 if ( !queryParameters.containsKey( AppointmentRestConstants.JSON_TAG_MEETING_POINT_IDS ) )
65 {
66 errors.addDetail( new ValidationErrorResponse.Detail( AppointmentRestConstants.JSON_TAG_MEETING_POINT_IDS,
67 AppPropertiesService.getProperty( MEETING_IDS_REQUIRED, "Champs meeting_point_ids requis" ), REQUIRED) );
68 }
69 if ( !queryParameters.containsKey( AppointmentRestConstants.JSON_TAG_START_DATE ) )
70 {
71 errors.addDetail( new ValidationErrorResponse.Detail( AppointmentRestConstants.JSON_TAG_START_DATE,
72 AppPropertiesService.getProperty( START_DATE_REQUIRED, "Champs start_date requis" ), REQUIRED) );
73 }
74 else
75 if ( !isValideDate( queryParameters.getFirst( AppointmentRestConstants.JSON_TAG_START_DATE ) ) )
76 {
77 errors.addDetail( new ValidationErrorResponse.Detail( AppointmentRestConstants.JSON_TAG_START_DATE,
78 AppPropertiesService.getProperty( START_DATE_INVALID, "Format du champs start_date invalide" ), "Invalid" ) );
79 }
80 if ( !queryParameters.containsKey( AppointmentRestConstants.JSON_TAG_END_DATE ) )
81 {
82 errors.addDetail( new ValidationErrorResponse.Detail( AppointmentRestConstants.JSON_TAG_END_DATE,
83 AppPropertiesService.getProperty( END_DATE_REQUIRED, "Champs end_date requis" ), REQUIRED) );
84 }
85 else
86 if ( !isValideDate( queryParameters.getFirst( AppointmentRestConstants.JSON_TAG_END_DATE ) ) )
87 {
88 errors.addDetail( new ValidationErrorResponse.Detail( AppointmentRestConstants.JSON_TAG_END_DATE,
89 AppPropertiesService.getProperty( END_DATE_INVALID, "Format du champs end_date invalide" ), "Invalid" ) );
90 }
91 return errors;
92 }
93
94 public static boolean isValideDate( String dateStr )
95 {
96 try
97 {
98 LocalDate.parse( dateStr, AppointmentRestConstants.SEARCH_DATE_FORMATTER );
99 }
100 catch( DateTimeParseException e )
101 {
102 return false;
103 }
104 return true;
105 }
106 }