X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/d0dae4e064ce2b41e4e6fcde786eec6e179656d6..c41ac8e7a32e0eaa3ab8786be14da46f4c20a08a:/src/main/java/cli/JsonGroupStore.java?ds=inline diff --git a/src/main/java/cli/JsonGroupStore.java b/src/main/java/cli/JsonGroupStore.java new file mode 100644 index 00000000..29f9abfe --- /dev/null +++ b/src/main/java/cli/JsonGroupStore.java @@ -0,0 +1,50 @@ +package cli; + +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) { + return groups.get(Base64.encodeBytes(groupId)); + } + + 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; + } + } +}