X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/5859e7b9f78b5d8963c56c66b75530ee3f094bee..27d9424f1e7f607ac2dfad5b2164d065ffb79ef7:/src/main/java/org/asamk/textsecure/JsonGroupStore.java diff --git a/src/main/java/org/asamk/textsecure/JsonGroupStore.java b/src/main/java/org/asamk/textsecure/JsonGroupStore.java new file mode 100644 index 00000000..17a59f87 --- /dev/null +++ b/src/main/java/org/asamk/textsecure/JsonGroupStore.java @@ -0,0 +1,54 @@ +package org.asamk.textsecure; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class JsonGroupStore { + @JsonProperty("groups") + @JsonSerialize(using = JsonGroupStore.MapToListSerializer.class) + @JsonDeserialize(using = JsonGroupStore.GroupsDeserializer.class) + private Map groups = new HashMap<>(); + + private static final ObjectMapper jsonProcessot = new ObjectMapper(); + + void updateGroup(GroupInfo group) { + groups.put(Base64.encodeBytes(group.groupId), group); + } + + GroupInfo getGroup(byte[] groupId) throws GroupNotFoundException { + GroupInfo g = groups.get(Base64.encodeBytes(groupId)); + if (g == null) { + throw new GroupNotFoundException(groupId); + } + return g; + } + + public static class MapToListSerializer extends JsonSerializer> { + @Override + public void serialize(final Map value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException { + jgen.writeObject(value.values()); + } + } + + public static class GroupsDeserializer extends JsonDeserializer> { + @Override + public Map deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + Map groups = new HashMap<>(); + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + for (JsonNode n : node) { + GroupInfo g = jsonProcessot.treeToValue(n, GroupInfo.class); + groups.put(Base64.encodeBytes(g.groupId), g); + } + + return groups; + } + } +}