]>
nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/util/Util.java
1 package org
.asamk
.signal
.util
;
3 import com
.fasterxml
.jackson
.annotation
.JsonAutoDetect
;
4 import com
.fasterxml
.jackson
.annotation
.PropertyAccessor
;
5 import com
.fasterxml
.jackson
.core
.JsonGenerator
;
6 import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
8 import org
.slf4j
.Logger
;
9 import org
.slf4j
.LoggerFactory
;
11 import java
.net
.URLDecoder
;
12 import java
.nio
.charset
.StandardCharsets
;
13 import java
.util
.Arrays
;
14 import java
.util
.HashMap
;
15 import java
.util
.List
;
16 import java
.util
.Locale
;
18 import java
.util
.Optional
;
19 import java
.util
.concurrent
.ExecutorService
;
20 import java
.util
.concurrent
.TimeUnit
;
21 import java
.util
.stream
.Collectors
;
25 private final static Logger logger
= LoggerFactory
.getLogger(Util
.class);
30 public static String
getStringIfNotBlank(Optional
<String
> value
) {
31 var string
= value
.orElse(null);
32 if (string
== null || string
.isBlank()) {
38 public static String
dashSeparatedToCamelCaseString(String s
) {
39 var parts
= s
.split("-");
40 return toCamelCaseString(Arrays
.asList(parts
));
43 private static String
toCamelCaseString(List
<String
> strings
) {
44 if (strings
.isEmpty()) {
47 return strings
.get(0) + strings
.stream()
49 .filter(s
-> !s
.isEmpty())
50 .map(s
-> Character
.toUpperCase(s
.charAt(0)) + s
.substring(1).toLowerCase(Locale
.ROOT
))
51 .collect(Collectors
.joining());
54 public static String
formatSafetyNumber(String digits
) {
59 final var partCount
= 12;
60 var partSize
= digits
.length() / partCount
;
61 var f
= new StringBuilder(digits
.length() + partCount
);
62 for (var i
= 0; i
< partCount
; i
++) {
63 f
.append(digits
, i
* partSize
, (i
* partSize
) + partSize
);
64 if (i
!= partCount
- 1) {
71 public static ObjectMapper
createJsonObjectMapper() {
72 var objectMapper
= new ObjectMapper();
73 objectMapper
.setVisibility(PropertyAccessor
.ALL
, JsonAutoDetect
.Visibility
.PUBLIC_ONLY
);
74 objectMapper
.disable(JsonGenerator
.Feature
.AUTO_CLOSE_TARGET
);
78 public static Map
<String
, String
> getQueryMap(String query
) {
79 var params
= query
.split("&");
80 var map
= new HashMap
<String
, String
>();
81 for (var param
: params
) {
82 final var paramParts
= param
.split("=");
83 var name
= URLDecoder
.decode(paramParts
[0], StandardCharsets
.UTF_8
);
84 var value
= paramParts
.length
== 1 ?
null : URLDecoder
.decode(paramParts
[1], StandardCharsets
.UTF_8
);
90 public static void closeExecutorService(ExecutorService executor
) {
93 if (!executor
.awaitTermination(5, TimeUnit
.MINUTES
)) {
94 executor
.shutdownNow();
95 if (!executor
.awaitTermination(1, TimeUnit
.MINUTES
)) {
96 logger
.warn("Failed to shutdown executor service");
99 } catch (InterruptedException e
) {
100 executor
.shutdownNow();
101 Thread
.currentThread().interrupt();