Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions src/main/java/com/mindee/parsing/v2/field/BaseField.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
package com.mindee.parsing.v2.field;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* Base class for V2 fields.
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@NoArgsConstructor
@AllArgsConstructor
public abstract class BaseField {
/**
* Field's location.
*/
@JsonProperty("locations")
private List<FieldLocation> locations;

/**
* Confidence associated with the field.
*/
@JsonProperty("confidence")
private FieldConfidence confidence;

/**
* Field's location.
*/
@JsonProperty("locations")
private List<FieldLocation> locations;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

if (root.has("items") && root.get("items").isArray()) {
ListField list = new ListField();
for (JsonNode itemNode : root.get("items")) {
list.getItems().add(codec.treeToValue(itemNode, DynamicField.class));
}
return DynamicField.of(list);
ListField listField = codec.treeToValue(root, ListField.class);
return DynamicField.of(listField);
}

if (root.has("fields") && root.get("fields").isObject()) {
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/com/mindee/parsing/v2/field/ListField.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;
import lombok.AllArgsConstructor;
Expand All @@ -24,7 +23,7 @@ public final class ListField extends BaseField {
* Items of the list.
*/
@JsonProperty("items")
private List<DynamicField> items = new ArrayList<>();
private List<DynamicField> items;

@Override
public String toString() {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/mindee/parsing/v2/field/ObjectField.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public String toString() {
return "\n" + (fields != null ? fields.toString(1) : "");
}

public String toStringFromList(){
public String toStringFromList() {
return fields != null ? fields.toString(2).substring(4) : "";
}
}
13 changes: 8 additions & 5 deletions src/main/java/com/mindee/parsing/v2/field/SimpleField.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import java.util.List;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
* Field holding a single scalar value.
Expand All @@ -15,16 +14,20 @@
@EqualsAndHashCode(callSuper = true)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(using = SimpleFieldDeserializer.class)
@AllArgsConstructor
@NoArgsConstructor
public final class SimpleField extends BaseField {

/**
* Value (string, boolean, number … or {@code null}).
* Value (string, boolean, double, or {@code null}).
*/
@JsonProperty("value")
private Object value;

public SimpleField(Object value, FieldConfidence confidence, List<FieldLocation> locations) {
super(confidence, locations);
this.value = value;
}


@Override
public String toString() {
if (value == null) return "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* Custom deserializer for {@link SimpleField}.
Expand All @@ -25,20 +27,30 @@ public SimpleField deserialize(JsonParser jp, DeserializationContext ctxt) throw
case BOOLEAN:
value = valueNode.booleanValue();
break;

case NUMBER:
value = valueNode.doubleValue();
break;

case STRING:
value = valueNode.textValue();
break;

default:
value = codec.treeToValue(valueNode, Object.class);
}
}

return new SimpleField(value);
FieldConfidence confidence = codec.treeToValue(
root.get("confidence"), FieldConfidence.class
);

List<FieldLocation> locations = null;
JsonNode locationsNode = root.get("locations");
if (locationsNode != null && locationsNode.isArray()) {
locations = new ArrayList<>();
for (JsonNode node : locationsNode) {
locations.add(codec.treeToValue(node, FieldLocation.class));
}
}

return new SimpleField(value, confidence, locations);
}
}
22 changes: 16 additions & 6 deletions src/test/java/com/mindee/parsing/v2/InferenceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,17 +196,23 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
SimpleField fieldSimpleString = fields.get("field_simple_string").getSimpleField();
assertNotNull(fieldSimpleString);
assertInstanceOf(String.class, fieldSimpleString.getValue());
assertEquals(FieldConfidence.Certain, fieldSimpleString.getConfidence());
assertInstanceOf(List.class, fieldSimpleString.getLocations());
assertEquals(1, fieldSimpleString.getLocations().size());

SimpleField fieldSimpleFloat = fields.get("field_simple_float").getSimpleField();
assertNotNull(fieldSimpleFloat);
assertInstanceOf(Double.class, fieldSimpleFloat.getValue());
assertEquals(FieldConfidence.High, fieldSimpleFloat.getConfidence());

SimpleField fieldSimpleInt = fields.get("field_simple_int").getSimpleField();
assertNotNull(fieldSimpleInt);
assertInstanceOf(Double.class, fieldSimpleInt.getValue());
assertEquals(FieldConfidence.Medium, fieldSimpleInt.getConfidence());

SimpleField fieldSimpleZero = fields.get("field_simple_zero").getSimpleField();
assertNotNull(fieldSimpleZero);
assertEquals(FieldConfidence.Low, fieldSimpleZero.getConfidence());
assertInstanceOf(Double.class, fieldSimpleZero.getValue());

SimpleField fieldSimpleBool = fields.get("field_simple_bool").getSimpleField();
Expand All @@ -223,16 +229,21 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
assertEquals(2, simpleItems.size());
SimpleField firstSimpleItem = simpleItems.get(0).getSimpleField();
assertNotNull(firstSimpleItem);
assertEquals(FieldConfidence.Medium, firstSimpleItem.getConfidence());
assertInstanceOf(String.class, firstSimpleItem.getValue());
for (DynamicField item : fieldSimpleList.getItems()) {
assertInstanceOf(String.class, item.getSimpleField().getValue());
SimpleField itemField = item.getSimpleField();
assertInstanceOf(String.class, itemField.getValue());
assertEquals(1, itemField.getLocations().size());
}

ObjectField fieldObject = fields.get("field_object").getObjectField();
assertNotNull(fieldObject);
InferenceFields fieldObjectFields = fieldObject.getFields();
assertEquals(2, fieldObjectFields.size());
assertInstanceOf(String.class, fieldObjectFields.get("subfield_1").getSimpleField().getValue());
SimpleField subfield1 = fieldObjectFields.get("subfield_1").getSimpleField();
assertInstanceOf(String.class, subfield1.getValue());
assertEquals(FieldConfidence.High, subfield1.getConfidence());

ListField fieldObjectList = fields.get("field_object_list").getListField();
assertNotNull(fieldObjectList);
Expand All @@ -245,10 +256,9 @@ void standardFieldTypes_mustExposeCorrectTypes() throws IOException {
firstObjectItem.getFields().get("subfield_1").getSimpleField().getValue()
);
for (DynamicField item : fieldObjectList.getItems()) {
assertInstanceOf(
String.class,
item.getObjectField().getFields().get("subfield_1").getSimpleField().getValue()
);
SimpleField listSubfield1 = item.getObjectField().getFields().get("subfield_1").getSimpleField();
assertInstanceOf(String.class, listSubfield1.getValue());
assertEquals(1, listSubfield1.getLocations().size());
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources
Loading