Skip to content

Commit 9a02c22

Browse files
author
Grace Calianese
committed
Merge branch 'RLPNC-7502-partial-record-failingv2' into RLPNC-7499-deserialization-without-field-mapping
# Conflicts: # json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityResponseDeserializer.java # json/src/test/java/com/basistech/rosette/apimodel/recordsimilarity/RecordSimilarityResponseTest.java
2 parents 3f62c04 + 8787659 commit 9a02c22

11 files changed

Lines changed: 189 additions & 17 deletions

File tree

examples/src/main/java/com/basistech/rosette/examples/RecordSimilarityExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ private void run() throws IOException {
9090
primaryNameField, NameField.UnfieldedName.builder().text("Ivan R").build(),
9191
dobField, DateField.FieldedDate.builder().date(dobHyphen).build(),
9292
dob2Field, DateField.FieldedDate.builder().date("1993/04/16").build(),
93-
addrField, AddressField.FieldedAddress.builder().address("123 Roadlane Ave").build()
93+
addrField, AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build()
9494
)
9595
)
9696
).build()

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityDeserializerUtilities.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919
import java.io.IOException;
2020
import java.util.HashMap;
2121
import java.util.Iterator;
22+
import java.util.List;
2223
import java.util.Map;
2324
import java.util.Optional;
25+
import java.util.stream.Collectors;
26+
import java.util.stream.StreamSupport;
2427

2528
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityExplainInfo;
2629
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
@@ -57,12 +60,18 @@ public static RecordSimilarityResult parseResult(JsonNode node, JsonParser jsonP
5760
? parseRecordForResponse(node.get("right"), jsonParser)
5861
: null;
5962
final String error = Optional.ofNullable(node.get("error")).map(JsonNode::asText).orElse(null);
63+
List<String> info = Optional.ofNullable(node.get("info"))
64+
.map(jsonNode -> StreamSupport.stream(jsonNode.spliterator(), false)
65+
.map(JsonNode::asText)
66+
.collect(Collectors.toList()))
67+
.orElse(null);
6068
return RecordSimilarityResult.builder()
6169
.score(score)
6270
.left(left)
6371
.right(right)
6472
.explainInfo(explainInfo)
6573
.error(error)
74+
.info(info)
6675
.build();
6776
}
6877

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityResponseDeserializer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import java.util.ArrayList;
2828
import java.util.List;
2929
import java.util.Optional;
30+
import java.util.stream.Collectors;
31+
import java.util.stream.StreamSupport;
3032

