]> nmode's Git Repositories - signal-cli/blob - src/main/java/cli/JsonGroupStore.java
Implement updateGroup
[signal-cli] / src / main / java / cli / JsonGroupStore.java
1 package cli;
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.*;
7 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
8 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
9
10 import java.io.IOException;
11 import java.util.HashMap;
12 import java.util.Map;
13
14 public class JsonGroupStore {
15 @JsonProperty("groups")
16 @JsonSerialize(using = JsonGroupStore.MapToListSerializer.class)
17 @JsonDeserialize(using = JsonGroupStore.GroupsDeserializer.class)
18 private Map<String, GroupInfo> groups = new HashMap<>();
19
20 private static final ObjectMapper jsonProcessot = new ObjectMapper();
21
22 void updateGroup(GroupInfo group) {
23 groups.put(Base64.encodeBytes(group.groupId), group);
24 }
25
26 GroupInfo getGroup(byte[] groupId) {
27 return groups.get(Base64.encodeBytes(groupId));
28 }
29
30 public static class MapToListSerializer extends JsonSerializer<Map<?, ?>> {
31 @Override
32 public void serialize(final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
33 jgen.writeObject(value.values());
34 }
35 }
36
37 public static class GroupsDeserializer extends JsonDeserializer<Map<String, GroupInfo>> {
38 @Override
39 public Map<String, GroupInfo> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
40 Map<String, GroupInfo> groups = new HashMap<>();
41 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
42 for (JsonNode n : node) {
43 GroupInfo g = jsonProcessot.treeToValue(n, GroupInfo.class);
44 groups.put(Base64.encodeBytes(g.groupId), g);
45 }
46
47 return groups;
48 }
49 }
50 }