1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.common.rest.api;
20
21 import java.lang.annotation.Annotation;
22 import java.lang.reflect.Type;
23 import java.time.LocalDateTime;
24 import java.time.OffsetDateTime;
25 import java.time.format.DateTimeFormatter;
26 import java.time.format.DateTimeParseException;
27 import javax.ws.rs.ext.ParamConverter;
28 import javax.ws.rs.ext.ParamConverterProvider;
29
30 public class DateParamConverterProvider implements ParamConverterProvider {
31
32 protected static class OffsetDateTimeParamConverter implements ParamConverter<OffsetDateTime> {
33
34 @Override
35 public OffsetDateTime fromString(final String value) {
36 try {
37 return OffsetDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
38 } catch (DateTimeParseException e) {
39 throw new IllegalArgumentException("Unparsable date: " + value, e);
40 }
41 }
42
43 @Override
44 public String toString(final OffsetDateTime value) {
45 return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value);
46 }
47 }
48
49 protected static class LocalDateTimeParamConverter implements ParamConverter<LocalDateTime> {
50
51 @Override
52 public LocalDateTime fromString(final String value) {
53 try {
54 return LocalDateTime.parse(value, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
55 } catch (DateTimeParseException e) {
56 throw new IllegalArgumentException("Unparsable date: " + value, e);
57 }
58 }
59
60 @Override
61 public String toString(final LocalDateTime value) {
62 return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(value);
63 }
64 }
65
66 @Override
67 @SuppressWarnings("unchecked")
68 public <T> ParamConverter<T> getConverter(
69 final Class<T> rawType, final Type genericType, final Annotation[] annotations) {
70
71 if (OffsetDateTime.class.equals(rawType)) {
72 return (ParamConverter<T>) new OffsetDateTimeParamConverter();
73 }
74 if (LocalDateTime.class.equals(rawType)) {
75 return (ParamConverter<T>) new LocalDateTimeParamConverter();
76 }
77
78 return null;
79 }
80 }