]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/storage/threads/LegacyJsonThreadStore.java
24463933931e916546f48fa5291512b133416e94
[signal-cli] / src / main / java / org / asamk / signal / storage / threads / LegacyJsonThreadStore.java
1 package org.asamk.signal.storage.threads;
2
3 import com.fasterxml.jackson.annotation.JsonProperty;
4 import com.fasterxml.jackson.core.JsonGenerator;
5 import com.fasterxml.jackson.core.JsonParser;
6 import com.fasterxml.jackson.databind.DeserializationContext;
7 import com.fasterxml.jackson.databind.JsonDeserializer;
8 import com.fasterxml.jackson.databind.JsonNode;
9 import com.fasterxml.jackson.databind.JsonSerializer;
10 import com.fasterxml.jackson.databind.ObjectMapper;
11 import com.fasterxml.jackson.databind.SerializerProvider;
12 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
13 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.List;
19 import java.util.Map;
20
21 public class LegacyJsonThreadStore {
22
23 private static final ObjectMapper jsonProcessor = new ObjectMapper();
24
25 @JsonProperty("threads")
26 @JsonSerialize(using = MapToListSerializer.class)
27 @JsonDeserialize(using = ThreadsDeserializer.class)
28 private Map<String, ThreadInfo> threads = new HashMap<>();
29
30 public List<ThreadInfo> getThreads() {
31 return new ArrayList<>(threads.values());
32 }
33
34 private static class MapToListSerializer extends JsonSerializer<Map<?, ?>> {
35
36 @Override
37 public void serialize(
38 final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider
39 ) throws IOException {
40 jgen.writeObject(value.values());
41 }
42 }
43
44 private static class ThreadsDeserializer extends JsonDeserializer<Map<String, ThreadInfo>> {
45
46 @Override
47 public Map<String, ThreadInfo> deserialize(
48 JsonParser jsonParser, DeserializationContext deserializationContext
49 ) throws IOException {
50 Map<String, ThreadInfo> threads = new HashMap<>();
51 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
52 for (JsonNode n : node) {
53 ThreadInfo t = jsonProcessor.treeToValue(n, ThreadInfo.class);
54 threads.put(t.id, t);
55 }
56
57 return threads;
58 }
59 }
60 }