]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.enterprise/src/org/argeo/naming/NamingUtils.java
0b74ee18c4f4521ad4ceb48994594665fecbd9b6
[lgpl/argeo-commons.git] / org.argeo.enterprise / src / org / argeo / naming / NamingUtils.java
1 package org.argeo.naming;
2
3 import java.io.UnsupportedEncodingException;
4 import java.net.URI;
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;
15 import java.util.Map;
16
17 public class NamingUtils {
18 private final static DateTimeFormatter utcLdapDate = DateTimeFormatter.ofPattern("uuuuMMddHHmmssX")
19 .withZone(ZoneOffset.UTC);
20
21 public static Instant ldapDateToInstant(String ldapDate) {
22 return OffsetDateTime.parse(ldapDate, utcLdapDate).toInstant();
23 }
24
25 public static String instantToLdapDate(ZonedDateTime instant) {
26 return utcLdapDate.format(instant.withZoneSameInstant(ZoneOffset.UTC));
27 }
28
29 public static String getQueryValue(Map<String, List<String>> query, String key) {
30 if (!query.containsKey(key))
31 return null;
32 List<String> val = query.get(key);
33 if (val.size() == 1)
34 return val.get(0);
35 else
36 throw new IllegalArgumentException("There are " + val.size() + " value(s) for " + key);
37 }
38
39 public static Map<String, List<String>> queryToMap(URI uri) {
40 return queryToMap(uri.getQuery());
41 }
42
43 private static Map<String, List<String>> queryToMap(String queryPart) {
44 try {
45 final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
46 if (queryPart == null)
47 return query_pairs;
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())
52 : pair;
53 if (!query_pairs.containsKey(key)) {
54 query_pairs.put(key, new LinkedList<String>());
55 }
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);
59 }
60 return query_pairs;
61 } catch (UnsupportedEncodingException e) {
62 throw new IllegalArgumentException("Cannot convert " + queryPart + " to map", e);
63 }
64 }
65
66 private NamingUtils() {
67
68 }
69
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);
75 // }
76 }