]> nmode's Git Repositories - signal-cli/blob - src/main/java/cli/JsonGroupStore.java
Refactoring, move more functionality into Manager
[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) throws GroupNotFoundException {
27 GroupInfo g = groups.get(Base64.encodeBytes(groupId));
28 if (g == null) {
29 throw new GroupNotFoundException(groupId);
30 }
31 return g;
32 }
33
34 public static class MapToListSerializer extends JsonSerializer<Map<?, ?>> {
35 @Override
36 public void serialize(final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
37 jgen.writeObject(value.values());
38 }
39 }
40
41 public static class GroupsDeserializer extends JsonDeserializer<Map<String, GroupInfo>> {
42 @Override
43 public Map<String, GroupInfo> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
44 Map<String, GroupInfo> groups = new HashMap<>();
45 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
46 for (JsonNode n : node) {
47 GroupInfo g = jsonProcessot.treeToValue(n, GroupInfo.class);
48 groups.put(Base64.encodeBytes(g.groupId), g);
49 }
50
51 return groups;
52 }
53 }
54 }