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
;
10 import java
.io
.IOException
;
11 import java
.util
.HashMap
;
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
<>();
20 private static final ObjectMapper jsonProcessot
= new ObjectMapper();
22 void updateGroup(GroupInfo group
) {
23 groups
.put(Base64
.encodeBytes(group
.groupId
), group
);
26 GroupInfo
getGroup(byte[] groupId
) throws GroupNotFoundException
{
27 GroupInfo g
= groups
.get(Base64
.encodeBytes(groupId
));
29 throw new GroupNotFoundException(groupId
);
34 public static class MapToListSerializer
extends JsonSerializer
<Map
<?
, ?
>> {
36 public void serialize(final Map
<?
, ?
> value
, final JsonGenerator jgen
, final SerializerProvider provider
) throws IOException
{
37 jgen
.writeObject(value
.values());
41 public static class GroupsDeserializer
extends JsonDeserializer
<Map
<String
, GroupInfo
>> {
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
);