1 package org
.asamk
.signal
.storage
.threads
;
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
.ArrayList
;
12 import java
.util
.HashMap
;
13 import java
.util
.List
;
16 public class JsonThreadStore
{
18 private static final ObjectMapper jsonProcessor
= new ObjectMapper();
20 @JsonProperty("threads")
21 @JsonSerialize(using
= JsonThreadStore
.MapToListSerializer
.class)
22 @JsonDeserialize(using
= ThreadsDeserializer
.class)
23 private Map
<String
, ThreadInfo
> threads
= new HashMap
<>();
25 public void updateThread(ThreadInfo thread
) {
26 threads
.put(thread
.id
, thread
);
29 public ThreadInfo
getThread(String id
) {
30 return threads
.get(id
);
33 public List
<ThreadInfo
> getThreads() {
34 return new ArrayList
<>(threads
.values());
37 private static class MapToListSerializer
extends JsonSerializer
<Map
<?
, ?
>> {
40 public void serialize(final Map
<?
, ?
> value
, final JsonGenerator jgen
, final SerializerProvider provider
) throws IOException
{
41 jgen
.writeObject(value
.values());
45 private static class ThreadsDeserializer
extends JsonDeserializer
<Map
<String
, ThreadInfo
>> {
48 public Map
<String
, ThreadInfo
> deserialize(JsonParser jsonParser
, DeserializationContext deserializationContext
) throws IOException
{
49 Map
<String
, ThreadInfo
> threads
= new HashMap
<>();
50 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
51 for (JsonNode n
: node
) {
52 ThreadInfo t
= jsonProcessor
.treeToValue(n
, ThreadInfo
.class);