Skip to content

Commit f0123f8

Browse files
authored
🐛 fix for locations and confidence (#265)
1 parent fc57ed9 commit f0123f8

File tree

8 files changed

+61
-30
lines changed

8 files changed

+61
-30
lines changed
Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
package com.mindee.parsing.v2.field;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
34
import com.fasterxml.jackson.annotation.JsonProperty;
45
import java.util.List;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
59

610
/**
711
* Base class for V2 fields.
812
*/
13+
@Data
14+
@JsonIgnoreProperties(ignoreUnknown = true)
15+
@NoArgsConstructor
16+
@AllArgsConstructor
917
public abstract class BaseField {
10-
/**
11-
* Field's location.
12-
*/
13-
@JsonProperty("locations")
14-
private List<FieldLocation> locations;
15-
1618
/**
1719
* Confidence associated with the field.
1820
*/
1921
@JsonProperty("confidence")
2022
private FieldConfidence confidence;
23+
24+
/**
25+
* Field's location.
26+
*/
27+
@JsonProperty("locations")
28+
private List<FieldLocation> locations;
2129
}

src/main/java/com/mindee/parsing/v2/field/DynamicFieldDeserializer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.fasterxml.jackson.databind.JsonDeserializer;
77
import com.fasterxml.jackson.databind.JsonNode;
88
import java.io.IOException;
9+
import java.util.ArrayList;
10+
import java.util.List;
911

1012
/**
1113
* Custom deserializer for {@link DynamicField}.
@@ -18,11 +20,8 @@ public DynamicField deserialize(JsonParser jp, DeserializationContext ctxt) thro
1820
JsonNode root = codec.readTree(jp);
1921

2022
if (root.has("items") && root.get("items").isArray()) {
21-
ListField list = new ListField();
22-
for (JsonNode itemNode : root.get("items")) {
23-
list.getItems().add(codec.treeToValue(itemNode, DynamicField.class));
24-
}
25-
return DynamicField.of(list);
23+
ListField listField = codec.treeToValue(root, ListField.class);
24+
return DynamicField.of(listField);
2625
}
2726

2827
if (root.has("fields") && root.get("fields").isObject()) {

src/main/java/com/mindee/parsing/v2/field/ListField.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import java.util.ArrayList;
65
import java.util.List;
76
import java.util.StringJoiner;
87
import lombok.AllArgsConstructor;
@@ -24,7 +23,7 @@ public final class ListField extends BaseField {
2423
* Items of the list.
2524
*/
2625
@JsonProperty("items")
27-
private List<DynamicField> items = new ArrayList<>();
26+
private List<DynamicField> items;
2827

2928
@Override
3029
public String toString() {

src/main/java/com/mindee/parsing/v2/field/ObjectField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public String toString() {
2828
return "\n" + (fields != null ? fields.toString(1) : "");
2929
}
3030

31-
public String toStringFromList(){
31+
public String toStringFromList() {
3232
return fields != null ? fields.toString(2).substring(4) : "";
3333
}
3434
}

src/main/java/com/mindee/parsing/v2/field/SimpleField.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
6-
import lombok.AllArgsConstructor;
6+
import java.util.List;
77
import lombok.EqualsAndHashCode;
88
import lombok.Getter;
9-
import lombok.NoArgsConstructor;
109

1110
/**
1211
* Field holding a single scalar value.
@@ -15,16 +14,20 @@
1514
@EqualsAndHashCode(callSuper = true)
1615
@JsonIgnoreProperties(ignoreUnknown = true)
1716
@JsonDeserialize(using = SimpleFieldDeserializer.class)
18-
@AllArgsConstructor
19-
@NoArgsConstructor
2017
public final class SimpleField extends BaseField {
2118

2219
/**
23-
* Value (string, boolean, number … or {@code null}).
20+
* Value (string, boolean, double, or {@code null}).
2421
*/
2522
@JsonProperty("value")
2623
private Object value;
2724

25+
public SimpleField(Object value, FieldConfidence confidence, List<FieldLocation> locations) {
26+
super(confidence, locations);
27+
this.value = value;
28+
}
29+
30+
2831
@Override
2932
public String toString() {
3033
if (value == null) return "";

src/main/java/com/mindee/parsing/v2/field/SimpleFieldDeserializer.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.fasterxml.jackson.databind.JsonDeserializer;
77
import com.fasterxml.jackson.databind.JsonNode;
88
import java.io.IOException;
9+
import java.util.ArrayList;
10+
import java.util.List;
911

1012
/**
1113
* Custom deserializer for {@link SimpleField}.
@@ -25,20 +27,30 @@ public SimpleField deserialize(JsonParser jp, DeserializationContext ctxt) throw
2527
case BOOLEAN:
2628
value = valueNode.booleanValue();
2729
break;
28-
2930
case NUMBER:
3031
value = valueNode.doubleValue();
3132
break;
32-
3333
case STRING:
3434
value = valueNode.textValue();
3535
break;
36-
3736
default:
3837
value = codec.treeToValue(valueNode, Object.class);
3938
}
4039
}
4140

42-
return new SimpleField(value);
41+
FieldConfidence confidence = codec.treeToValue(
42+
root.get("confidence"), FieldConfidence.class
43+
);
44+
45+
List<FieldLocation> locations = null;
46+
JsonNode locationsNode = root.get("locations");
47+
if (locationsNode != null && locationsNode.isArray()) {
48+
locations = new ArrayList<>();
49+
for (JsonNode node : locationsNode) {
50+
locations.add(codec.treeToValue(node, FieldLocation.class));
51+
}
52+
}
53+
54+
return new SimpleField(value, confidence, locations);
4355
}
4456
}

src/test/java/com/mindee/parsing/v2/InferenceTest.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,17 +196,23 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
196196
SimpleField fieldSimpleString = fields.get("field_simple_string").getSimpleField();
197197
assertNotNull(fieldSimpleString);
198198
assertInstanceOf(String.class, fieldSimpleString.getValue());
199+
assertEquals(FieldConfidence.Certain, fieldSimpleString.getConfidence());
200+
assertInstanceOf(List.class, fieldSimpleString.getLocations());
201+
assertEquals(1, fieldSimpleString.getLocations().size());
199202

200203
SimpleField fieldSimpleFloat = fields.get("field_simple_float").getSimpleField();
201204
assertNotNull(fieldSimpleFloat);
202205
assertInstanceOf(Double.class, fieldSimpleFloat.getValue());
206+
assertEquals(FieldConfidence.High, fieldSimpleFloat.getConfidence());
203207

204208
SimpleField fieldSimpleInt = fields.get("field_simple_int").getSimpleField();
205209
assertNotNull(fieldSimpleInt);
206210
assertInstanceOf(Double.class, fieldSimpleInt.getValue());
211+
assertEquals(FieldConfidence.Medium, fieldSimpleInt.getConfidence());
207212

208213
SimpleField fieldSimpleZero = fields.get("field_simple_zero").getSimpleField();
209214
assertNotNull(fieldSimpleZero);
215+
assertEquals(FieldConfidence.Low, fieldSimpleZero.getConfidence());
210216
assertInstanceOf(Double.class, fieldSimpleZero.getValue());
211217

212218
SimpleField fieldSimpleBool = fields.get("field_simple_bool").getSimpleField();
@@ -223,16 +229,21 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
223229
assertEquals(2, simpleItems.size());
224230
SimpleField firstSimpleItem = simpleItems.get(0).getSimpleField();
225231
assertNotNull(firstSimpleItem);
232+
assertEquals(FieldConfidence.Medium, firstSimpleItem.getConfidence());
226233
assertInstanceOf(String.class, firstSimpleItem.getValue());
227234
for (DynamicField item : fieldSimpleList.getItems()) {
228-
assertInstanceOf(String.class, item.getSimpleField().getValue());
235+
SimpleField itemField = item.getSimpleField();
236+
assertInstanceOf(String.class, itemField.getValue());
237+
assertEquals(1, itemField.getLocations().size());
229238
}
230239

231240
ObjectField fieldObject = fields.get("field_object").getObjectField();
232241
assertNotNull(fieldObject);
233242
InferenceFields fieldObjectFields = fieldObject.getFields();
234243
assertEquals(2, fieldObjectFields.size());
235-
assertInstanceOf(String.class, fieldObjectFields.get("subfield_1").getSimpleField().getValue());
244+
SimpleField subfield1 = fieldObjectFields.get("subfield_1").getSimpleField();
245+
assertInstanceOf(String.class, subfield1.getValue());
246+
assertEquals(FieldConfidence.High, subfield1.getConfidence());
236247

237248
ListField fieldObjectList = fields.get("field_object_list").getListField();
238249
assertNotNull(fieldObjectList);
@@ -245,10 +256,9 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
245256
firstObjectItem.getFields().get("subfield_1").getSimpleField().getValue()
246257
);
247258
for (DynamicField item : fieldObjectList.getItems()) {
248-
assertInstanceOf(
249-
String.class,
250-
item.getObjectField().getFields().get("subfield_1").getSimpleField().getValue()
251-
);
259+
SimpleField listSubfield1 = item.getObjectField().getFields().get("subfield_1").getSimpleField();
260+
assertInstanceOf(String.class, listSubfield1.getValue());
261+
assertEquals(1, listSubfield1.getLocations().size());
252262
}
253263
}
254264
}

src/test/resources

0 commit comments

Comments
 (0)