-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathPageDeserializer.java
More file actions
64 lines (57 loc) · 2.55 KB
/
PageDeserializer.java
File metadata and controls
64 lines (57 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.codepine.api.testrail.internal;
import com.codepine.api.testrail.model.Links;
import com.codepine.api.testrail.model.Page;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.ArrayNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class PageDeserializer extends StdDeserializer<Page> {
public static String field = "objects";
public static Class type = Object.class;
public static Object supplement = Collections.emptyList();
public PageDeserializer() {
this(null);
}
public PageDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Page deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int offset = node.get("offset").asInt();
int limit = node.get("limit").asInt();
int size = node.get("size").asInt();
JsonNode links = node.get("links");
String next = links.get("next").isNull() ? null : links.get("next").asText();
String prev = links.get("prev").isNull() ? null : links.get("prev").asText();
ArrayNode objects = (ArrayNode) node.get(field);
List list = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE)
.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false)
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.registerModules(new CaseModule(), new FieldModule(), new PlanModule(), new ResultModule(), new UnixTimestampModule());
for(int i = 0; i < objects.size(); i++) {
JsonNode element = objects.get(i);
list.add(mapper.reader(type).with(new InjectableValues.Std().addValue(type.toString(), supplement)).readValue(element.toString()));
}
Page page = new Page();
page.limit = limit;
page.offset = offset;
page.size = size;
page._links = new Links();
page._links.next = next;
page._links.prev = prev;
page.objects = list;
return page;
}
}