3133
public class RecordSimilarityResponseDeserializer extends StdDeserializer<RecordSimilarityResponse> {
3234

@@ -38,6 +40,11 @@ public RecordSimilarityResponseDeserializer() {
3840
public RecordSimilarityResponse deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
3941
final JsonNode node = jsonParser.getCodec().readTree(jsonParser);
4042

43+
List<String> info = Optional.ofNullable(node.get("info"))
44+
.map(jsonNode -> StreamSupport.stream(jsonNode.spliterator(), false)
45+
.map(JsonNode::asText)
46+
.collect(Collectors.toList()))
47+
.orElse(null);
4148
String errorMessage = Optional.ofNullable(node.get("errorMessage")).map(JsonNode::asText).orElse(null);
4249

4350
JsonNode resultsNode = node.get("results");
@@ -49,6 +56,7 @@ public RecordSimilarityResponse deserialize(JsonParser jsonParser, Deserializati
4956
}
5057
return RecordSimilarityResponse.builder()
5158
.results(results)
59+
.info(info)
5260
.errorMessage(errorMessage)
5361
.build();
5462
}

json/src/test/java/com/basistech/rosette/apimodel/RecordSimilarityRequestTest.java

Lines changed: 120 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@
2929
import com.basistech.util.LanguageCode;
3030
import com.fasterxml.jackson.core.JsonProcessingException;
3131
import com.fasterxml.jackson.core.type.TypeReference;
32-
import com.fasterxml.jackson.databind.MapperFeature;
32+
import com.fasterxml.jackson.databind.JsonNode;
3333
import com.fasterxml.jackson.databind.ObjectMapper;
34-
import com.fasterxml.jackson.databind.SerializationFeature;
3534
import org.junit.jupiter.api.Test;
3635

3736
import java.util.List;
@@ -42,15 +41,114 @@
4241
class RecordSimilarityRequestTest {
4342

4443
private static final ObjectMapper MAPPER = ApiModelMixinModule.setupObjectMapper(new ObjectMapper());
44+
private static final String EXPECTED_JSON = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5,\"scoreIfNull\":0.8}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}";
45+
private static final String EXPECTED_JSON_WITH_PARAMS = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true,\"parameters\":{\"timeDistanceWeight\":\"0.8\",\"stringDistanceWeight\":\"0.1\"}},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}";
46+
private static final String EXPECTED_JSON_WITH_UNIVERSE = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true,\"parameterUniverse\":\"myParameterUniverse\"},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}";
4547

46-
private static final String EXPECTED_JSON = "{\"fields\":{\"addr\":{\"type\":\"rni_address\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5}},\"properties\":{\"includeExplainInfo\":true,\"threshold\":0.7},\"records\":{\"left\":[{\"addr\":\"123 Roadlane Ave\",\"dob\":\"1993-04-16\",\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\",\"text\":\"Ethan R\"}},{\"dob\":{\"date\":\"1993-04-16\"},\"primaryName\":{\"text\":\"Evan R\"}}],\"right\":[{\"dob\":{\"date\":\"1993-04-16\"},\"primaryName\":{\"language\":\"eng\",\"text\":\"Seth R\"}},{\"addr\":{\"address\":\"123 Roadlane Ave\"},\"dob\":{\"date\":\"1993-04-16\"},\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\"}]}}";
4748
private static final RecordSimilarityRequest EXPECTED_REQUEST = RecordSimilarityRequest.builder()
4849
.fields(Map.of(
50+
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).scoreIfNull(0.8).build(),
51+
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).scoreIfNull(null).build(),
52+
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(),
53+
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build()))
54+
.properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build())
55+
.records(RecordSimilarityRecords.builder()
56+
.left(
57+
List.of(
58+
Map.of(
59+
"primaryName", NameField.FieldedName.builder()
60+
.text("Ethan R").entityType("PERSON")
61+
.language(LanguageCode.ENGLISH)
62+
.languageOfOrigin(LanguageCode.ENGLISH)
63+
.script(ISO15924.Latn)
64+
.build(),
65+
"dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(),
66+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
67+
"addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build()
68+
),
69+
Map.of(
70+
"primaryName", NameField.FieldedName.builder().text("Evan R").build(),
71+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
72+
)
73+
)
74+
).right(
75+
List.of(
76+
Map.of(
77+
"primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(),
78+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
79+
),
80+
Map.of(
81+
"primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(),
82+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build(),
83+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
84+
"addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build()
85+
)
86+
)
87+
).build()
88+
).build();
89+
90+
private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_PARAMS = RecordSimilarityRequest.builder()
91+
.fields(Map.of(
92+
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).build(),
4993
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(),
5094
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build(),
95+
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).build()))
96+
.properties(RecordSimilarityProperties.builder()
97+
.threshold(0.7)
98+
.includeExplainInfo(true)
99+
.parameters(
100+
Map.of(
101+
"timeDistanceWeight", "0.8",
102+
"stringDistanceWeight", "0.1"
103+
)
104+
)
105+
.build())
106+
.records(RecordSimilarityRecords.builder()
107+
.left(
108+
List.of(
109+
Map.of(
110+
"primaryName", NameField.FieldedName.builder()
111+
.text("Ethan R").entityType("PERSON")
112+
.language(LanguageCode.ENGLISH)
113+
.languageOfOrigin(LanguageCode.ENGLISH)
114+
.script(ISO15924.Latn)
115+
.build(),
116+
"dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(),
117+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
118+
"addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build()
119+
),
120+
Map.of(
121+
"primaryName", NameField.FieldedName.builder().text("Evan R").build(),
122+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
123+
)
124+
)
125+
).right(
126+
List.of(
127+
Map.of(
128+
"primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(),
129+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
130+
),
131+
Map.of(
132+
"primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(),
133+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build(),
134+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
135+
"addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build()
136+
)
137+
)
138+
).build()
139+
).build();
140+
141+
private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_UNIVERSE = RecordSimilarityRequest.builder()
142+
.fields(Map.of(
143+
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build(),
144+
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(),
51145
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).build(),
52146
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).build()))
53-
.properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build())
147+
.properties(RecordSimilarityProperties.builder()
148+
.threshold(0.7)
149+
.includeExplainInfo(true)
150+
.parameterUniverse("myParameterUniverse")
151+
.build())
54152
.records(RecordSimilarityRecords.builder()
55153
.left(
56154
List.of(
@@ -80,26 +178,37 @@ class RecordSimilarityRequestTest {
80178
"primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(),
81179
"dob", DateField.FieldedDate.builder().date("1993-04-16").build(),
82180
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
83-
"addr", AddressField.FieldedAddress.builder().address("123 Roadlane Ave").build()
181+
"addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build()
84182
)
85183
)
86184
).build()
87185
).build();
88186

89187
@Test
90188
void testDeserialization() throws JsonProcessingException {
91-
MAPPER.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY);
92-
MAPPER.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
93189
final RecordSimilarityRequest request = MAPPER.readValue(EXPECTED_JSON, new TypeReference<>() { });
94190
assertEquals(EXPECTED_REQUEST, request);
191+
192+
final RecordSimilarityRequest requestParams = MAPPER.readValue(EXPECTED_JSON_WITH_PARAMS, new TypeReference<>() { });
193+
assertEquals(EXPECTED_REQUEST_WITH_PARAMS, requestParams);
194+
195+
final RecordSimilarityRequest requestUniverse = MAPPER.readValue(EXPECTED_JSON_WITH_UNIVERSE, new TypeReference<>() { });
196+
assertEquals(EXPECTED_REQUEST_WITH_UNIVERSE, requestUniverse);
95197
}
96198

97199
@Test
98200
void testSerialization() throws JsonProcessingException {
99-
// For testing, force ordering
100-
MAPPER.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY);
101-
MAPPER.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
102-
assertEquals(EXPECTED_JSON, MAPPER.writeValueAsString(EXPECTED_REQUEST));
201+
final JsonNode expectedJson = MAPPER.readTree(EXPECTED_JSON);
202+
final JsonNode actualJson = MAPPER.valueToTree(EXPECTED_REQUEST);
203+
assertEquals(expectedJson, actualJson);
204+
205+
final JsonNode expectedParamJson = MAPPER.readTree(EXPECTED_JSON_WITH_PARAMS);
206+
final JsonNode actualParamJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_PARAMS);
207+
assertEquals(expectedParamJson, actualParamJson);
208+
209+
final JsonNode expectedUniverseJson = MAPPER.readTree(EXPECTED_JSON_WITH_UNIVERSE);
210+
final JsonNode actualUniverseJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_UNIVERSE);
211+
assertEquals(expectedUniverseJson, actualUniverseJson);
103212
}
104213

105214
}

0 commit comments

Comments
 (0)