1 package org
.asamk
.signal
.storage
.contacts
;
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
;
15 import java
.io
.IOException
;
16 import java
.util
.ArrayList
;
17 import java
.util
.HashMap
;
18 import java
.util
.List
;
21 public class JsonContactsStore
{
23 private static final ObjectMapper jsonProcessor
= new ObjectMapper();
24 @JsonProperty("contacts")
25 @JsonSerialize(using
= JsonContactsStore
.MapToListSerializer
.class)
26 @JsonDeserialize(using
= ContactsDeserializer
.class)
27 private Map
<String
, ContactInfo
> contacts
= new HashMap
<>();
29 public void updateContact(ContactInfo contact
) {
30 contacts
.put(contact
.number
, contact
);
33 public ContactInfo
getContact(String number
) {
34 return contacts
.get(number
);
37 public List
<ContactInfo
> getContacts() {
38 return new ArrayList
<>(contacts
.values());
42 * Remove all contacts from the store
48 private static class MapToListSerializer
extends JsonSerializer
<Map
<?
, ?
>> {
51 public void serialize(final Map
<?
, ?
> value
, final JsonGenerator jgen
, final SerializerProvider provider
) throws IOException
{
52 jgen
.writeObject(value
.values());
56 private static class ContactsDeserializer
extends JsonDeserializer
<Map
<String
, ContactInfo
>> {
59 public Map
<String
, ContactInfo
> deserialize(JsonParser jsonParser
, DeserializationContext deserializationContext
) throws IOException
{
60 Map
<String
, ContactInfo
> contacts
= new HashMap
<>();
61 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
62 for (JsonNode n
: node
) {
63 ContactInfo c
= jsonProcessor
.treeToValue(n
, ContactInfo
.class);
64 contacts
.put(c
.number
, c
);