1 package org
.argeo
.naming
;
3 import java
.io
.UnsupportedEncodingException
;
5 import java
.net
.URLDecoder
;
6 import java
.nio
.charset
.StandardCharsets
;
7 import java
.time
.Instant
;
8 import java
.time
.OffsetDateTime
;
9 import java
.time
.ZoneOffset
;
10 import java
.time
.ZonedDateTime
;
11 import java
.time
.format
.DateTimeFormatter
;
12 import java
.util
.LinkedHashMap
;
13 import java
.util
.LinkedList
;
14 import java
.util
.List
;
17 public class NamingUtils
{
18 private final static DateTimeFormatter utcLdapDate
= DateTimeFormatter
.ofPattern("uuuuMMddHHmmssX")
19 .withZone(ZoneOffset
.UTC
);
21 public static Instant
ldapDateToInstant(String ldapDate
) {
22 return OffsetDateTime
.parse(ldapDate
, utcLdapDate
).toInstant();
25 public static String
instantToLdapDate(ZonedDateTime instant
) {
26 return utcLdapDate
.format(instant
.withZoneSameInstant(ZoneOffset
.UTC
));
29 public static String
getQueryValue(Map
<String
, List
<String
>> query
, String key
) {
30 if (!query
.containsKey(key
))
32 List
<String
> val
= query
.get(key
);
36 throw new IllegalArgumentException("There are " + val
.size() + " value(s) for " + key
);
39 public static Map
<String
, List
<String
>> queryToMap(URI uri
) {
40 return queryToMap(uri
.getQuery());
43 private static Map
<String
, List
<String
>> queryToMap(String queryPart
) {
45 final Map
<String
, List
<String
>> query_pairs
= new LinkedHashMap
<String
, List
<String
>>();
46 if (queryPart
== null)
48 final String
[] pairs
= queryPart
.split("&");
49 for (String pair
: pairs
) {
50 final int idx
= pair
.indexOf("=");
51 final String key
= idx
> 0 ? URLDecoder
.decode(pair
.substring(0, idx
), StandardCharsets
.UTF_8
.name())
53 if (!query_pairs
.containsKey(key
)) {
54 query_pairs
.put(key
, new LinkedList
<String
>());
56 final String value
= idx
> 0 && pair
.length() > idx
+ 1
57 ? URLDecoder
.decode(pair
.substring(idx
+ 1), StandardCharsets
.UTF_8
.name()) : null;
58 query_pairs
.get(key
).add(value
);
61 } catch (UnsupportedEncodingException e
) {
62 throw new IllegalArgumentException("Cannot convert " + queryPart
+ " to map", e
);
66 private NamingUtils() {
70 // public static void main(String args[]) {
71 // ZonedDateTime now = ZonedDateTime.now().withZoneSameInstant(ZoneOffset.UTC);
72 // String str = utcLdapDate.format(now);
73 // System.out.println(str);
74 // utcLdapDate.parse(str);