]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/storage/threads/JsonThreadStore.java
a4a89ccde189c5bf1459dfc893b099e668043558
[signal-cli] / src / main / java / org / asamk / signal / storage / threads / JsonThreadStore.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 JsonThreadStore {
22
23 private static final ObjectMapper jsonProcessor = new ObjectMapper();
24
25 @JsonProperty("threads")
26 @JsonSerialize(using = JsonThreadStore.MapToListSerializer.class)
27 @JsonDeserialize(using = ThreadsDeserializer.class)
28 private Map<String, ThreadInfo> threads = new HashMap<>();
29
30 public void updateThread(ThreadInfo thread) {
31 threads.put(thread.id, thread);
32 }
33
34 public ThreadInfo getThread(String id) {
35 return threads.get(id);
36 }
37
38 public List<ThreadInfo> getThreads() {
39 return new ArrayList<>(threads.values());
40 }
41
42 private static class MapToListSerializer extends JsonSerializer<Map<?, ?>> {
43
44 @Override
45 public void serialize(final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
46 jgen.writeObject(value.values());
47 }
48 }
49
50 private static class ThreadsDeserializer extends JsonDeserializer<Map<String, ThreadInfo>> {
51
52 @Override
53 public Map<String, ThreadInfo> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
54 Map<String, ThreadInfo> threads = new HashMap<>();
55 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
56 for (JsonNode n : node) {
57 ThreadInfo t = jsonProcessor.treeToValue(n, ThreadInfo.class);
58 threads.put(t.id, t);
59 }
60
61 return threads;
62 }
63 }
64 }